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

8 ビュー (過去 30 日間)
美音 奥居
美音 奥居 2021 年 5 月 28 日
コメント済み: Atsushi Ueno 2022 年 5 月 18 日
・(x,y)のデータをそれぞれ入力して(xに時間、yに吸光度を入力したい)グラフにプロットし、任意の近似式((y=a+bexp(-cx)など)で近似曲線を得るために、どんなコードを打てば良いのかがわかりません。コードの例を教えていただきたいです。
  2 件のコメント
美音 奥居
美音 奥居 2021 年 5 月 28 日
ご回答ありがとうございます。Toolboxは持っています。宜しくお願い致します。

サインインしてコメントする。

採用された回答

Atsushi Ueno
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
Hiroki Takeda 2022 年 5 月 18 日
ご回答、ありがとうございます。すみません、私のやり方が悪いのかうまくいかないようです。
Atsushi Ueno様の元は、ライブスクリプトエディタで実行できました。私の上記のものは、実行ファイル内でできれば嬉しいです。特に知りたい数字は最適化関数値が最小となるパラメータa,b,cの、pです。これもグラフ内に記載できると幸いです。
よろしくお願いいたします。
Atsushi Ueno
Atsushi Ueno 2022 年 5 月 18 日
CoderやCompilerが無いので確認できていませんが、functionの名前をmainとした事が問題になっているかもしれません。function mainとendの行を記述せず、fminsearch関数をHx,Hyを演算する所と同じ場所で実行すれば良いと思います。fun関数の定義はそのままにすべきです。
関数を分割する必要も入れ子にする必要もありません。
当時の自分がなぜ”function main”を定義したのか覚えていません。
混乱を与えてしまい申し訳ありません。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange非線形最適化 についてさらに検索

タグ

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!