主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

lsqnonlin

非線形最小二乗(非線形データ適合)問題を解く

説明

非線形最小二乗ソルバー

次の形式の非線形最小二乗曲線近似の問題を解きます。

最小值 x f x 2 2 最小值 x f 1 x 2 + f 2 x 2 + ... + f n x 2

xの成分には,オプションの下限磅と上限乌兰巴托があります。

x,磅および乌兰巴托はベクトルまたは行列とすることができます。行列引数を参照してください。

f x 2 2 (二乗和)を計算するというよりもむしろ,lsqnonlinは次の”“ベクトル値関数を計算するユーザー定義関数を必要とします。

f x f 1 x f 2 x f n x

x= lsqnonlin (有趣的x0は,点x0を開始点として,有趣的に記述する関数の二乗和の最小値を求めます。関数有趣的は,値の二乗和ではなく値のベクトル(または配列)を返します(アルゴリズムは有趣的(x)の要素の二乗和を暗黙的に計算します)。

メモ

追加パラメーターの受け渡しは必要に応じて他のパラメーターを関数有趣的(x)へ渡す方法を説明します。

x= lsqnonlin (有趣的x0乌兰巴托は,解が常にx乌兰巴托の範囲に存在するように,設計変数xに上限と下限を定義します。磅(i) =乌兰巴托(我)を指定することによって解の要素x(我)を修正できます。

メモ

問題の指定された入力範囲が矛盾する場合,出的力xx0、出力resnorm剩余[]です。

範囲Lb≤x≤ubに違反するx0の要素は範囲で定義されたボックスの内部にリセットされます。範囲内の要素は変更されません。

x= lsqnonlin (有趣的x0乌兰巴托选项は,选项で指定された最適化オプションを使って最小化します。optimoptionsを使用してこれらのオプションを設定してください。範囲が存在しない場合,乌兰巴托に空行列を渡してください。

x= lsqnonlin (问题は,问题で説明されている構造体问题の最小値を求めます。

xresnorm) = lsqnonlin (___は,すべての入力引数に対して,xでの残差の2乗ノルム値(sum(有趣的(x) ^ 2))を返します。

xresnorm剩余exitflag输出) = lsqnonlin (___は上記に加え,解xにおける残差の値有趣的(x),終了条件を記述する値exitflag,および最適化プロセスに関する情報を含む構造体输出を返します。

xresnorm剩余exitflag输出λ雅可比矩阵) = lsqnonlin (___は上記に加え,解xにおけるラグランジュ乗数をフィールドに含む構造体λ,および解xにおける有趣的のヤコビアンを返します。

すべて折りたたむ

単純な指数減衰曲線をデータに当てはめます。

ノイズを含む指数減衰モデルからデータを生成します。モデルは次のとおりです。

y 经验值 - 1 3. t + ε

ここで, t の範囲は0 ~ 3, ε は平均が0,標準偏差が0.05の正規分布ノイズです。

rng默认的%的再现性d = linspace (0, 3);Y = exp(-1.3*d) + 0.05*randn(size(d));

問題は,データ(dy)について,データに最も適合する指数減衰率の検出です。

指数減衰率の値 r を使用して,その減衰率とデータをもつモデルとの差のベクトルを返す,無名関数を作成します。

有趣= @ (r) exp (- d * r) - y;

最適な減衰率の値を求めます。任意の初期推定x0= 4を選択します。

x0 = 4;x0, x = lsqnonlin(有趣)
局部最小值。Lsqnonlin停止的原因是相对于初始值的平方和的最终变化小于函数的容差值。
x = 1.2645

データおよび最適適合指数曲線をプロットします。

情节(d, y,“柯”d exp (- x * d),“b -”)传说(“数据”“最适合”)包含(“t”) ylabel (“exp (tx)”

图中包含一个坐标轴。轴线包含2个线型对象。这些对象代表数据,最佳匹配。

適合パラメーターの一部が有界である場合の最適適合モデルを求めます。

次の関数のセンタリング b およびスケーリング 一个 による最適な近似が,

一个 经验值 - t 经验值 - 经验值 - t - b

次の標準正規密度に対して成り立つようにします。

1 2 π 经验值 - t 2 / 2

データ点のベクトルt,およびこれらの点の対応する正規密度を作成します。

t = linspace (4, 4);y = 1 /√(2 *π)* exp (- t ^ 2/2);

センタリングおよびスケーリングした関数と,正規のyとの差を評価する関数を作成します。ここで,x (1)はスケーリング 一个 x (2)はセンタリング b です。

Fun = @(x)x(1)*exp(-t).*exp(- x(2)))) - y);

x0(1/2, 0)から開始して,最適近似を求めます。スケーリング 一个 は1/2 ~ 3/2,センタリング b は1 ~ 3とします。

磅= [1/2,1];乌兰巴托= (3/2,3);x0 = (1/2, 0);x = lsqnonlin(有趣,x0,磅,乌兰巴托)
局部最小值。Lsqnonlin停止的原因是相对于初始值的平方和的最终变化小于函数的容差值。
x =1×20.8231 - -0.2444

2つの関数をプロットして,近似の質を確認します。

情节(t y的r -t有趣(x) + y,“b -”)包含(“t”)传说(“正常密度”的拟合函数

图中包含一个坐标轴。轴线包含2个线型对象。这些对象代表正常密度,拟合函数。

異なるlsqnonlinアルゴリズムを使用して,データ適合の問題の結果を比較します。

観測時間データxdataおよび観測応答データydataについて,次の形式のモデルが適合するパラメーター x 1 および x 2 を求めるものとします。

ydata x 1 经验值 x 2 xdata

観測時間と応答を入力します。

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];

単純な指数減衰モデルを作成します。このモデルは,予測値と観測値の差のベクトルを計算します。

有趣= @ (x) x (1) * exp (x (2) * xdata) -ydata;

開始点x0 =[1] 100年を使用してモデルを当てはめます。まず,既定の“trust-region-reflective”アルゴリズムを使用します。

x0 =[1] 100年;选择= optimoptions (@lsqnonlin,“算法”“trust-region-reflective”);x = lsqnonlin(有趣,x0,[]、[]选项)
局部最小值。Lsqnonlin停止的原因是相对于初始值的平方和的最终变化小于函数的容差值。
x =1×2498.8309 - -0.1013

“levenberg-marquardtアルゴリズムを使用する場合と違いがあるかどうか確認します。

选项。算法=“levenberg-marquardt”;x = lsqnonlin(有趣,x0,[]、[]选项)
局部最小值。Lsqnonlin停止的原因是当前步长的相对大小小于步长公差的值。
x =1×2498.8309 - -0.1013

2つのアルゴリズムで同じ解が得られています。解とデータをプロットします。

情节(xdata ydata,“柯”)举行tlist = linspace (xdata (1) xdata(结束));情节(tlist x (1) * exp (x (2) * tlist),“b -”)包含xdataylabelydata标题(“指数拟合数据”)传说(“数据”“指数符合”)举行

图中包含一个坐标轴。标题为指数适合数据的轴包含两个类型为line的对象。这些对象表示数据、指数拟合。

次を最小にする x を求めます。

k 1 1 0 2 + 2 k - e k x 1 - e k x 2 2

また,二乗和の最小値を求めます。

lsqnonlinは二乗和がユーザー関数で陽的に作成されて”いない”ことを想定しているため,lsqnonlinに渡す関数が以下のベクトル値関数を代わりに演算しなければなりません。

F k x 2 + 2 k - e k x 1 - e k x 2

ここで, k 1 1 0 です(すなわち, F 1 0 個の要素をもたなければなりません)。

関数myfunこの例の終わりに掲載)が10要素のベクトルFを計算します。

x0 = [0.3, 0.4]を開始点として,最小化点および最小値を求めます。

x0 = [0.3, 0.4];[x, resnorm] = lsqnonlin (x0 @myfun)
局部最小值。Lsqnonlin停止,因为当前步长小于步长公差的值。
x =1×20.2578 - 0.2578
resnorm = 124.3622

resnorm出力は2乗残差ノルム,すなわち関数値の二乗和です。

次の関数は,ベクトル値目的関数を計算します。

函数F = myfun(x) k = 1:10;F = 2 + 2*k-exp(k*x(1))-exp(k*x(2));结束

解法プロセスの発生時(显示オプションを“通路”に設定する),およびその後(输出構造体を調べる)の解法プロセスを検証します。

観測時間データxdataおよび観測応答データydataについて,次の形式のモデルが適合するパラメーター x 1 および x 2 を求めるものとします。

ydata x 1 经验值 x 2 xdata

観測時間と応答を入力します。

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];

