Function Mathematica:绘制包含FindRoot的模块

Function Mathematica:绘制包含FindRoot的模块,function,module,plot,wolfram-mathematica,delayed-execution,Function,Module,Plot,Wolfram Mathematica,Delayed Execution,我偶尔会遇到这个问题,但我还没有找到解决办法。 当我找到一个方程的根,并想根据某个参数最大化/最小化/绘制该根时,通常会发生这种情况。所以我尝试将代码包装在一个模块中,这样就可以只使用一个输入编号来执行所有代码,但它在Plot之类的函数中不起作用。 例如: f[din_] := Module[{d = din}, sol = NDSolve[{y'[x] == y[x], y[0] == 1}, y[x], {x, 0, 10}]; t1 = Flatten[FindRoot[y[x]

我偶尔会遇到这个问题,但我还没有找到解决办法。 当我找到一个方程的根,并想根据某个参数最大化/最小化/绘制该根时,通常会发生这种情况。所以我尝试将代码包装在一个模块中,这样就可以只使用一个输入编号来执行所有代码,但它在Plot之类的函数中不起作用。 例如:

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的所有操作都与预期的一样,但是Plot函数中的f似乎是用符号“x”或其他什么来计算的,并且只给出了大量错误文本

有办法吗

环顾各个论坛,我发现了一些针对类似问题的建议,比如这样定义:

 f[din_?NumericQ]:=
我尽了我所能,但似乎没有任何改变。 我正在使用Mathematica 8.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]] ]

主要修复方法是将
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}]