Re: DSolve validation

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

```Forgot one thing.  A simpler way to do the verifying is:

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

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

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

In[3]:=
FullSimplify[ode1 /. sol1]

Out[3]=
{True}

On Thursday, April 25, 2002, at 10:06  PM, Andrzej Kozlowski wrote:

> 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,
>>
>>
>>
>>
>>
>>
>

```

• Prev by Date: Re: invisible graphics
• Next by Date: Re: Pattern matching
• Previous by thread: Re: DSolve validation