単純な指数減衰モデルを作成します。このモデルは,予測値と観測値の差のベクトルを計算します。

有趣= @ (x) x (1) * exp (x (2) * xdata) -ydata;

開始点x0 =[1] 100年を使用してモデルを当てはめます。显示オプションを“通路”に設定して,解法プロセスを検証します。输出構造体を取得し,解法プロセスの詳細情報を取得します。

x0 =[1] 100年;选择= optimoptions (“lsqnonlin”“显示”“通路”);[x, resnorm残留,exitflag,输出]= lsqnonlin(有趣,x0,[]、[]选项);
一阶迭代范数function -count f(x) step最优性0 3 359677 2.88e+04目标函数返回Inf;尝试一个新的观点…1 6 359677 11.6976 - 2.88 e + 04 2 9 321395 0.5 4.97 4.97 e + e + 04年3 321395 1 04 4 15 292253 0.25 - 7.06 e + 04 5 18 292253 0.5 - 7.06 e + 04 21 270350 24 270350 0.25 1.15 0.125 1.15 e + 05年7 e + 05年8 27 252777 0.0625 - 1.63 e + 05年9 30 252777 0.125 - 1.63 e + 05年10 33 243877 0.03125 - 7.48 e + 04年11 36 243660 0.0625 - 8.7 e + 04 12 39 243276 0.0625 - 2 e + 04 13 42 243174 0.0625 - 1.14 e + 04 1445 242999 0.125 - 5.1 e + 03 15 48 242661 0.25 - 2.04 e + 03 16 51 241987 1.04 0.5 1.91 e + 03 17 54 240643 1 e + 03 18 57 237971 2 3.36 e + 03 19 60 232686 4 6.04 e + 03 20 63 222354 8 1.2 e + 04 21 66 202592 16 2.25 e + 32 04 22 69 166443 4.05 6.68 e + e + 04 23 72 106320 64 24 75 28704.7 128 8.31 e + 04 04 25 78 89.7947 140.674 2.22 e + 04 26 81 9.50489 9.57381 2.02599 684 27 840.0114局部最小可能。Lsqnonlin停止的原因是相对于初始值的平方和的最终变化小于函数的容差值。

