データのプロットを得る方法
8 ビュー (過去 30 日間)
古いコメントを表示
・(x,y)のデータをそれぞれ入力して(xに時間、yに吸光度を入力したい)グラフにプロットし、任意の近似式((y=a+bexp(-cx)など)で近似曲線を得るために、どんなコードを打てば良いのかがわかりません。コードの例を教えていただきたいです。
2 件のコメント
採用された回答
Atsushi Ueno
2021 年 5 月 29 日
編集済み: Atsushi Ueno
2021 年 5 月 29 日
上記の公式回答がとても参考になるので、自分の目的にあった方法を探してください。
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 件のコメント
Hiroki Takeda
2022 年 5 月 18 日
ご回答、ありがとうございます。すみません、私のやり方が悪いのかうまくいかないようです。
Atsushi Ueno様の元は、ライブスクリプトエディタで実行できました。私の上記のものは、実行ファイル内でできれば嬉しいです。特に知りたい数字は最適化関数値が最小となるパラメータa,b,cの、pです。これもグラフ内に記載できると幸いです。
よろしくお願いいたします。
Atsushi Ueno
2022 年 5 月 18 日
CoderやCompilerが無いので確認できていませんが、functionの名前をmainとした事が問題になっているかもしれません。function mainとendの行を記述せず、fminsearch関数をHx,Hyを演算する所と同じ場所で実行すれば良いと思います。fun関数の定義はそのままにすべきです。
関数を分割する必要も入れ子にする必要もありません。
当時の自分がなぜ”function main”を定義したのか覚えていません。
混乱を与えてしまい申し訳ありません。
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 非線形最適化 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!