NDSolve with Numeric Function

*To*: mathgroup at smc.vnet.net*Subject*: [mg100190] NDSolve with Numeric Function*From*: Hugh Goyder <h.g.d.goyder at cranfield.ac.uk>*Date*: Wed, 27 May 2009 04:09:45 -0400 (EDT)

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}]