出力構造体を検証し,解法プロセスの詳細情報を取得します。

输出
输出=结构体字段:firstorderopt: 0.0114 iterations: 28 funcCount: 87 cgiterations: 0 algorithm: 'trust-region- reflection ' stepsize: 4.6226e-04 message: '…'

比較のために,算法オプションを“levenberg-marquardt”に設定します。

选项。算法=“levenberg-marquardt”;[x, resnorm残留,exitflag,输出]= lsqnonlin(有趣,x0,[]、[]选项);
迭代一阶范数函数计数残差最优性Lambda step 0 3 359677 2.88e+04 0.01目标函数返回Inf;尝试一个新的观点…1 100000 0.280777 340761 3.91 e + 04 2 16 304661 5.97 e + 04 10000 0.373146 297292 6.55 e + 21 04 288240 e + 06 0.0589933 - 4 24 7.57 e + 28日04 100000 0.0645444 275407 1.01 e + 05 06年1 e + 0.0741266 6 31 249954 1.62 e + 05 100000 0.094571 245896 36 1.35 e + 05年1 e + 0.0133606 07年8 39 243846 7.26 e + 04 1 e + 06年9 42 243568 5.66 0.00944311 0.00821622 e + 04 100000 45 2434241.61 e + 04 10000 0.00777936 243322 8.8 e + 03年11 48 1000 0.0673933 242408 5.1 e + 51 03 100 0.675209 233628年54 13日1.05 e + 04 10 6.59804 169089 8.51 e + 57 04 1 54.6992 15 60 30814.7 1.54 e + 05年0.1 196.939 63 147.496 8 e + 03 0.01 129.795 66 9.51503 117 0.001 9.96069 18 19 69 9.50489 0.0714 0.0001 0.080486 72 9.50489 5.07028 4.96 e-05 1 e-05 e-05当地最小的可能的。Lsqnonlin停止的原因是当前步长的相对大小小于步长公差的值。

