2012-09-07 50 views
4

偶尔遇到这个问题,我没有找到解决方法。 它通常发生在我找到方程的根时,并且想根据某个参数最大化/最小化/绘制根。所以我尝试将代码包装在一个模块中,这样所有代码都可以用一个输入数字来执行,但它不能在诸如Plot之类的函数中使用。 例如:Mathematica:用FindRoot绘制一个模块

f[din_] := Module[{d = din}, 
    sol = NDSolve[{y'[x] == y[x], y[0] == 1}, y[x], {x, 0, 10}]; 
    t1 = Flatten[FindRoot[y[x] - d /. sol, {x, 1}]]; 
    x /. t1 
    ] 
f[2] 
f[2.5] 
f[3] 
Plot[f[x], {x, 2, 3}] 

像预期的那样到f与一些所有工作电话,但在情节功能的F似乎与符号“X”进行评价 - 或东西,只是给了很多错误的文本。

任何方法?

环顾论坛,我发现类似的问题提出了一些建议 - 喜欢做的定义是这样的:

f[din_?NumericQ]:= 

,我试图尽我所能,但似乎没有有所作为。 我使用Mathematica 8.0

回答

0

尝试:

f[din_?NumericQ] := Module[{LocalDummy, Localy, LocalSol}, 
    Localy = y /. NDSolve[{y'[LocalDummy] == y[LocalDummy], y[0] == 1}, y, {LocalDummy, 0, 10}][[1]]; 
    LocalSol = FindRoot[Localy[LocalDummy] - din == 0, {LocalDummy, 1}][[1, 2]] ] 

plot

1

主要的解决办法是采取sol = NDSolve[...从模块中。模块本身也可以简化,如下所示: -

sol = NDSolve[{y'[x] == y[x], y[0] == 1}, y[x], {x, 0, 10}]; 

f[din_] := x /. FindRoot[y[x] - din /. sol, {x, 1}] 

Plot[f[x], {x, 2, 3}] 

enter image description here