ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fsolve

非線形方程式系を解く

非線形システム ソルバー

以下で指定される問題を解きます。

F(x) = 0

x に対し、F(x) はベクトル値を返す関数です。

x はベクトルまたは行列です。行列引数を参照してください。

構文

x = fsolve(fun,x0)
x = fsolve(fun,x0,options)
x = fsolve(problem)
[x,fval] = fsolve(___)
[x,fval,exitflag,output] = fsolve(___)
[x,fval,exitflag,output,jacobian] = fsolve(___)

説明

x = fsolve(fun,x0) は、点 x0 を開始点として、方程式 fun(x) = 0 (ゼロの配列) の解を求めようとします。

x = fsolve(fun,x0,options)options で指定された最適化オプションを使用して方程式を解きます。optimoptions を使用してこれらのオプションを設定してください。

x = fsolve(problem)problem を解きます。ここで、problem入力引数に記述されている構造体です。作業のエクスポートで説明されているように、最適化アプリから問題をエクスポートして problem 構造体を作成します。

[x,fval] = fsolve(___) は、どの構文でも、解 x での目的関数 fun の値を返します。

[x,fval,exitflag,output] = fsolve(___) は上記に加え、fsolve の終了条件を記述する値 exitflag、および最適化プロセスに関する情報を含む構造体 output を返します。

[x,fval,exitflag,output,jacobian] = fsolve(___) は、解 x における fun のヤコビアンを返します。

すべて折りたたむ

この例では、2 変数の 2 つの非線形方程式を解く方法を説明します。方程式は次のとおりです。

これらの方程式を の形式に変換します。

これらの 2 つの方程式の左辺値を計算する関数を記述します。

function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;

このコードを root2d.m という名前のファイルとして MATLAB® パス上に保存します。

[0,0] を開始点として方程式系を解きます。

fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0)
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.




x =

    0.3532    0.6061

非線形システムの解法プロセスを検証します。

表示を返さず、1 次の最適性を表示するプロット関数をもつようにオプションを設定します。この場合、アルゴリズムが反復すると 0 に収束します。

options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);

非線形システムの方程式は次のとおりです。

これらの方程式を の形式に変換します。

これらの 2 つの方程式の左辺値を計算する関数を記述します。

function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;

このコードを root2d.m という名前のファイルとして MATLAB® パス上に保存します。

[0,0] を開始点とする非線形システムを解き、解法プロセスを確認します。

fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0,options)
x =

    0.3532    0.6061

fsolve の問題構造体を作成し、問題を解きます。

既定ではないオプションによる解と同じ問題を解きます。ただし、問題構造体を使用して問題を定式化します。

表示を返さず、1 次の最適性を表示するプロット関数をもつように問題のオプションを設定します。この場合、アルゴリズムが反復すると 0 に収束します。

problem.options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);

非線形システムの方程式は次のとおりです。

これらの方程式を の形式に変換します。

これらの 2 つの方程式の左辺値を計算する関数を記述します。

function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;

このコードを root2d.m という名前のファイルとして MATLAB® パス上に保存します。

問題構造体の残りのフィールドを作成します。

problem.objective = @root2d;
problem.x0 = [0,0];
problem.solver = 'fsolve';

問題を解きます。

x = fsolve(problem)
x =

    0.3532    0.6061

この例では、2 つの未知数をもつ 2 つの方程式から成る方程式系の解法プロセスを示す反復表示が返されます。

2x1x2=ex1x1+2x2=ex2.

これらの方程式を、F(x) = 0 の形式に書き直します。

2x1x2ex1=0x1+2x2ex2=0.

x0 = [-5 -5] での解の検索を開始します。

まず、x での方程式の値 F を計算するファイルを記述します。

function F = myfun(x)
F = [2*x(1) - x(2) - exp(-x(1));
      -x(1) + 2*x(2) - exp(-x(2))];

この関数ファイルを MATLAB® パス上に myfun.m として保存します。

初期点を設定します。反復表示を返すようにオプションを設定します。

x0 = [-5;-5];
options = optimoptions('fsolve','Display','iter');

fsolve を呼び出します。

[x,fval] = fsolve(@myfun,x0,options)
                                  Norm of  First-order Trust-region
