DSolve bug: wrong explicit solutions
- To: MATHGROUP at yoda.physics.unc.edu
- Subject: DSolve bug: wrong explicit solutions
- From: <Constantin.Kahn at cdc2.c.mathematik.uni-hannover.dbp.de>
- Date: 15 Feb 92 15:16
Hi, the following Mma session (Mma 2.0.3 for Macintosh) demonstrates a pretty serious bug in Mma's DSolve command which causes it to return a wrong explicit solution for a simple system of two first order differential equations involving only trigonometric functions. So always check those results! (There is also a problem with Simplify which does not do quite the expected thing...) For your information: This system of differential equations arises in differential geometry if you try to compute the parallel transport of a tangent vector along the central curve in a Moebius strip (which is embedded into 3-dim'l affine space such that its boundary lies on a torus and forms a torus knot of type (2,1); obvious parametrization). This bug has been reported to bugs at wri.com. Regards, Constantin Kahn, Inst. f. Mathematik, Univ. Hannover, Germany - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (* Mathematica session follows. Output cells are shown indented. *) $Version "Macintosh 2.0 (September 3, 1991)" solution = DSolve[ { a'[t] - Cos[t] b[t] == 0, b'[t] + Cos[t] a[t] == 0, a[0] == 0, b[0] == 1 }, { a[t], b[t] }, t ] {{a[t] -> I/2*E^(-I*t*Cos[t]) - I/2*E^(I*t*Cos[t]), b[t] -> E^(-I*t*Cos[t])/2 + E^(I*t*Cos[t])/2}} (* This is not a solution! (See below.) Mathematica's Simplify command also isn't very smart in this case: *) Simplify[ solution ] {{a[t] -> I/2*E^(-I*t*Cos[t]) - I/2*E^(I*t*Cos[t]), b[t] -> E^(-I*t*Cos[t])/2 + E^(I*t*Cos[t])/2}} A[t_] := Sin[t Cos[t]]; B[t_] := Cos[t Cos[t]]; Simplify[ { A[t] - (a[t]/.solution), B[t] - (b[t]/.solution) } ] {{0}, {0}} (* So A[t] and B[t] are what the functions obtained as solutions really are. Let's see whether they actually solve the differential equations. *) errorA = D[A[t],t] - Cos[t] B[t]; errorB = D[B[t],t] + Cos[t] A[t]; Simplify[ { errorA, errorB } ] {-(t*(Sin[2*t*Cos[t/2]^2] + Sin[2*t*Sin[t/2]^2]))/2, (t*(-Cos[2*t*Cos[t/2]^2] + Cos[2*t*Sin[t/2]^2]))/2} Plot[ errorA, {t,0,2Pi} ]; Plot[ errorB, {t,0,2Pi} ]; (* end of Mathematica session transcript *)