データのプロットを得る方法

9 visualizzazioni (ultimi 30 giorni)
美音 奥居
美音 奥居 il 28 Mag 2021
Commentato: Atsushi Ueno il 18 Mag 2022
・(x,y)のデータをそれぞれ入力して(xに時間、yに吸光度を入力したい)グラフにプロットし、任意の近似式((y=a+bexp(-cx)など)で近似曲線を得るために、どんなコードを打てば良いのかがわかりません。コードの例を教えていただきたいです。

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 29 Mag 2021
Modificato: Atsushi Ueno il 29 Mag 2021
上記の公式回答がとても参考になるので、自分の目的にあった方法を探してください。
Toolboxの有無を伺いましたが、私がToolboxを持っていないので動作確認する事ができません。コメントに書いた類似質問を参考にしてToolbox不要なコード(fminsearchによる方法)を書いてみました。入力の測定点と近似曲線(ここではy=a+bexp(-cx))の誤差の二乗平方和が最小になるように最適化されます。
function main
X = (0:0.1:10)'; % XとYは適当なデータ
Y = 4.5+2.3.*exp(-1.2.*X) + 0.3*(rand(size(X))-0.5);
p0 = [1 1 1]; % パラメータの初期値 p0 = [a b c] 適当な初期値1に設定
p = fminsearch(@(p)fun(p,X,Y),p0); % 最適化関数値が最小となるパラメータa,b,cを求める
Ysim = p(1) + p(2).* exp(-p(3).* X); % 求められた最適化関数の出力を求める
plot(X,Y,'o',X,Ysim) % 測定点(青色のo点)と最適化関数(橙色の直線)をプロットする
end
function obj = fun(p,X,Y) % 最適化関数
Ysim = p(1) + p(2).* exp(-p(3).* X) % 測定点の指数関数a + b * exp(-cx)を定義
obj = (Y - Ysim).' * (Y - Ysim) % 測定点と近似点の誤差の二乗平方和を計算
end
  5 Commenti
Hiroki Takeda
Hiroki Takeda il 18 Mag 2022
ご回答、ありがとうございます。すみません、私のやり方が悪いのかうまくいかないようです。
Atsushi Ueno様の元は、ライブスクリプトエディタで実行できました。私の上記のものは、実行ファイル内でできれば嬉しいです。特に知りたい数字は最適化関数値が最小となるパラメータa,b,cの、pです。これもグラフ内に記載できると幸いです。
よろしくお願いいたします。
Atsushi Ueno
Atsushi Ueno il 18 Mag 2022
CoderやCompilerが無いので確認できていませんが、functionの名前をmainとした事が問題になっているかもしれません。function mainとendの行を記述せず、fminsearch関数をHx,Hyを演算する所と同じ場所で実行すれば良いと思います。fun関数の定義はそのままにすべきです。
関数を分割する必要も入れ子にする必要もありません。
当時の自分がなぜ”function main”を定義したのか覚えていません。
混乱を与えてしまい申し訳ありません。

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!