Iteration Func-count    f(x)        step   optimality       radius
    0        3       23535.6                2.29e+004        1
    1        6       6001.72           1    5.75e+003        1
    2        9       1573.51           1    1.47e+003        1
    3       12       427.226           1          388        1
    4       15       119.763           1          107        1
    5       18       33.5206           1         30.8        1
    6       21       8.35208           1         9.05        1
    7       24       1.21394           1         2.26        1
    8       27      0.016329    0.759511        0.206      2.5
    9       30  3.51575e-006    0.111927      0.00294      2.5
   10       33  1.64763e-013  0.00169132    6.36e-007      2.5

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.

x =
    0.5671
    0.5671

fval =
  1.0e-006 *
      -0.4059
      -0.4059

次を満たす行列 X を求めます。

X*X*X=[1234],

これは、点 x= [1,1;1,1] を開始点とします。fsolve の出力を検証して、解の質および解法プロセスを確認します。

行列方程式を計算する無名関数を作成します。

fun = @(x)x*x*x - [1,2;3,4];

表示をオフにするようにオプションを設定します。初期点 x0 を設定します。

options = optimoptions('fsolve','Display','off');
x0 = ones(2);

fsolve を呼び出し、解法プロセスについての情報を取得します。

[x,fval,exitflag,output] = fsolve(fun,x0,options);
x,fval,exitflag
x =

   -0.1291    0.8602
    1.2903    1.1612


fval =

   1.0e-09 *

   -0.1618    0.0778
    0.1160   -0.0474


exitflag =

     1

終了フラグ値 1 は、解が信頼できることを示します。これを手動で検証するには、残差 (fval の二乗和) を計算して、どの程度ゼロに近いかを確認します。

sum(sum(fval.*fval))
ans = 
   4.7957e-20

このように残差が小さい場合、x が解であることが確認できます。

output 構造体に示されているように、解を求めるために fsolve によって関数評価が 35 回実行されています。

output.funcCount
ans =

    35

入力引数

すべて折りたたむ

解を求める非線形方程式。関数ハンドルまたは関数名として指定されます。fun は、ベクトル x を受け、x で評価される非線形方程式である、ベクトル F を返す関数です。解を求める方程式は、F のすべての成分について、F = 0 になります。関数 fun はファイルの関数ハンドルとして指定することができます。

x = fsolve(@myfun,x0)

ここで myfun は次のような MATLAB 関数です。

function F = myfun(x)
F = ...            % Compute function values at x

fun は無名関数の関数ハンドルにもなります。

x = fsolve(@(x)sin(x.*x),x0);

xF のユーザー定義の値が配列である場合、線形インデックスを使用してベクトルに変換されます (配列インデックス付け (MATLAB)を参照)。

ヤコビアンを計算することができ、"さらに" ヤコビ オプションが 'on' である場合、

options = optimoptions('fsolve','SpecifyObjectiveGradient','on')

関数 fun は 2 番目の出力引数に x でのヤコビ値 J 行列を返さなければなりません。

funm 個の要素をもつベクトル (行列) を返し、x が長さ n をもつ場合 (ここで、nx0 の長さ)、ヤコビアン Jmn 列の行列になります。ここで、J(i,j)F(i)x(j) に関する偏導関数です(ヤコビアン J は、F の勾配の転置であることに注意してください)。

例: fun = @(x)x*x*x-[1,2;3,4]

データ型: char | function_handle | string

初期点。実数ベクトルまたは実数配列として指定されます。fsolve は、x0 の要素数およびサイズを使用して、fun が受け入れる変数の数およびサイズを決定します。

例: x0 = [1,2,3,4]

データ型: double

最適化オプション。optimoptions の出力、または optimset などによって返される構造体として指定されます。

いくつかのオプションはすべてのアルゴリズムに適用することができ、その他のオプションは特定のアルゴリズムに関連します。詳細は、最適化オプション リファレンスを参照してください。

一部のオプションは、optimoptions に表示されません。このようなオプションは、次の表ではイタリックで示されています。詳細は、表示オプションを参照してください。

すべてのアルゴリズム
Algorithm

'trust-region-dogleg' (既定の設定)、'trust-region''levenberg-marquardt' から選択します。

