4

我偶尔会遇到这个问题,但我还没有找到解决方法。它通常发生在我找到方程的根,并且想要根据某个参数最大化/最小化/绘制该根时。所以我尝试将代码包装在一个模块中,这样它就可以只用一个输入数字来执行,但它不能在像 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

4

2 回答 2

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

在此处输入图像描述

于 2012-09-08T20:17:39.723 回答
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]] ]

阴谋

于 2012-09-07T23:45:00.700 回答