3

f[a,b,c]変化させながらプロットしたい次の関数を設定したaとします。b

f[a_,b_,c_]:=a b c Exp[a b]

Manipulate[
Plot
[
f[a,b,c],
{c,0,1},
PlotRange->{{0,0.05},Automatic}
],
{a,0,1},
{b,0,1}
]

横座標の表示範囲を固定したときに、縦座標を自動的にスケーリングすることはできますか? a上記のコードで、変化するとb縦座標の範囲全体を表示しているかのように自動的にスケーリングされることに気付くでしょう{c,0,1}c0 から 1 までを処理したいのですが、このプロットのより小さなセクション、たとえばc0 から 0.05 を表示したい場合でも、垂直軸は正しくスケーリングされています。ご協力ありがとうございました。

4

3 に答える 3

8

Artes Docendo の提案の変形:

Manipulate[
 Plot[f[a, b, c], {c, 0, Evaluate@d}, 
  PlotRange -> {{0, Evaluate@d}, Full}], {a, 0., 1.}, {b, 0., 1.}, {d, 
  0.05, 1.}]

実際に何かを描画しようとする前にEvaluate、機械精度の値を強制的に関数に渡すことに注意してください。Plot

このような場合は、y 軸ではなく、曲線の一部を隠す方法でプロットをトリミングしないことがわかっているため、私は好んでFull使用します。AutomaticPlotRange

于 2012-01-09T23:53:47.480 に答える
4

考えられる多くの解決策の 1 つを次に示します。

f[a_, b_, c_] := a b c Exp[a b]
Manipulate[ Plot[f[a, b, c], {c, 0, d}, PlotRange -> Automatic], 
            {a, 0, 1}, {b, 0, 1}, {d, 0.1, 1}, Initialization :> (d := 0.1)]

ただし、あなたの例はあまり有益ではありません。どのように機能するかを確認するには、次のようなものを試してください。

g[a_, b_, c_] := 3 (a - 0.5) Cos[4 Pi (a - c)] Sin[8 Pi (c - 0.5)] Cos[6 Pi (b - c)]

Manipulate[
           Plot[g[a, b, c], {c, 0, d}, PlotRange -> Automatic],
           {a, 0, 1}, {b, 0, 1}, {d, 0.1, 1}, 
           Initialization :> (a := 0.4; b := 0.4; d := 0.5)]
于 2012-01-09T23:23:19.153 に答える
3

これで目的が達成されるかどうかを確認してください。プロットの代わりに ListPlot を使用するだけです。

fしかし、0 から 1 までの c をプロットしているのに、x 範囲を 0 から 0.05 までに設定しているため、何をしているのかわかりません。fを使用してプロットしてみません{c,0,0.05}か?何かが足りないのかもしれません。

とにかく、ここに私が持っているものがあります

 Manipulate[

 xmax = 0.05;
 y = Table[f[a, b, c], {c, 0, xmax, 0.01}];
 max = Max[y];
 min = Min[y];

 Plot[f[a, b, c], {c, 0, 1},
  PlotRange -> {{0, xmax}, {min, max}}, ImagePadding -> 30],

 {a, 0, 1},
 {b, 0, 1},
 Initialization :>
  (
   f[a_, b_, c_] := a b c Exp[a b]
   )

 ]

編集(1)

上記をより効率的にするには、プロット範囲の最大/最小を見つけるだけでなく、最初の Table コマンドを使用してデータ自体も生成することです。そして、ListPlotの代わりに使用しPlotます。f関数のサンプリングが 2 回ではなく 1 回だけ行われるように、これはより高速になるはずですか?

だからここに2番目のバージョンがあります

Manipulate[xmax = 0.05;

 data = Table[{c, f[a, b, c]}, {c, 0, xmax, 0.01}];
 max = Max[data[[All, 2]]];
 min = Min[data[[All, 2]]];

 ListPlot[
  data,
  PlotRange -> {Automatic, {min, max}},
  Joined -> True,
  ImagePadding -> 30
  ],

 {a, 0, 1},
 {b, 0, 1},
 Initialization :>
  (
   f[a_, b_, c_] := a b c Exp[a b]
   )
 ]
于 2012-01-09T23:26:05.903 に答える