Re: DSolve validation
- To: mathgroup at smc.vnet.net
- Subject: [mg34020] Re: [mg33989] DSolve validation
- From: BobHanlon at aol.com
- Date: Fri, 26 Apr 2002 03:28:08 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 4/25/02 5:38:34 AM, vvb at mail.strace.net writes: >It's easy to double check the DSolve output here: > > In[1] := ode1 = y''[x] + x y'[x] == 0; > > In[2] := sol1 = DSolve[ode1, y[x], x] > Out[2] = {{y[x] -> C[2] + Sqrt[Pi/2]*C[1]*Erf[x/Sqrt[2]]}} > > In[3] := ode1 /. D[sol1, x, x] /. D[sol1, x] > Out[3] = {{True}} > >Life is great! Inspirited with the success, let's consider this ODE. > > In[4] := ode1 = y''[x] + x y[x] == 0; > > In[5] := sol1 = DSolve[ode1, y[x], x] > Out[5] = {{y[x] -> AiryAi[(-1)^(1/3)*x]*C[1] + AiryBi[(-1)^(1/3)*x]*C[2]}} > > In[6] := ode1 /. D[sol1, x, x] /. D[sol1, x] > Out[6] = {{-(x*AiryAi[(-1)^(1/3)*x]*C[1]) - x*AiryBi[(-1)^(1/3)*x]*C[2] >+ x*y[x] == 0}} > > >(* Oops! The trick does not work ;-( *) > > In[7] := ode1 /. D[sol1, x, x] /. D[sol1, x]//FullSimplify > Out[7] = {{x*(AiryAi[(-1)^(1/3)*x]*C[1] + AiryBi[(-1)^(1/3)*x]*C[2] >- y[x]) == 0}} > > >(* Not great, again *) > > In[8] := ode1 /. D[sol1, x, x] /. D[sol1, x] // ComplexExpand // >FullSimplify > Out[8] = {{x*(AiryAi[(-1)^(1/3)*x]*C[1] + AiryBi[(-1)^(1/3)*x]*C[2] >- y[x]) == 0}} > >(* etc etc etc *) > > >'Fraid, the same double check trouble holds for the hundreds ODEs I have >tried 8-( > >What might be a more or less streamlined way to validate the DSolve solutions? >Any module (publicly) available? Any (including halp-baked & raw) ideas >& hints? > You have to substitute for the function as well as the derivatives. In general use, NestList[D[#,x]&, sol, n] where n is the highest order derivative required. ode1=y''[x]+x y'[x]==0; sol1=DSolve[ode1,y[x],x]//Flatten; drv1 = NestList[D[#,x]&, sol1, 2]//Flatten; ode1 /. drv1 True ode2=y''[x]+x y[x]==0; sol2=DSolve[ode2,y[x],x]//Flatten; drv2 = NestList[D[#,x]&, sol2, 2]//Flatten; ode2 /. drv2 // Simplify True Bob Hanlon Chantilly, VA USA