MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: change the solution to a differential equation into a user defined function - question.nb (0/1)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg15602] Re: change the solution to a differential equation into a user defined function - question.nb (0/1)
  • From: Hartmut Wolf <hw at gsmail01.darmstadt.dsh.de>
  • Date: Thu, 28 Jan 1999 04:23:31 -0500 (EST)
  • Organization: debis Systemhaus
  • References: <786u4u$29b@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Dear Yong Cai

Yong Cai schrieb:
> 
> I probably have to apologize for the awkward name for the subject.
> 
> My question is
> 
> In[1]:=
> sol=DSolve[y'[x]==x,y[x],x]
> Out[1]=
> \!\({{y[x] \[Rule] x\^2\/2 + C[1]}}\)
> 
> In[2]:=
> FullForm[sol]
> Out[2]//FullForm=
> List[List[Rule[y[x],Plus[Times[Rational[1,2],Power[x,2]],C[1]]]]]
> 
> After I type in the command to solve the differential equation, I am
> given a replacement rule of y[x], which can be applied as a rule when
> the argument inside y is x, nothing else.
> 
> In[3]:=
> y[x_]:=x^2/2+c[1]
> In[4]:=
> FullForm[y[x_]]
> Out[4]//FullForm=
> Plus[c[1],Times[Rational[1,2],Power[Pattern[x,Blank[]],2]]]
> 
> When I define the same function for y[x] by myself, it is evidently  a
> pattern where x can be taken in any value.
> 
> Then comes the question: how can we use the solution given in a
> differential equation which itself is a function as a function for
> later use?

I can't understand:  ...which itself is a function...

....but to answer to
             the question: how can we use the solution given in a
  differential equation -------------------------- as a function for
  later use?

> 
> It seems to be straightforward, but I have looked through the
> Mathematica Book and found no clue. Your help will be greatly
> appreciated.

The result of DSolve is a list of solutions for a list of Functions of a
list of simultanious differential equations, where each element is a
replacement rule. So just use that!

Let's take the examples of Stephen Wolfram's Book (in 3.5.11 of 2nd
Edition)

  Remove[y]
  sol = DSolve[y[x] y'[x] == 1, y, x] //FullForm

  {{y -> (- Sqrt[2] Sqrt[#1 + C[1]]&)}, {y -> (Sqrt[2] Sqrt[(#1 +
C[1]]&)}}

so to use the result (i.e. in a Plot) just do

  Unprotect[C];C[1] = 4;
  Plot[Evaluate[y[x] /. sol[[1]] ], {x, 0, 20}];

  --plot not shown--

or just to calculate a value

  y[2 Pi} /. sol[[2]]

 Sqrt[2] Sqrt[2 Pi + C[1]]

for another example:

  Remove[y,z]
  solutions = DSolve[{y[x]==-z'[x], z[x]==-y'[x]}, {y,z}, x]

  {{y -> (4 E^(-#1) C[1] - E^#1 C[2]&), z -> (4 E^(-#1) C[1] + E^#1
C[2]&)}}

  Unprotect[C]; C[1]=1;C[2]=-1;
  Through[{y,z}[x] ] /. solutions[[1]]

  {4 E^-x + E^x, 4 E^-x - E^x}

or
  
  {y[1], z[1.]} /. solutions[[1]]

  {4/E + E, -1.24676}


I think that should normally do it.


Trying to follow your trace of reasoning, we can get the function you
want. Let's use your example:

  Remove[y]
  sol = DSolve[y'[x]==x, y[x], x] //FullForm

  List[List[Rule[y[x],Plus[Times[Rational[1,2],Power[x,2]],C[1]]]]]

To define a function that corresponds to that solution

  yy[x_] := x^2/2 + c[1]

  DownValues[yy] //FullForm

  List[RuleDelayed[HoldPattern[yy[Pattern[x,Blank[]]]],
    Plus[Times[Power[x,2],Power[2,-1]],c[1]]]]

That's it, now we know what to do to transform the solution to the
function

  sol[[1,1]]/. y[x]->HoldPattern[y[Pattern[x,Blank[]]]]  //FullForm

  Rule[HoldPattern[y[Pattern[x,Blank[]]]],
  Plus[Times[Rational[1,2],Power[x,2]],C[1]]]

  RuleDelayed @@ %  //FullForm

  RuleDelayed[HoldPattern[y[Pattern[x,Blank[]]]],
  Plus[Times[Rational[1,2],Power[x,2]],C[1]]]

  DownValues[y] = %;

  ?y

  Global`y

  y[x_] := x^2/2 + C[1]

so to use it:

  Unprotect[C];C[1] = -1;

  Plot[y[r], {r,-2, 2}]

  --plot not shown here--


  • Prev by Date: how to use Findminimum with a function defined numerically through a parameter
  • Next by Date: Re: speed
  • Previous by thread: RE: change the solution to a differential equation into a user defined function - question.nb (0/1)
  • Next by thread: Tutorials on Package and On-Line Documentation Development