optimazation toolboxを使ってどのようにして反応速度定数を求めるか。
5 views (last 30 days)
Show older comments
添付したPDFファイル1ページにある反応モデルで4つの反応速度定数を求めたいです。
解析方法としては実験値xeとモデル解xsの差の二乗が最小になるように反応速度定数を求めたいです。
実験はまだ行っていないので実験値xeは適当なものを代入しています。
PDFファイル2ページにあるようにエラーが2つ出ていて、MATLABを利用するのは初めてで知識不足なため
原因が分からず手詰まりです。
どちらか片方のエラーでもいいので原因を教えていただけないでしょうか。
2 Comments
Accepted Answer
Kazuya
on 23 Nov 2018
Edited: Kazuya
on 23 Nov 2018
エラーメッセージをコピペできない・・ので、わかりにくさは勘弁ください。
エラーメッセージによると kondo_objfun が原因です。fmincon 関数で目的関数として kondo_objfun を使っていますが、kondo_objfun が出力として返す値がスカラー値でないといけない、とメッセージは言っています。
せっかくコードを添付して頂いたので、実行してみました。kondo_objfun は
e = xe - xs;
f = e'*e;
と、実験値との誤差を評価しているのだと思いますが、ここが原因です。xe は 7x5 の配列で、xs も7点の時刻での解を求めているので、もちろん 7x5 の配列です。ここで、f を計算すると 5x5 の配列がでてきますが、、これは意図通りですか?
誤差の定義も色々あると思いますが、5x5 の配列ではなく、スカラー値で出してくれというのが、エラーメッセージが意味するところです。
とりあえず、
f = norm(e);
とすればなんとなくの誤差をスカラー値で計算できるので動くようになると思いますが、目的にあっているかどうかは適宜調査くださいませ。
あと、非線形制約関数にも問題ありです。
function [c, ceq] = kondo_funcon()
ではなく、
function [c, ceq] = kondo_funcon(x)
と入力引数が(関数内で使わなくても)必要です。
5 Comments
Kazuya
on 27 Nov 2018
そうですね、、「すべての物質の誤差の二乗の和」の平方根が最小になるように反応速度定数を求めています。
fminconを使う場合に最小化できるのは1つの値にだけなので、それぞれの誤差をそれぞれ最小化する問題には使えません。多目的最適化については下記をどうぞー。
More Answers (0)
See Also
Categories
Find more on ソルバーベースの非線形最適化 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!