Algorithm オプションは使用するアルゴリズムの優先順位を指定します。これは設定のみです。信頼領域法アルゴリズムでは、非線形方程式系は劣決定では解けません。すなわち、方程式の数 (fun によって返される F の要素数) は少なくとも x の長さと同じでなければなりません。同様に、Trust-region-dogleg 法アルゴリズムの場合は、方程式の数は x の長さと同じでなければなりません。選択したアルゴリズムを使用できない場合は、fsolve はレーベンバーグ・マルカート アルゴリズムを使用します。アルゴリズムの選択についての詳細は、アルゴリズムの選択を参照してください。

いくつかのアルゴリズム オプションを設定するために、optimoptions の代わりに optimset を使用します。

  • Algorithm — アルゴリズムを 'trust-region' の代わりに 'trust-region-reflective' に設定します。

  • InitDampingAlgorithm{'levenberg-marquardt',.005} などの cell 配列に設定し、レーベンバーグ・マルカート法の初期パラメーター λ を設定します。

CheckGradients

ユーザー設定の導関数 (目的関数または制約の勾配) と有限差分による導関数とを比較します。選択肢は true または false (既定の設定) です。

optimset の場合、名前は DerivativeCheck で、値は 'on' または 'off' です。詳細は、オプション名の新旧対照表を参照してください。

Diagnostics

最小化または計算する関数に関する情報を表示します。選択肢は 'on' または 'off' (既定の設定) です。

DiffMaxChange

有限差分勾配を計算する場合に変数内で生じる最大変化量です (正のスカラー)。既定値は Inf です。

DiffMinChange

有限差分勾配を計算する場合に変数内で生じる最小変化量です (正のスカラー)。既定値は 0 です。

Display

表示レベル (反復表示を参照):

  • 'off' または 'none' — 出力を表示しない。

  • 'iter' — 各反復の出力を表示し、既定の終了メッセージを与える。

  • 'iter-detailed' — 各反復の出力を表示し、技術的な終了メッセージを与える。

  • 'final' (既定の設定) — 最終出力を表示し、既定の終了メッセージを返す。

  • 'final-detailed' — 最終出力のみを表示し、技術的な終了メッセージを与える。

FiniteDifferenceStepSize

有限差分のスカラーまたはベクトルのステップ サイズ ファクター。FiniteDifferenceStepSize をベクトル v に設定すると、前方有限差分ステップ delta

delta = v.*sign′(x).*max(abs(x),TypicalX);

ここで、sign′(0) = 1 を除き sign′(x) = sign(x) です。中心有限差分法では

delta = v.*max(abs(x),TypicalX);

スカラー FiniteDifferenceStepSize はベクトルに拡張します。既定値は、前進有限差分法では sqrt(eps)、中心有限差分法では eps^(1/3) です。

optimset の場合、名前は FinDiffRelStep です。詳細は、オプション名の新旧対照表を参照してください。

FiniteDifferenceType

勾配推定に使用される有限差分は 'forward' (既定の設定) または 'central' (中心) のいずれかです。'central' では 2 倍の関数評価が必要になりますが、正確性が増します。

アルゴリズムは有限差分の両方のタイプを推定するとき、範囲に注意深く従います。そのためたとえば、forward ではなく、backward を選択すると、範囲外の点を計算しないようにすることができます。

optimset の場合、名前は FinDiffType です。詳細は、オプション名の新旧対照表を参照してください。

FunctionTolerance

関数値に関する終了許容誤差 (正のスカラー)。既定の設定は 1e-6 です。詳細は、許容誤差と停止条件を参照してください。

optimset の場合、名前は TolFun です。詳細は、オプション名の新旧対照表を参照してください。

FunValCheck

目的関数値が有効かどうかをチェックします。'on' は、目的関数が complexInf、または NaN である値を返すと、エラーを表示します。既定の 'off' ではエラーを表示しません。

MaxFunctionEvaluations

可能な関数評価の最大回数 (正の整数)。既定の設定は 100*numberOfVariables です。詳細は、許容誤差と停止条件反復と関数計算回数を参照してください。

optimset の場合、名前は MaxFunEvals です。詳細は、オプション名の新旧対照表を参照してください。

