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

조회 수: 38 (최근 30일)
Tsuyoshi Yasuda
Tsuyoshi Yasuda 2018년 2월 8일
답변: Tsuyoshi Yasuda 2018년 2월 12일
以下のプログラムで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;

채택된 답변

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

추가 답변 (1개)

Tsuyoshi Yasuda
Tsuyoshi Yasuda 2018년 2월 12일
ありがとございます!!

카테고리

Help CenterFile Exchange에서 ソルバーベースの非線形最適化에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!