“levenberg-marquardt”の方が少ない反復回数で収束していますが,関数評価の回数はほぼ同じです。

输出
输出=结构体字段:cgiterations: 19 funcCount: 72 stepsize: 5.0703e-05 cgiterations: [] firstderopt: 4.9629e-05 algorithm: 'levenberg-marquardt' message: '…'

入力引数

すべて折りたたむ

二乗和が最小化される関数。関数ハンドルまたは関数名として指定します。有趣的は,配列xを受け,xで評価される目的関数である配列Fを返す関数です。関数有趣的はファイルへの関数ハンドルとして指定することができます。

x = lsqnonlin (x0 @myfun)

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

函数F = myfun(x)…%计算函数在x处的值

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

x = lsqnonlin (@ (x) sin (x) * x), x0);

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

メモ:

二乗和を明示的に形成すべきではありません。その代わりに,関数が関数値のベクトルを戻すべきです。詳細は,を参照してください。

ヤコビアンも計算することができ,“さらに”下式で設定された“SpecifyObjectiveGradient”オプションが真正的である場合を考えます。

选择= optimoptions(‘lsqnonlin’,‘SpecifyObjectiveGradient’,真的)

関数有趣的は2番目の出力引数にxでのヤコビ値J行(列)を返さなければなりません。nargoutの値を確認することで,1つの出力引数のみの場合(最適化アルゴリズムがJではなくFの値のみを必要とする場合),有趣的が呼び出されるときにJの演算を避けることができます。

function [F,J] = myfun(x)…%目标函数值在x如果nargout > 1%输出参数J =…函数在x端的雅可比矩阵

有趣的個の成分をもつ配列を返し,xn個の要素をもつ場合(ここで,nx0の要素数),ヤコビアンJn列の行列になります。ここで,J (i, J)F(我)x (j)における偏導関数です(ヤコビアンJは,Fの勾配の転置であることに注意してください)。

例:@ (x), cos (x)。* exp (- x)

データ型:字符|function_handle|字符串

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

例:x0 =(1、2、3、4)

データ型:

下限。実数ベクトルまたは実数配列として指定されます。x0の要素数との要素数が等しい場合,は次を指定します。

x(我)> =磅(我)(すべてのについて)

元素个数(磅)<元素个数(x0)の場合,は次を指定します。

x(我)> =磅(我)1 <= I <= numel(lb)

x0よりの要素数が少ない場合,ソルバーは警告を生成します。

例:xのすべての成分が正であることを指定するには,磅= 0(大小(x0))を使用します。

データ型:

実数ベクトルまたは実数配列として指定される上限です。x0の要素数と乌兰巴托の要素数が等しい場合,乌兰巴托は次を指定します。

x (i) < =乌兰巴托(我)(すべてのについて)

元素个数(乌兰巴托)<元素个数(x0)の場合,乌兰巴托は次を指定します。

x (i) < =乌兰巴托(我)1 <= I <= numel(ub)

x0より乌兰巴托の要素数が少ない場合,ソルバーは警告を生成します。

例:xのすべての成分が1未満であることを指定するには,乌兰巴托= 1(大小(x0))を使用します。

データ型:

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

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

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

すべてのアルゴリズム

算法

“trust-region-reflective”(既定の設定)と“levenberg-marquardt”から選択します。

算法オプションは使用するアルゴリズムの優先順位を指定します。これは基本設定のみです。条件によっては,各アルゴリズムに対応しなければならないからです。信頼領域反射法アルゴリズムでは、非線形方程式系は劣決定では解けません。すなわち、方程式の数 (有趣的によって返されるFの要素数)は少なくともxの長さと同じでなければなりません。アルゴリズムの選択についての詳細は、アルゴリズムの選択を参照してください。

CheckGradients

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

optimsetの場合,名前はDerivativeCheckで,値は“上”または“关闭”です。詳細は,新旧のオプション名を参照してください。

诊断

最小化または計算する関数に関する情報を表示します。選択肢は,“关闭”(既定の設定)または“上”です。

DiffMaxChange

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

DiffMinChange

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

显示

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

  • “关闭”または“没有”——出力を表示しない。

  • “通路”——各反復の出力を表示し,既定の終了メッセージを与える。

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

  • “最后一次”(既定の設定)——最終出力を表示し,既定の終了メッセージを返す。

  • 最后详细的——最終出力のみを表示し,技術的な終了メッセージを与える。