MaxIterations

可能な反復の最大数 (正の整数)。既定値 400 です。詳細は、許容誤差と停止条件反復と関数計算回数を参照してください。

optimset の場合、名前は MaxIter です。詳細は、オプション名の新旧対照表を参照してください。

OptimalityTolerance

1 次の最適性に関する終了許容誤差 (正のスカラー)。既定の設定は 1e-6 です。詳細は、1 次の最適性の尺度を参照してください。

内部的に、'levenberg-marquardt' アルゴリズムは、FunctionTolerance1e-4 倍となる最適性の許容誤差 (停止条件) を使用し、OptimalityTolerance は使用しません。

OutputFcn

各反復で最適化関数が呼び出すユーザー定義の関数を 1 つ以上指定します。関数ハンドルか、関数ハンドルの cell 配列を渡します。既定の設定はなし ([]) です。詳細は、出力関数を参照してください。

PlotFcn

アルゴリズムが実行中のさまざまな進行状況の測定値をプロットします。事前定義されたプロットから選択するか、独自のコードを記述してください。組み込みプロット関数名、関数ハンドル、または組み込みプロット関数名か関数ハンドルの cell 配列を渡します。カスタム プロット関数の場合は、関数ハンドルを渡します。既定の設定はなし ([]) です。

  • 'optimplotx' は現在の点をプロットします。

  • 'optimplotfunccount' は関数計算をプロットします。

  • 'optimplotfval' は関数値をプロットします。

  • 'optimplotstepsize' はステップ サイズをプロットします。

  • 'optimplotfirstorderopt' は 1 次の最適性尺度をプロットします。

カスタム プロット関数の記述については、プロット関数を参照してください。

optimset の場合、名前は PlotFcns です。詳細は、オプション名の新旧対照表を参照してください。

SpecifyObjectiveGradient

true の場合、fsolve は目的関数に対してユーザー定義のヤコビアン (既定の設定では fun)、または (JacobianMultiplyFcn を使用するときの) ヤコビ情報を使用します。false (既定の設定) の場合、fsolve は有限差分を使用してヤコビアンを近似します。

optimset の場合、名前は Jacobian で、値は 'on' または 'off' です。詳細は、オプション名の新旧対照表を参照してください。

StepTolerance

x に関する許容誤差 (正のスカラー)。既定の設定は 1e-6 です。詳細は、許容誤差と停止条件を参照してください。

optimset の場合、名前は TolX です。詳細は、オプション名の新旧対照表を参照してください。

TypicalX

典型的な x の値です。TypicalX の要素数は、開始点 x0 の要素数と等しくなります。既定値は ones(numberofvariables,1) です。fsolve では TypicalX を使用して勾配推定の有限差分をスケーリングします。

trust-region-dogleg アルゴリズムは TypicalX をスケーリング行列の対角項として使用します。

UseParallel

true の場合、fsolve は並列で勾配を推定します。既定の false に設定すると、無効になります。詳細は、並列計算を参照してください。

信頼領域法アルゴリズム
JacobianMultiplyFcn

ヤコビ乗算関数。関数ハンドルとして指定されます。大規模構造化問題に対して、この関数は実際に J を計算しないで、ヤコビ行列乗算 J*YJ'*YJ'*(J*Y) のいずれかを計算します。この関数は次の形式を取ります。

W = jmfun(Jinfo,Y,flag)

ここで、JinfoJ*Y (または J'*YJ'*(J*Y)) の計算に使用される行列を含んでいます。1 番目の引数 Jinfo は目的関数 fun が返す 2 番目の引数と同じにしなければなりません。

[F,Jinfo] = fun(x)

Y は問題の次元と同じ行数をもつ行列です。flag はどの乗数が計算されるかを決めます。

  • flag == 0 の場合、W = J'*(J*Y) です。

  • flag > 0 の場合、W = J*Y です。

  • flag < 0 の場合、W = J'*Y です。

いずれの場合でも J は陽的に計算されません。fsolveJinfo を使用して前提条件子を計算します。jmfun が必要とする追加のパラメーターを与える方法については 追加パラメーターの受け渡し を参照してください。

メモ:

