方程式があります
y = a + b Exp[-x/c] data = {{462.36, 8872}, {408.18, 8780}, {374.4, 8915}, {322.8, 8937}, {274.00, 8919}, {243.03, 9114}, {209.32, 9277}, {178.91, 9394}, {140.71, 9508}, {113.08, 9592}}; nlm = FindFit[data, y = a + b Exp[-x/c], {{a, 100}, {b, 100}, {c, 10}}, x] Show[ ListPlot[data, PlotStyle -> {Darker@Green, PointSize[0.03]}], Plot[y/. nlm, {x, 1, 600}]]
上記は、現在すべてが機能している方法です。
更新
実際にはほとんどすべてが機能しています。私が抱えている唯一の問題は、データの最初の2ポイントと行の先頭です。実際に描画されるのはグラフのy軸の前から始まるため、グラフを見ると左に傾いています。これを右に戻すためにどの値を変更する必要があるかを理解しようとしていますが、少し苦労しています。
FindFit
関数に入力するにはどうすればよいですか?
FindFit[data, model, parms];
データがあります。これをmodel
とparams
に正しく取り込む方法がわかりません。これがデータに対して私に与えられた式で、「データを入力する方法や、指数曲線になることを示す方法がわからない。
コメント
- わかりました、これが私の質問です'ほとんどすべてが機能しています。私が問題を抱えているのは、X軸が150から始まり、最初のポイントが113であるということだけです。問題が発生すると、y軸の後ろにプロットされます。それで、x軸を開始する方法はありますか。
- 更新された質問は、プロット範囲を設定することだけだと思います。この場合、手動で設定するのが最適です。PlotRange-> {{0、800}、{8000、11000}}をListPlot内に配置します。
回答
NonlinearModelFit
を使用することをお勧めします:
data = {{0, 10}, {1, 5}, {3, 2}, {5, 1}, {6, 0}, {7, 0}}; nlm = NonlinearModelFit[data, a + b Exp[-x/c], {a, b, c}, x] Show[Plot[nlm[x], {x, 0, 7}] ,ListPlot[data, PlotStyle -> {Darker@Green, PointSize[0.03]}] ]
パラメータを表示するには、nlm["BestFitParameters"]
取得する
{a-> 0.100889、b-> 9.76356、c-> 1.62293}
更新
@ george2079のヒントで新しいテストデータを使用すると、次のようになります。
data = {{462.36,8872},{408.18,8780},{374.4,8915},{322.8,8937}, {274.00,8919},{243.03,9114},{209.32,9277},{178.91,9394}, {140.71,9508},{113.08,9592}}; nlm=NonlinearModelFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}},x] Show[ListPlot[data, PlotStyle -> {Darker@Green, PointSize[0.03]}] ,Plot[nlm[x],{x,1,600}] ]
コメント
- linearModelfitをプロットに取得するのに問題があり、構文エラーが発生します。 ListPlotには、気に入らないものがあると思います。
- サンプルデータを質問に追加して、テストすることができます。
- @Bill代わりに質問を編集してください。 usiのコメント。
- 元の質問に使用しようとしているデータと機能を追加しました。どんな提案でも大歓迎です。
- これはうまくいきます。私が抱えている唯一の問題は、実際に線を表示させることです。プロットするデータを取得しましたが、'実際にプロットする曲線を取得していません。何が間違っているのか考えてみてください。
回答
この場合、FindFitとNonlinearModelFitはすぐには見つかりません。適切な場合は、パラメータに適切な開始値を指定する必要があります。
data = {{462.36, 8872}, {408.18, 8780}, {374.4, 8915}, {322.8, 8937}, {274.00, 8919}, {243.03, 9114}, {209.32, 9277}, {178.91, 9394}, {140.71, 9508}, {113.08, 9592}} FindFit[data, a + b Exp[-x /c], {a, b, c}, x]
(*エラー検索のステップサイズが許容値を下回りました。 .. *)
FindFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}}, x]
(* {a-> 8692.35、b-> 1910.19、c-> 161.513} *)
これは見栄えがよく、グラフィックを投稿できません。
では、どのようにして開始値を考え出しますか?式をプロットし、かなり近づくまで定数を手作業で試しました。それが不十分な場合は申し訳ありませんが、数学が完全に自動化できる方法を超えた、データフィッティングへの芸術が実際に少しあります。
コメント
- 実際にあなたのコードでグラフ化する線を取得しましたが、それでも歪んだグラフを取得しています。任意のアイデア。