MathGroup Archive 2009

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

Search the Archive

Re: NDSolve with Numeric Function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg100233] Re: NDSolve with Numeric Function
  • From: dh <dh at metrohm.com>
  • Date: Thu, 28 May 2009 19:34:31 -0400 (EDT)
  • References: <gvka0b$oo8$1@smc.vnet.net>


Hi Hugh,

I have rewritten your code a bit.

You can write the function RHS with vector notation, then your problems 

disappear.

========================

ClearAll[RHS];

RHS[x_, y_, f_] := Module[{},

   -{{1, 2, 3, 5}, {3, 2, 1, 2}, {5, 7, 1, 1}, {3, 2, 4, 5}}.x + 3 y

   ]

sol = NDSolve[{x''[t] == RHS[x[t], x'[t], 1], x[0] == {-1, 0, 1, 0},

    x'[0] == {0, 0, 0, 0}}, x, {t, 0, 2}

   ]

===========================

Neverthelesse, there is something fishy. The second case should actually 

work. However:

  MatchQ[#1, x_ /; NumericQ[ x[[1]] ]]

returns True. Maybe you want to report this to Wolfram.

Daniel



Hugh Goyder wrote:

> Please could someone explain why my NDSolve examples below don't work?

> In the first case I think it fails because NDSolve attempts to

> evaluate the function RHS symbolically.

> The second case should remain unevaluated and signal to NDSolve to go

> numerical but this fails why?

>  In the third case a similar check to the second works. Why?

> 

>  Many thanks

>  Hugh Goyder

> 

> ClearAll[RHS];

> RHS[x_, v_, f_] := Module[{x1, y1, x2, y2, x1v, y1v, x2v, y2v},

>   {x1, y1, x2, y2} = x;

>   {x1v, y1v, x2v, y2v} = v;

>   -{{1, 2, 3, 5}, {3, 2, 1, 2}, {5, 7, 1, 1}, {3, 2, 4, 5}}.{x1, y1,

>       x2, y2} + 3 {x1v, y1v, x2v, y2v}

>   ]

> 

> sol = NDSolve[{x''[t] == RHS[x[t], x'[t], 1], x[0] == {-1, 0, 1, 0},

>    x'[0] == {0, 0, 0, 0}}, x, {t, 0, 2}]

> 

> ClearAll[RHS];

> RHS[x_ /; NumericQ[x[[1]]], v_, f_] :=

>  Module[{x1, y1, x2, y2, x1v, y1v, x2v, y2v},

>   {x1, y1, x2, y2} = x;

>   {x1v, y1v, x2v, y2v} = v;

>   -{{1, 2, 3, 5}, {3, 2, 1, 2}, {5, 7, 1, 1}, {3, 2, 4, 5}}.{x1, y1,

>       x2, y2} + 3 {x1v, y1v, x2v, y2v}

>   ]

> 

> sol = NDSolve[{x''[t] == RHS[x[t], x'[t], 1], x[0] == {-1, 0, 1, 0},

>    x'[0] == {0, 0, 0, 0}}, x, {t, 0, 2}]

> 

> ClearAll[RHS];

> RHS[x_ /; Head[x] == List, v_, f_] :=

>  Module[{x1, y1, x2, y2, x1v, y1v, x2v, y2v},

>   {x1, y1, x2, y2} = x;

>   {x1v, y1v, x2v, y2v} = v;

>   -{{1, 2, 3, 5}, {3, 2, 1, 2}, {5, 7, 1, 1}, {3, 2, 4, 5}}.{x1, y1,

>       x2, y2} + 3 {x1v, y1v, x2v, y2v}

>   ]

> 

> sol = NDSolve[{x''[t] == RHS[x[t], x'[t], 1], x[0] == {-1, 0, 1, 0},

>    x'[0] == {0, 0, 0, 0}}, x, {t, 0, 2}]

> 




  • Prev by Date: Re: Working with Indeterminate in large numerical lists
  • Next by Date: p.s. // Re: Re: new to group - Chemical Equation
  • Previous by thread: Re: NDSolve with Numeric Function
  • Next by thread: Numbering