'SpecifyObjectiveGradient' は、fsolveJinfofun から jmfun に渡すために true に設定しなければなりません。

同様の例は 密に構造化されたヘッシアンと線形等式を使用した最小化 を参照してください。

optimset の場合、名前は JacobMult です。詳細は、オプション名の新旧対照表を参照してください。

JacobPattern

有限差分に対するヤコビ スパース パターン。fun(i)x(j) によって異なる場合、JacobPattern(i,j) = 1 を設定します。それ以外の場合は、JacobPattern(i,j) = 0 を設定します。言い換えると、∂fun(i)/∂x(j) ≠ 0 をもつことができる場合、JacobPattern(i,j) = 1 となります。

fun でヤコビ行列 J を計算するのが不便な場合は、JacobPattern を使用します。ただし、fun(i)x(j) によって異なる場合は見ただけで判断できます。JacobPattern を提供できる場合、fsolve は、スパース有限差分を使って J を近似することができます。

最悪の場合、構造が不明であれば、JacobPattern を設定しないでください。既定では、JacobPattern は 1 からなる密行列のように動作します。その後 fsolve は、非スパース状態の有限差分近似を反復ごとに計算します。大規模な問題では、この計算には多大なリソースが必要となる場合があり、通常はスパース構造を決定するのが妥当です。

MaxPCGIter

PCG (前処理付き共役勾配) 法の反復の最大回数です (正のスカラー)。既定値は max(1,floor(numberOfVariables/2)) です。詳細は、方程式を解くためのアルゴリズムを参照してください。

PrecondBandWidth

PCG に対する前提条件子の帯域幅の上限 (非負の整数)。既定の PrecondBandWidthInf の場合、共役勾配 (CG) ではなく、直接因子分解 (コレスキー因子) が使用されます。直接因子分解では CG より計算量が増加しますが、解を求めるためのステップの質が向上します。対角型をした前提条件のために、PrecondBandWidth0 に設定します (上部帯域幅 0)。一部の問題では帯域幅を中間にすることで PCG 法の反復回数を減らします。

SubproblemAlgorithm

反復ステップの計算方法を定義します。既定の設定である 'factorization' のステップは 'cg' より低速ですが、精度の点で勝ります。詳細は、信頼領域 fsolve アルゴリズムを参照してください。

TolPCG

PCG 反復に関する終了許容誤差 (正のスカラー)。既定値は 0.1 です。

レーベンバーグ・マルカート法アルゴリズム
InitDamping

レーベンバーグ・マルカート パラメーターの初期値 (正のスカラー)。既定値は 1e-2 です。詳細は、レーベンバーグ・マルカート法を参照してください。

ScaleProblem

'jacobian' は、適切にスケール化されていない問題に対して収束性を高める場合があります。既定値は 'none' です。

例: options = optimoptions('fsolve','FiniteDifferenceType','central')

次のフィールドをもつ構造体として指定される問題構造体です。

フィールド名エントリ

objective

目的関数

x0

x の初期点

solver

'fsolve'

options

optimoptions で作成されたオプション

problem 構造体を取得する最も簡単な方法は、最適化アプリから問題をエクスポートすることです。

データ型: struct

出力引数

すべて折りたたむ

実数ベクトルまたは実数配列として返される解です。x のサイズは、x0 のサイズと同じです。通常、exitflag が正の場合、x は問題に対する局所的な解になります。解の質に関する詳細は、ソルバーが成功する場合 を参照してください。

解での目的関数値。実数ベクトルとして返されます。一般的に、fval = fun(x) になります。

fsolve の停止理由。整数として返されます。

1

方程式が解けました。1 次の最適性は僅かです。

2

方程式が解けました。x の変化が指定した許容誤差を下回っています。

3

方程式が解けました。残差の変化が指定した許容誤差を下回っています。

4

方程式が解けました。探索方向の大きさが指定した許容誤差を下回っています。

0

反復回数が options.MaxIterations を超過、または関数評価の回数が options.MaxFunctionEvaluations を超過しています。

-1

出力関数またはプロット関数によってアルゴリズムが停止しました。

-2

方程式が解けませんでした。終了メッセージで詳細を確認できる場合があります。

-3