FiniteDifferenceStepSize

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

δ= v *标志的(x) *马克斯(abs (x)、TypicalX);

ここで,标志' (0)= 1を除き符号“(x) =符号(x)です。中心有限差分法では

δ= v *马克斯(abs (x)、TypicalX);

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

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

FiniteDifferenceType

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

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

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

FunctionTolerance

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

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

FunValCheck

関数値が有効かどうかをチェックします。“上”は,関数が复杂的,またはである値を返すと,エラーを表示します。既定の“关闭”ではエラーを表示しません。

MaxFunctionEvaluations

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

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

MaxIterations

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

optimsetの場合,名前は麦克斯特です。詳細は,新旧のオプション名を参照してください。

OptimalityTolerance

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

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

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

OutputFcn

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

PlotFcn

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

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

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

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

  • “optimplotresnorm”は残差のノルムをプロットします。

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

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

カスタムのプロット関数は,出力関数と同じ構文を使用します。詳細は,优化工具箱™の出力関数出力関数とプロット関数の構文を参照してください。

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

SpecifyObjectiveGradient

(既定の設定)の場合,ソルバーは有限差分法を使用してヤコビアンを近似します。真正的の場合,ソルバーは目的関数に対してユーザー定義のヤコビアン(既定の設定では有趣的),または(JacobMultを使用するときの)ヤコビ情報を使用します。

optimsetの場合,名前は雅可比矩阵で,値は“上”または“关闭”です。詳細は,新旧のオプション名を参照してください。

StepTolerance

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

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

TypicalX

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

UseParallel

真正的の場合,ソルバーは並列で勾配を推定します。既定のに設定すると,無効になります。詳細は,並列計算を参照してください。

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

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

W = jmfun(动力系统,Y,标志)

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

(F,动力系统)(x) =乐趣

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

  • 标志= = 0の場合,W = J ' * (J * Y)です。

  • 国旗> 0の場合,W = J * Yです。

  • 国旗< 0の場合,W = J ' * Yです。

どの場合でも,Jは明示的に形成されません。ソルバーは动力系统を使用して前提条件子を計算します。jmfunが必要とする追加のパラメーターを与える方法については追加パラメーターの受け渡しを参照してください。

メモ:

“SpecifyObjectiveGradient”真正的に設定し,ソルバーが动力系统有趣的からjmfunに渡すようにしなければなりません。

同様の例は密に構造化されたヘッシアンと線形等式を使用した最小化線形最小二乗付きヤコビ乗算関数を参照してください。

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

JacobPattern

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

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

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

MaxPCGIter

PCG(前処理付き共役勾配)法の反復の最大回数です(正のスカラー)。既定値は马克斯(1,numberOfVariables / 2)です。詳細は,大規模な非線形最小二乗法を参照してください。

PrecondBandWidth

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

SubproblemAlgorithm

反復ステップの計算方法を定義します。既定の設定である“分解”のステップは“重心”より低速ですが,精度の点で勝ります。詳細は,信頼領域反射法の最小二乗を参照してください。

TolPCG

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

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

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

ScaleProblem

的雅可比矩阵は,適切にスケール化されていない問題に対して収束性を高める場合があります。既定値は“没有”です。

例:选择= optimoptions(“lsqnonlin”、“FiniteDifferenceType”,“中央”)

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

フィールド名 エントリ

客观的

目的関数

x0

xの初期点
下限のベクトル
乌兰巴托 上限のベクトル

解算器

“lsqnonlin”

选项

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

问题構造体では,少なくとも客观的x0解算器,および选项フィールドを指定しなければなりません。

データ型:结构体

出力引数

すべて折りたたむ

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

残差の2乗ノルム。非負の実数として返されます。resnormは,xにおける残差の二乗した2ノルム(sum(有趣的(x) ^ 2))です。

解での目的関数の値。配列として返されます。一般的に、剩余(x) =乐趣になります。

ソルバーの停止理由。整数として返されます。

1

関数が解xに収束したことを示します。

2

xの変化が指定された許容誤差を下回っているか,xにおけるヤコビアンが未定義です。

3.

残差の変化が指定された許容誤差を下回っています。

