fminuncを異な​る2つの変数で行う方​法について

39 views (last 30 days)
Tsuyoshi Yasuda
Tsuyoshi Yasuda on 8 Feb 2018
Answered: Tsuyoshi Yasuda on 12 Feb 2018
以下のプログラムでfminuncを行うと ,
入力引数が不足しています。
エラー: main>@(x,y)eval_func(x,y)
エラー: fminunc (line 292) f = feval(funfcn{3},x,varargin{:});
エラー: main (line 43) [answer,z] = fminunc(object_func,z0,options);
原因: 目的関数を初期評価できませんでした。関数 FMINUNC で計算を続行できません。
とエラーが出ました.どうしたら異なる2変数でできますか?
%%最急降下法の条件設定
%最急降下法の初期値
x0 = 5;
y0 = 5;
z0 = [x0 y0];
%最大の繰り返し回数
MaxIterations_Data = 1000;
%変数の許容誤差
StepTolerance_Data = 10^-6;
%勾配の許容誤差
OptimalityTolerance_Data = 10^-6;
%関数の評価回数
MaxFunctionEvaluations_Data = 1000000;
%目的関数
object_func = @(x,y)eval_func(x,y);
%%最急降下法のオプション
%最急降下法を行う設定
options = optimoptions('fminunc');
options = optimoptions(options,'Algorithm', 'quasi-newton');
options = optimoptions(options,'HessUpdate', 'steepdesc');
%解の出力の設定
options = optimoptions(options,'Display', 'iter');
%停止条件の設定
options = optimoptions(options,'MaxIterations', MaxIterations_Data);%繰り返し回数
options = optimoptions(options,'StepTolerance', StepTolerance_Data);%変数の許容誤差
options = optimoptions(options,'OptimalityTolerance', OptimalityTolerance_Data);%勾配の許容誤差
options = optimoptions(options,'MaxFunctionEvaluations', MaxFunctionEvaluations_Data);%関数の評価回数
%試行中の値の表示
options = optimoptions(options,'PlotFcn', { @optimplotfval });
%解の表示
[answer,z] = fminunc(object_func,z0,options);
function z = eval_func(x,y)
z = x^2+y^2;

Accepted Answer

michio
michio on 8 Feb 2018
こちらの1つ目の例題のように、目的関数の入力引数が1つ(ベクトル)になるように組んでみてください。

More Answers (1)

Tsuyoshi Yasuda
Tsuyoshi Yasuda on 12 Feb 2018
ありがとございます!!

Community Treasure Hunt

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

Start Hunting!