方程式が解けませんでした。信頼領域の半径が小さくなりすぎています (trust-region-dogleg アルゴリズム)。

最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。

iterations

実行した反復回数

funcCount

関数評価の回数

algorithm

使用される最適化アルゴリズム

cgiterations

PCG 法の合計反復回数 ('trust-region' アルゴリズムのみ)

stepsize

x の最終変位 ('trust-region-dogleg' 以外)

firstorderopt

1 次の最適性の尺度

message

終了メッセージ

解におけるヤコビアン。実数行列として返されます。jacobian(i,j) は、解 x での x(j) に関する fun(i) の偏導関数です。

制限

  • 解かれる関数は連続でなければなりません。

  • うまく実行できた場合、fsolve は 1 つの根のみを出力します。

  • 既定の Trust-region-dogleg 法は方程式系が合致する、すなわち、方程式の数が未知数の数と等しい場合にのみ使用できます。レーベンバーグ・マルカート法では、方程式系が合致している必要はありません。

  • 信頼領域法の前処理付き共役勾配で使用される前提条件子の計算では、その計算の前に JTJ (J はヤコビ行列) を作成します。そのため多くの非ゼロ要素をもつ J の行は、密行列の積 JTJ に近い結果になり、大きい問題についてはかなりのコストを要する解法プロセスになる場合があります。

アルゴリズム

レーベンバーグ・マルカート法および信頼領域法は、lsqnonlin にも使用される非線形最小二乗アルゴリズムに基づいています。システムが 0 をもたないかもしれない場合、これらの方法の 1 つを使用してください。アルゴリズムは、残差が小さいところの点を戻します。しかし、システムのヤコビアンが特異な場合、アルゴリズムが方程式系の解ではない点に収束する可能性があります (制限 を参照)。

  • 既定の設定では fsolve は Trust-region-dogleg 法アルゴリズムを選択します。アルゴリズムは [8] で説明される Powell dogleg method を変形したものです。これは [7] で実装したアルゴリズムと似た性質をもちます。詳細は、Trust-region-dogleg 法を参照してください。

  • この信頼領域法アルゴリズムは部分空間の信頼領域法であり、[1][2] で説明する interior-reflective ニュートン法に基づいています。各反復は、前処理付き共役勾配 (PCG) 法を使用する大型線形システムの近似解を伴います。詳細は、信頼領域 fsolve アルゴリズムを参照してください。

  • レーベンバーグ・マルカート法は [4][5][6] の参考文献で説明されています。詳細は、レーベンバーグ・マルカート法を参照してください。

参照

[1] Coleman, T.F. and Y. Li, “An Interior, Trust Region Approach for Nonlinear Minimization Subject to Bounds,” SIAM Journal on Optimization, Vol. 6, pp. 418-445, 1996.

[2] Coleman, T.F. and Y. Li, “On the Convergence of Reflective Newton Methods for Large-Scale Nonlinear Minimization Subject to Bounds,” Mathematical Programming, Vol. 67, Number 2, pp. 189-224, 1994.

[3] Dennis, J. E. Jr., “Nonlinear Least-Squares,” State of the Art in Numerical Analysis, ed. D. Jacobs, Academic Press, pp. 269-312.

[4] Levenberg, K., “A Method for the Solution of Certain Problems in Least-Squares,” Quarterly Applied Mathematics 2, pp. 164-168, 1944.

[5] Marquardt, D., “An Algorithm for Least-squares Estimation of Nonlinear Parameters,” SIAM Journal Applied Mathematics, Vol. 11, pp. 431-441, 1963.

[6] Moré, J. J., “The Levenberg-Marquardt Algorithm: Implementation and Theory,” Numerical Analysis, ed. G. A. Watson, Lecture Notes in Mathematics 630, Springer Verlag, pp. 105-116, 1977.

[7] Moré, J. J., B. S. Garbow, and K. E. Hillstrom, User Guide for MINPACK 1, Argonne National Laboratory, Rept. ANL-80-74, 1980.

[8] Powell, M. J. D., “A Fortran Subroutine for Solving Systems of Nonlinear Algebraic Equations,” Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, ed., Ch.7, 1970.

拡張機能

R2006a より前に導入