Re: DSolve validation

• To: mathgroup at smc.vnet.net
• Subject: [mg34006] Re: [mg33989] DSolve validation
• From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
• Date: Fri, 26 Apr 2002 03:27:30 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```First of all, you forgot something.

In[1]:=
ode1 = Derivative[2][y][x] + x*y[x] == 0;

In[2]:=
sol1 = DSolve[ode1, y[x], x]

Out[2]=
{{y[x] -> AiryAi[(-1)^(1/3)*x]*C[1] + AiryBi[(-1)^(1/3)*x]*
C[2]}}

In[3]:=
FullSimplify[ode1 /. D[sol1, x, x] /. D[sol1, x] /. sol1]

Out[3]=
{{{True}}}}

But actually this method will only work in relatively simple cases. When
the answer is complicated enough there is no algorithm to verify it
symbolically because there is no algorithm which reduces one complicated
expression to another. So you have to resort to trying to obtain
numerical confirmation of the validity of your solutions.

Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/

On Thursday, April 25, 2002, at 04:00  PM, Vladimir Bondarenko wrote:

> Gentlemen,
>
> 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?
>
> Thank you a lot for your time and efforts in advance.
>
>
> Sincerely,
>