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 に答える