4

探索方向の相対振幅がステップの許容誤差を下回っています。

0

反復回数が选项。麦克斯特一个t我在sを超過,または関数評価の回数が选项。MaxFunctionEvaluationsを超過しています。

-1

プロット関数または出力関数がソルバーを停止させたことを示します。

-2

問題が実行不可能です。範囲乌兰巴托が適切ではありません。

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

firstorderopt

1次の最適性の尺度

迭代

実行した反復回数

funcCount

関数評価回数です。

cgiterations

PCG法の合計反復回数(信頼領域反射法アルゴリズムのみ)

stepsize

xの最終変位

算法

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

消息

終了メッセージ

解におけるラグランジュ乗数。次のフィールドをもつ構造体として返されます。

较低的

下限

上限乌兰巴托

解におけるヤコビアン。実数行列として返されます。雅可比矩阵(i, j)は,解xでのx (j)に関する有趣的(我)の偏導関数です。

制限

  • 信頼領域反射法アルゴリズムは劣決定システムを扱いません。方程式の数,つまりFの行数が少なくとも変数の数と同じである必要があります。劣決定の場合,lsqnonlinはレーベンバーグ・マルカート法アルゴリズムを使用します。

  • lsqnonlinは複素数値問題を直接解くことができます。範囲制約は複素数値に対して意味を持たないことに注意してください。範囲制約を使用した複素数問題では、変数を実数部と虚数部に分けます。詳細は、複素数値データへのモデルの当てはめを参照してください。

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

  • xの構成要素に上限(または下限)がない場合,lsqnonlinでは非常に大きい任意の正の値(下限に対しては負の値)を設定する代わりに,(下限に対しては)を乌兰巴托(または)の対応する構成要素に設定する方がより適切です。

lsqnonlinlsqcurvefitfsolveの信頼領域反射法アルゴリズムは,有趣的でヤコビアンを計算せずに,あるいはヤコビスパースパターンを提示せずに,小規模から中規模の問題で使用できます(これは,ヘッシアンの計算やヘッセスパースパターンの入力なしで,fminconまたはfminuncを使用する場合にも適用されます)。小,中規模問題とは,どのくらい小さいのでしょうか。絶対的な答えはありません。ご利用のコンピューターシステムの構成における仮想メモリ量によって異なるからです。

個の方程式とn個の未知数の問題を考えてみましょう。コマンドJ =稀疏((m, n))内存不足エラーを引き起こす場合は,間違いなく大きな問題が発生しています。エラーが発生しない場合でも,問題の規模が大きすぎる場合があります。判定するには,問題を実行してMATLABがシステムで使用可能な仮想メモリ内で実行されるかどうかを確認します。

アルゴリズム

レーベンバーグ・マルカート法および信頼領域反射法は,fsolveにも使用される非線形最小二乗アルゴリズムに基づいています。

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

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

代替機能

アプリ

最適化ライブエディタータスクがlsqnonlinにビジュアルインターフェイスを提供します。

参照

[1] Coleman, T.F.和Y. Li。有界非线性极小化的内部信赖域方法《优化学报》,1996年第6卷,第418-445页。

[2] Coleman, T.F.和Y. Li。关于有界大规模非线性极小化的反射牛顿方法的收敛性《数学规划》,第67卷第2期,1994年,第189-224页。

[3] Dennis, J. E. Jr. <非线性最小二乘>《数值分析的技术现状》,雅各布斯编,学术出版社,269-312页。

[4] Levenberg, K. <一种求解最小二乘某些问题的方法>。应用数学季刊2,1944,页164-168。

《非线性参数的最小二乘估计算法》。SIAM应用数学杂志,Vol. 11, 1963, pp. 431-441。

[6] Moré, J. J. < Levenberg-Marquardt算法:实现和理论>。数值分析,g.a. Watson主编,《数学讲义》630,施普林格Verlag, 1977,第105-116页。

[7] Moré, J. J., B. S. Garbow, K. E. Hillstrom。MINPACK的用户指南阿尔贡国家实验室,报告退火- 80 - 74,1980。

[8] Powell, M. J. D. <求解非线性代数方程组的Fortran子程序>。非线性代数方程的数值方法,P. Rabinowitz主编,ch7, 1970。

拡張機能

R2006aより前に導入