主要内容

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乌兰巴托。你可以修复解决方案组件x(我)通过指定磅(i) =乌兰巴托(我)

请注意

如果指定的输入范围不一致的问题,输出xx0和输出resnorm剩余[]

的组件x0违反的界限磅≤x≤乌兰巴托重置到盒子的内部定义的界限。组件,尊重界限并不改变。

例子

x= lsqnonlin (有趣的,x0,,乌兰巴托,选项)最小化的优化选项中指定选项。使用optimoptions设置这些选项。通过空矩阵乌兰巴托如果不存在边界。

x= lsqnonlin (问题)发现的最低标准问题描述的结构问题

例子

(x,resnorm)= lsqnonlin (___),对于任何输入参数,返回的值的平方2-norm剩余的x:sum(有趣的(x) ^ 2)

例子

(x,resnorm,剩余,exitflag,输出)= lsqnonlin (___)此外返回剩余的价值有趣的(x)在解决方案x,一个值exitflag描述退出条件和结构输出包含的信息优化过程。

(x,resnorm,剩余,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(大小(d));

问题是:考虑到数据(d,y),找到最适合的指数衰减率数据。

创建一个匿名函数,需要一个值的指数衰减率 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

有趣= @ (x) x (1) * exp (- t)。* exp (exp(-(时距(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

画出两个函数看到合适的质量。

情节(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

这两个算法发现同样的解决方案。策划方案和数据。

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

图包含一个轴。轴与标题指数适合数据包含2线类型的对象。这些对象表示数据、指数。

找到 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-component向量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输出是平方剩余规范,或函数的平方和值。

下面的函数计算向量值的目标函数。

函数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,[]、[]选项);
规范一阶迭代Func-count f (x)最优步0 3 359677 2.88 e + 04目标函数返回正无穷;尝试一种新的点……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 14 45 242999 0.125 - 5.1 e + 03 15 48 242661 0.25 2.04 e + 03 16 51 241987 0.5 1.91 1.04 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.57381 - 2.02599 684 27 84 87 9.50489 0.000462261 0.0114 9.50489 0.0619927 2.27 28局部最小值。lsqnonlin停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。

检查输出结构,以获得更多的信息解决方案的过程。

输出
输出=结构体字段:firstorderopt: 0.0114迭代:28 funcCount: 87 cgiterations: 0算法:“trust-region-reflective”stepsize: 4.6226 e-04消息:“……”

相比之下,设置算法选项“levenberg-marquardt”

选项。算法=“levenberg-marquardt”;[x, resnorm残留,exitflag,输出]= lsqnonlin(有趣,x0,[]、[]选项);
一阶迭代Func-count残留最优规范0.01λ0步3 359677 2.88 e + 04目标函数返回正;尝试一种新的点……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年0.00944311 9 42 243568 5.66 e + 04 100000 0.00821622 243424 1.61 e + 45 04 10000 0.00777936 243322 8.8 e + 03年11 48 1000 0.0673933 242408 5.1 e + 03 100 51 0.675209 13 54 6.59804 233628 1.05 e + 04 14 57 169089 54.6992 8.51 e + 04 1 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”聚合用更少的迭代,但几乎尽可能多的功能评估:

输出
输出=结构体字段:迭代:19 funcCount: 72 stepsize: 5.0703 e-05 cgiterations: [] firstorderopt: 4.9629 e-05算法:“levenberg-marquardt”的信息:“……”

输入参数

全部折叠

函数的平方和最小化,指定为一个函数处理或一个函数的名称。有趣的是一个函数,它接受一个数组x并返回一个数组F的目标函数值x。这个函数有趣的可以指定一个函数处理一个文件:

x = lsqnonlin (x0 @myfun)

在哪里myfunMATLAB是一种®等功能

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

有趣的也可以是一个函数处理为一个匿名函数。

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

如果用户定义的值xF数组,它们转化为向量通过线性索引(看到了吗数组索引)。

请注意

平方和不应显式地形成的。相反,你的函数应该返回一个矢量函数的值。看到例子

如果还可以计算雅可比矩阵“SpecifyObjectiveGradient”选择是真正的设定的,

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

然后函数有趣的必须返回第二个输出参数与雅可比矩阵值J(矩阵)x。通过检查的价值nargout,该函数可以避免计算J有趣的就是只有一个输出参数(的情况下优化算法只需要的价值F但不是J)。

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

如果有趣的返回一个数组的组件和xn元素,n元素的数量吗x0,雅可比矩阵J是一个——- - - - - -n矩阵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我< < = =元素个数(磅)

如果有更少的元素比在x0,解决者发出警告。

例子:指定,所有的x分量都是积极的,使用磅= 0(大小(x0))

数据类型:

上界,指定为一个真正的向量或真正的数组。如果元素的数量x0等于元素的数量乌兰巴托,然后乌兰巴托指定

x (i) < =乌兰巴托(我)对所有

如果元素个数(乌兰巴托)<元素个数(x0),然后乌兰巴托指定

x (i) < =乌兰巴托(我)1我< < = =元素个数(乌兰巴托)

如果有更少的元素乌兰巴托比在x0,解决者发出警告。

例子:指定所有的x分量都小于1,使用乌兰巴托= 1(大小(x0))

数据类型:

优化选项,指定的输出optimoptions或一个结构optimset的回报。

一些选项适用于所有算法,以及其他相关的特定算法。看到优化选择参考的详细信息。

有些选项是缺席的optimoptions显示。这些选项出现在以下表中斜体。有关详细信息,请参见视图选项

所有的算法

算法

之间做出选择“trust-region-reflective”(默认),“levenberg-marquardt”

算法选项指定偏爱使用何种算法。它仅仅是一个偏好,因为每个算法必须满足一定的条件下使用。trust-region-reflective算法,非线性方程组不能欠定的;也就是说,方程的数量(元素的数量F返回的有趣的)必须至少多达的长度x。选择算法的更多信息,见选择算法

CheckGradients

比较用户提供衍生品(目标或约束的梯度)有限差分衍生品。的选择是(默认)或真正的

optimset,名字是DerivativeCheck和值“上”“关闭”。看到当前和遗留选项名称

诊断

显示诊断信息函数最小化或解决。的选择是“关闭”(默认)或“上”

DiffMaxChange

最大的有限差分的变量变化梯度(积极的标量)。默认值是

DiffMinChange

最低有限差分的变量变化梯度(积极的标量)。默认值是0

显示

显示(见水平迭代显示):

  • “关闭”“没有”显示没有输出。

  • “通路”在每个迭代中显示输出,给出了默认退出消息。

  • “iter-detailed”在每个迭代中显示输出,给出了技术退出消息。

  • “最后一次”(默认)显示最终的输出,并给出默认退出消息。

  • 最后详细的显示最终的输出,给出了技术退出消息。

FiniteDifferenceStepSize

标量或矢量步长因子有限的差异。当您设置FiniteDifferenceStepSize一个向量v向前,有限的差异δ

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

在哪里信号′(x) =标志(x)除了信号′(0)= 1。中央有限的差异是

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

标量FiniteDifferenceStepSize扩大到一个向量。默认值是sqrt (eps)向前有限的差异,eps ^ (1/3)中央有限的差异。

optimset,名字是FinDiffRelStep。看到当前和遗留选项名称

FiniteDifferenceType

有限的差异,用于估算梯度,要么“前进”(默认),或“中央”(中心)。“中央”需要两倍的功能评估,但应该更准确。

算法时小心遵守限差分估计两种类型。例如,可能需要一个落后,而不是向前,避免在边界外的点评估。

optimset,名字是FinDiffType。看到当前和遗留选项名称

FunctionTolerance

终止公差函数值,一个积极的标量。默认值是1 e-6。看到公差和停止条件

optimset,名字是TolFun。看到当前和遗留选项名称

FunValCheck

检查函数值是否有效。“上”会显示一个错误时,函数返回一个值复杂的,,或。默认的“关闭”显示没有错误。

MaxFunctionEvaluations

最大允许函数值的运算次数,一个正整数。默认值是100 * numberOfVariables。看到公差和停止条件迭代和函数计算

optimset,名字是MaxFunEvals。看到当前和遗留选项名称

MaxIterations

最大允许的迭代次数,一个正整数。默认值是400年。看到公差和停止条件迭代和函数计算

optimset,名字是麦克斯特。看到当前和遗留选项名称

OptimalityTolerance

终止宽容的一阶最优性(积极的标量)。默认值是1 e-6。看到一阶最优性测量

在内部,“levenberg-marquardt”算法使用了一个最优公差(停止准则)1的军医FunctionTolerance和不使用OptimalityTolerance

optimset,名字是TolFun。看到当前和遗留选项名称

OutputFcn

指定一个或多个用户定义的函数,每个迭代的优化函数调用。通过一个函数处理或处理单元阵列的功能。默认是没有([])。看到输出函数和情节函数的语法

PlotFcn

情节在算法执行时进步的各种措施;从预定义的情节或编写自己的选择。通过一个名字,一个函数处理,或处理单元阵列的名称或函数。自定义绘制函数,通过函数处理。默认是没有([]):

  • “optimplotx”当前点的阴谋。

  • “optimplotfunccount”情节数的函数。

  • “optimplotfval”情节的函数值。

  • “optimplotresnorm”阴谋剩余工资的标准。

  • “optimplotstepsize”情节的步长。

  • “optimplotfirstorderopt”情节一阶最优性措施。

自定义函数使用相同的语法作为输出函数。看到输出函数优化工具箱™输出函数和情节函数的语法

optimset,名字是PlotFcns。看到当前和遗留选项名称

SpecifyObjectiveGradient

如果(默认),解算器接近雅可比矩阵使用有限的差异。如果真正的雅可比矩阵,解算器使用一个用户定义的(中定义有趣的雅可比矩阵),或者信息(当使用JacobMult),为目标函数。

optimset,名字是雅可比矩阵和值“上”“关闭”。看到当前和遗留选项名称

StepTolerance

终止上公差x,一个积极的标量。默认值是1 e-6。看到公差和停止条件

optimset,名字是TolX。看到当前和遗留选项名称

TypicalX

典型的x值。元素的数量TypicalX等于元素的数量x0的起点。默认值是的(numberofvariables, 1)。解算器使用TypicalX为扩展有限差分梯度估计。

UseParallel

真正的并行求解估计,梯度。禁用默认设置,。看到并行计算

Trust-Region-Reflective算法
JacobianMultiplyFcn

雅可比矩阵乘法函数,指定为一个函数处理。大规模的结构性问题,这个函数计算雅可比矩阵产品J * Y,J ' * Y,或J”* (J * Y)没有真正形成J。的函数形式

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

在哪里动力系统包含用于计算的矩阵J * Y(或J ' * Y,或J”* (J * Y))。第一个参数动力系统必须作为第二个参数相同的目标函数返回的有趣的例如,

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

Y是一个矩阵的行数一样有尺寸问题。国旗确定哪些产品来计算:

  • 如果标志= = 0然后W = J ' * (J * Y)

  • 如果国旗> 0然后W = J * Y

  • 如果国旗< 0然后W = J ' * Y

在每种情况下,J不是显式地形成的。解算器使用动力系统计算预调节器。看到传递额外的参数信息如何提供任何额外的参数的值jmfun的需求。

请注意

“SpecifyObjectiveGradient”必须设置为真正的解算器通过动力系统有趣的jmfun

看到最小化茂密的结构化的麻绳,线性等式雅可比矩阵乘法函数与线性最小二乘法类似的例子。

optimset,名字是JacobMult。看到当前和遗留选项名称

JacobPattern

雅可比矩阵的稀疏模式有限差分。集JacobPattern (i, j) = 1有趣的(我)取决于x (j)。否则,设置JacobPattern (i, j) = 0。换句话说,JacobPattern (i, j) = 1当你可以∂有趣的(我)/∂x (j)≠0。

使用JacobPattern时不方便计算雅可比矩阵J有趣的,但你可以决定(验货)有趣的(我)取决于x (j)。解算器可以近似J当你给通过稀疏有限的差异JacobPattern

如果结构是未知的,不设置JacobPattern。就好像默认行为JacobPattern是一个稠密矩阵的。然后求解计算有限差分近似在每个迭代中。为大问题这可能是昂贵的,所以通常是更好的稀疏结构来确定。

MaxPCGIter

最大数量的首选条件共轭梯度迭代,一个积极的标量。默认值是马克斯(1,numberOfVariables / 2)。有关更多信息,请参见大规模非线性最小二乘法

PrecondBandWidth

上的带宽预调节器PCG,一个非负整数。默认的PrecondBandWidth,这意味着直接分解(柯列斯基)而非共轭梯度(CG)。直接分解比CG计算更贵,但质量更好一步生成解决方案。集PrecondBandWidth0对角预处理(0)上带宽。对于一些问题,一个中间带宽减少了PCG迭代的数量。

SubproblemAlgorithm

确定迭代步骤是如何计算的。默认的,“分解”,需要较慢但更精确的步骤“重心”。看到Trust-Region-Reflective最小二乘

TolPCG

在PCG迭代终止宽容,积极的标量。默认值是0.1

Levenberg-Marquardt算法
InitDamping

Levenberg-Marquardt参数的初始值,一个积极的标量。默认是1)依照。有关详细信息,请参见Levenberg-Marquardt方法

ScaleProblem

的雅可比矩阵有时可以改善收敛了不佳的问题;默认值是“没有”

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

问题的结构,指定为一个结构有以下字段:

字段名 条目

客观的

目标函数

x0

初始点x
向量的下界
乌兰巴托 向量的上界

解算器

“lsqnonlin”

选项

选择创建optimoptions

你必须提供至少客观的,x0,解算器,选项字段问题结构。

数据类型:结构体

输出参数

全部折叠

解决方案,作为真正的向量或返回数组。的大小x是一样的尺寸吗x0。通常情况下,x是当地的解决问题的办法exitflag是正的。信息的质量解决方案,明白了当解决成功

平方剩余的规范,作为非负的实际返回。resnorm剩余的平方2-norm吗x:sum(有趣的(x) ^ 2)

值目标函数的解决方案,作为一个数组返回。一般来说,剩余(x) =乐趣

原因,解算器停止,返回一个整数。

1

功能融合解决方案x

2

的变化x小于指定的公差,或雅可比矩阵x是未定义的。

3

剩余的变化小于指定的公差。

4

相对大小的搜索方向是公差小于一步。

0

迭代次数超过options.MaxIterations超过或数量的功能评估options.MaxFunctionEvaluations

1

一个函数或输出函数停止解决者的阴谋。

2

问题是不可行:边界乌兰巴托是不一致的。

优化过程的信息,作为结构返回字段:

firstorderopt

的一阶最优性

迭代

采取的迭代次数

funcCount

的数量评估函数

cgiterations

PCG迭代总数(仅trust-region-reflective算法)

stepsize

最终位移x

算法

优化算法

消息

退出消息

拉格朗日乘数法在解决方案,作为结构返回字段:

较低的

下界

上界乌兰巴托

雅可比矩阵的解决方案,作为一个真正的返回矩阵。雅可比矩阵(i, j)的偏导数是吗有趣的(我)关于x (j)在解决方案x

限制

  • trust-region-reflective算法不能解决欠定的系统;它要求方程的数目,即。的行维度F,至少是大数量的变量。在欠定的情况下,lsqnonlin使用Levenberg-Marquardt算法。

  • lsqnonlin可以直接解决复数的问题。一个绑定约束为复杂的值做没有意义。绑定约束一个复杂的问题,将变量分为实部和虚部。看到适合一个复数的数据模型

  • 中使用的预调节器计算条件共轭梯度trust-region-reflective方法形式的一部分JTJ(J雅可比矩阵)计算预调节器。因此,一排J与许多非零,导致近密集的产品JTJ大,可能会导致一个昂贵的解决方案过程问题。

  • 如果组件x没有上(或下),lsqnonlin喜欢,相应的组成部分乌兰巴托(或)被设置为(或下界)而不是任意但非常大的积极(或消极下界)号码。

您可以使用信赖域反射算法lsqnonlin,lsqcurvefit,fsolve小到中等规模的问题,没有计算雅可比矩阵有趣的或提供雅可比矩阵稀疏模式。(这也适用于使用fminconfminunc没有计算黑森或提供黑森稀疏模式。)小到中等规模的有多小?没有绝对的答案是,这取决于虚拟内存的数量在你的电脑系统配置。

假设你的问题方程和n未知数。如果命令J =稀疏((m, n))导致一个内存不足错误在您的机器上,那么这肯定是太大的问题。如果它不会导致一个错误,这个问题可能仍然太大。你可以找到只有运行它,看到如果MATLAB运行在系统上可用的虚拟内存的数量。

算法

Levenberg-Marquardt和trust-region-reflective方法是基于非线性最小二乘算法用于fsolve

选择功能

应用程序

优化住编辑任务提供了一个可视化界面lsqnonlin

引用

[1]科尔曼,T.F.和y。“内部,信赖域方法对非线性最小化范围。”暹罗杂志上优化》第六卷,1996年,页418 - 445。

[2]科尔曼,T.F.和y。“大规模非线性最小化的反光牛顿方法的收敛范围。”数学规划2号,卷。67年,1994年,页189 - 224。

[3]丹尼斯,j·e·Jr .)“非线性最小二乘。”先进的数值分析艾德。d . Jacobs学术出版社,页269 - 312。

[4]Levenberg, k”解决某些问题的一种方法,在最小二乘。”2季度应用数学,1944年,页164 - 168。

[5]马夸特,“非线性参数的最小二乘估计算法。”暹罗《应用数学11卷,1963年,页431 - 441。

[6],j。j“Levenberg-Marquardt算法:实现和理论”。数值分析,艾德。g·a·沃森在630年数学课堂讲稿,施普林格-,1977年,页105 - 116。

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

[8]鲍威尔,m . j . d .“一个Fortran子例程求解非线性代数方程组。”非线性代数方程的数值方法,艾德。p . Rabinowitz Ch.7, 1970年。

扩展功能

之前介绍过的R2006a