optimazation toolboxを使っ​てどのようにして反応​速度定数を求めるか。

添付したPDFファイル1ページにある反応モデルで4つの反応速度定数を求めたいです。
解析方法としては実験値xeとモデル解xsの差の二乗が最小になるように反応速度定数を求めたいです。
実験はまだ行っていないので実験値xeは適当なものを代入しています。
PDFファイル2ページにあるようにエラーが2つ出ていて、MATLABを利用するのは初めてで知識不足なため
原因が分からず手詰まりです。
どちらか片方のエラーでもいいので原因を教えていただけないでしょうか。

2 Kommentare

Kazuya
Kazuya am 22 Nov. 2018
に同じ内容の質問がありますが、同じ授業からの課題かなにかです?
taisho kondo
taisho kondo am 26 Nov. 2018
同じ投稿者です。
以前質問したアカウントで24時間経過してもファイルの添付ができなかったため、新しいアカウントで投稿しました。
卒業論文の解析で使います。

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Kazuya
Kazuya am 23 Nov. 2018
Bearbeitet: Kazuya am 23 Nov. 2018

0 Stimmen

エラーメッセージをコピペできない・・ので、わかりにくさは勘弁ください。
エラーメッセージによると 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 Kommentare

taisho kondo
taisho kondo am 26 Nov. 2018
コメントありがとうございます。
返信遅くなり申し訳ありません。
xeは実験値で転置行列で置いているので、行列の一列目が物質Aの濃度、二列目が物質Bの濃度・・・五列目が物質Eの濃度と定義しています。
xsはモデル解で同様に定義しています。
xeとxsの差eも同様に定義しており、目的関数fはeの二乗誤差を計算しています。一列目が物質Aの濃度・・・五列目が物質Eの濃度となるようにしたいので、意図通りになっていないのですがどうすれば良いでしょうか。
f = norm(e); はどこで定義したら良いでしょうか。
最終的には二乗誤差eが最小になるように反応速度定数を求めたいです。
添付した文献のモデルを拡張してプログラムを作成しているのですが、式(A.16)のy = h(x)を私のプログラムで定義していないためエラーが出ているのではないかと思っているのですが、関係ないでしょうか。
この式の意味をこの文献の著者に質問したところ、「非線形最適化を一般表現した時の出力変数」と仰っていたのですが、意味が理解できず私のプログラムでどのように定義したらいいかわかっていない状況です。
長文失礼しました。
Kazuya
Kazuya am 26 Nov. 2018
f = e'*e;
の代わりに
f = norm(e);
と書けば、おそらく意図通りになるかなと思います。
論文は残念ながら読み解けていませんが、他にも実行エラーが出ていますか?
taisho kondo
taisho kondo am 27 Nov. 2018
f = norm(e); に変えたところエラーは消えました。
私は目的関数 f=e*e' で各物質(A、B・・・E)それぞれの誤差の二乗を求め
それぞれの物質の誤差が最小になるように反応速度定数を決めようとしていました。
normを使った場合、目的関数で各成分の二乗の和のルートを求めるので、
すべての物質の誤差の二乗の和が最小になるように反応速度定数を求めることになると
いうことですか?
Kazuya
Kazuya am 27 Nov. 2018
そうですね、、「すべての物質の誤差の二乗の和」の平方根が最小になるように反応速度定数を求めています。
fminconを使う場合に最小化できるのは1つの値にだけなので、それぞれの誤差をそれぞれ最小化する問題には使えません。多目的最適化については下記をどうぞー。
taisho kondo
taisho kondo am 27 Nov. 2018
分かりました。
親切に教えていただきありがとうございます。
fminconと多目的最適化のどちらが今回の実験にあっているか考えてみます。
また、何かあったときはよろしくお願いいたします。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!