プロが教えるわが家の防犯対策術!

F(x,xdata) = x(1)*exp(x(2)*xdata);

そして、初期点は x0 = [100; -1]; です。

まず、F の値を返すファイルを記述してください (F は n 個の構成要素です)。

function F = myfun(x,xdata)
F = x(1)*exp(x(2)*xdata);

次に最適化ルーチンを呼び出します。

% Assume you determined xdata and ydata experimentally
xdata = ...
[0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
ydata = ...
[455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];
x0 = [100; -1] % Starting guess
[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata);
x =
498.8309 -0.1013
resnorm =
9.5049

lsqcurvefitを使いたいわけですが、上記のまま記述しても’関数または変数 'x' が未定義です。’とエラーが出ます。また、最適化ルーチンを呼び出すとはどうすればいいのでしょうか?
ご教示の程よろしくお願い致します。

質問者からの補足コメント

  • 回答ありがとうございます。
    Matlabに関する質問のカテゴリはどこになりますか?C言語の類にしましたが、、、
    ちなみに未知数の解を求めるのはこの関数でよろしいでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/11/06 14:25

A 回答 (3件)

MATLABはないので、その他(プログラミング) になるんじゃないですかね。

プログラムを組む前に、関数の仕様を熟読するのが先ではないでしょうか。関数のセレクションまでは、私も知りません。出題者、もしくはクライアントに問題を確認することが最初の仕事、そしてサンプルのプログラムを組み、動けば、その処理の結果を検証し、この関数でよかったのかどうかを確定するのが、その次の仕事ではないかと思います。
    • good
    • 0
この回答へのお礼

返信ありがとうございました。

お礼日時:2015/11/09 21:37

蛇足ながら、lsqcurvefitは、MATLAB Optimization Toolboxに含まれる関数ですから、Toolboxのライセンスを購入していないと使用出来ません。

この回答への補足あり
    • good
    • 0

マルチポスト(知恵袋)の上に、C/C++なのでカテ違いです。


lsqcurvefitは、myfunを使って非線形曲線近似問題を解くものですね。
単純にlsqcurvefitとmyfunを使って問題を解くことを「最適化ルーチンを呼ぶ」と言っているだけでしょう。myfunは、myfun.mのようにして独立した関数にしていますか?別ファイルにしてみて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!