解非线性最小二乘问题

解决非线性最小二乘(非线性数据拟合)问题

描述

非线性最小二乘求解器

解决形式的非线性最小二乘曲线拟合问题

x F ( x ) 2. 2. = x ( F 1. ( x ) 2. + F 2. ( x ) 2. + ... + F N ( x ) 2. )

可选的下界和上界乌兰巴托关于x

x,乌兰巴托可以是向量或矩阵;看见矩阵参数

而不是计算价值 F ( x ) 2. 2. (平方和)解非线性最小二乘问题需要用户定义的函数来计算矢量价值函数

F ( x ) = [ F 1. ( x ) F 2. ( x ) F N ( x ) ]

实例

x= lsqnonlin(享乐,x0)从点开始x0并找到中所述函数的平方和的最小值享乐.功能享乐应该返回值的向量(或数组),而不是值的平方和。(该算法隐式地计算各个分量的平方和乐趣(x).)

笔记

传递额外的参数说明如何向向量函数传递额外参数乐趣(x),如果必要的。

实例

x= lsqnonlin(享乐,x0,,乌兰巴托)定义中设计变量的一组上下限x,使解决方案始终在范围内x乌兰巴托.您可以修复解决方案组件x(我)通过指定lb(i)=ub(i)

笔记

如果问题的指定输入边界不一致,则输出xx0和输出重新规范剩余[]

组成部分x0越界Lb≤x≤ub重置为边界所定义的框的内部。遵守边界的组件不会改变。

实例

x= lsqnonlin(享乐,x0,,乌兰巴托,选项)使用指定的优化选项最小化选项. 使用最佳选择设置这些选项。将空矩阵传递给乌兰巴托如果没有界限。

x= lsqnonlin(问题)找到最低限度问题, 在哪里问题结构描述在输入参数.创造问题如中所述,通过从优化应用程序导出问题来构造出口你的工作

实例

[x,重新规范) = lsqnonlin (___),对于任何输入参数,返回x:总和(乐趣(x)^2)

实例

[x,重新规范,剩余,出口滞后,输出) = lsqnonlin (___)另外返回残差的值乐趣(x)在解决方案x,一个值出口滞后描述出口条件和结构输出包含优化过程的信息。

[x,重新规范,剩余,出口滞后,输出,兰姆达,雅可比矩阵) = 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 然后返回一个向量,表示模型与衰减率和数据之间的差异。

Fun = @(r)exp(-d * r)-y;

找出最优衰减率的值。任意选择一个初始猜想x0= 4.

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

绘制数据和最合适的指数曲线。

绘图(D,Y,“柯”,d,exp(-x*d),“b -”)传奇('数据',“最适合”)xlabel(“不”)伊拉贝尔(“exp (tx)”)

当某些拟合参数有界时,找到最佳拟合模型。

找到一个定心 B 和缩放 A. 最适合功能

A. 经验值 ( - T ) 经验值 ( - 经验值 ( - ( T - B ) ) )

到标准法向密度,

1. 2. π 经验值 ( - T 2. / 2. )

创建矢量T以及这些点的相应正态密度。

t = linspace(-4,4);y = 1 / sqrt(2 * pi)* exp(-t。^ 2/2);

创建一个函数,用于计算居中函数和缩放函数与法线之间的差异Y具有x(1)作为比例 A. x(2)作为中心 B

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

从开始寻找最优匹配x0=[1/2,0],具有缩放功能 A. 在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 -”)xlabel(“不”)传奇(“正常密度”,的拟合函数)

使用不同的方法时,比较数据拟合问题的结果解非线性最小二乘问题算法。

假设你有观测时间的数据xdata.以及观察到的反应数据伊达塔,并且您想找到参数 x ( 1. ) x ( 2. ) 以适应模型的形式

伊达塔 = 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];

创建一个简单的指数衰减模型。该模型计算预测值和观测值之间的差值向量。

fun=@(x)x(1)*exp(x(2)*扩展数据)-ydata;

使用起点拟合模型x0=[100,-1].首先,使用默认值“trust-region-reflective”算法。

x0=[100,-1];选项=最佳选项(@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(扩展数据(1),扩展数据(end));plot(tlist,x(1)*exp(x(2)*tlist),“b -”)Xlabel.xdata.伊拉贝尔伊达塔标题(“指数拟合数据”)传奇('数据',“指数拟合”)举行

找出 x 这最小化

K = 1. 1. 0 ( 2. + 2. K - E K x 1. - E K x 2. ) 2. ,

求最小平方和的值。

因为解非线性最小二乘问题假设平方和不是在用户定义的函数中显式形成的,函数传递给解非线性最小二乘问题应该改为计算向量值函数

F K ( x ) = 2. + 2. K - E K x 1. - E K x 2. ,

K = 1. 1. 0 (即, F 应该有 1. 0 组件)。

这个我的乐趣计算10分量向量F的函数出现在此示例的结尾

求最小值点和最小值,从这个点开始x0=[0.3,0.4]

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

这个重新规范输出是残差范数的平方,即函数值的平方和。

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

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

在解决过程发生时(通过设置陈列选择“国际热核实验堆”),然后(通过检查输出结构)。

假设你有观测时间的数据xdata.以及观察到的反应数据伊达塔,并且您想找到参数 x ( 1. ) x ( 2. ) 以适应模型的形式

伊达塔 = 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];

创建一个简单的指数衰减模型。该模型计算预测值和观测值之间的差值向量。

fun=@(x)x(1)*exp(x(2)*扩展数据)-ydata;

使用起点拟合模型x0=[100,-1].通过设置。检查解决过程陈列选择“国际热核实验堆”.获得一个输出结构以获取有关解决方案过程的更多信息。

x0=[100,-1];选项=最佳选项(“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迭代:28 Funccount:87 Cgiteration:0算法:'信任区域 - 反光'步骤:4.6226E-04消息:'...'

为了比较,设置算法选择'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.00821621 e + 04 100000 45 2434241.61 e + 04 10000 0.00777935 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.07033 4.91 e-05 1 e-05 e-05当地最小的可能的。Lsqnonlin停止的原因是当前步长的相对大小小于步长公差的值。

这个'levenberg-marquardt'收敛时迭代次数较少,但函数求值次数几乎相同:

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

输入参数

全部折叠

平方和最小的函数,作为函数句柄或函数名指定。享乐是接受数组的函数吗x然后返回一个数组F,目标函数的取值为x.功能享乐可以指定为文件的函数句柄:

x=lsqnonlin(@myfun,x0)

在哪里我的乐趣是一个MATLAB®等功能

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

享乐也可以是匿名函数的函数句柄。

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

的用户定义值xF如果是数组,则使用线性索引将其转换为向量(请参见数组索引(MATLAB))。

笔记

平方和不应该明确地形成。相反,函数应该返回一个函数值向量。看到例子

如果雅可比矩阵也能计算出来这个“SpecifyObjectiveGradient”选择是符合事实的设定的,

options=optimoptions('lsqnonlin','SpecifyObjectiveGradient',true)

然后是函数享乐必须返回带有雅可比矩阵值的第二个输出参数J(矩阵)在x.通过检查的值纳古特,该函数可以避免计算J什么时候享乐只使用一个输出参数调用(在优化算法只需要值F但不是J).

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

如果享乐返回M组件和xN元素,N元素的个数是多少x0雅可比矩阵J是一个M-经过-N矩阵在哪里J(i,J)是部分衍生的F(我)关于x (j).(雅各比亚J是梯度的转置吗F.)

例子:@(x) cos(x).*exp(-x)

数据类型:char|功能手柄|字符串

初始点,指定为实向量或实数组。解算器使用中的图元数x0以及x0来确定变量的数量和大小享乐接受。

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

数据类型:双倍的

下界,指定为实向量或实数组。如果元素的数量x0等于元素的个数,然后指定

x(我)> =磅(我)对所有

如果numel(lb),然后指定

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

如果中的元素较少比在x0,解算器发出警告。

例子:要指定所有x分量都是正数,请使用lb = zeros(size(x0))

数据类型:双倍的

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

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

如果努梅尔(ub)<努梅尔(x0),然后乌兰巴托指定

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

如果中的元素较少乌兰巴托比在x0,解算器发出警告。

例子:要指定所有x分量都小于1,使用ub=个(尺寸(x0))

数据类型:双倍的

的输出,指定为优化选项最佳选择或一个结构优化集返回。

有些选项适用于所有算法,有些则与特定算法相关。看到优化选项参考的详细信息。

有些选项不在计划中最佳选择显示。这些选项在下表中以斜体显示。有关详细信息,请参阅视图选项

所有的算法

算法

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

这个算法选项指定要使用的算法的首选项。这只是一种偏好,因为使用每种算法都必须满足一定的条件。对于信任区域反射算法,非线性方程组不能欠定;即方程的个数(元素的个数)F退回享乐)的长度必须至少与x.Levenberg-Marquardt算法不处理边界约束。有关选择算法的更多信息,请参见选择算法

检查梯度

将用户提供的衍生物(客观或约束的梯度)进行有限差分衍生物。选择是(默认)或符合事实的

优化集, 名字是DerivativeCheck值是“开”“关闭”.看到当前和旧选项名称表

诊断学

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

DiffMaxChange

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

差异

有限差分梯度(正标量)变量的最小变化。默认值为0

陈列

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

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

  • “国际热核实验堆”在每次迭代时显示输出,并给出默认退出消息。

  • “国际热核实验堆详细说明”在每次迭代时显示输出,并给出技术退出消息。

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

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

FiniteDifferenceStepSize

有限差分的标量或向量步长因子。当您设置FiniteDifferenceStepSize一个向量v,正有限差分希腊字母表的第4个字母

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

在哪里符号′(x)=符号(x)除了标志' (0)= 1.中央有限差异是

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

标量FiniteDifferenceStepSize展开为向量。默认值为sqrt (eps)对于正向有限差分,以及每股收益^(1/3)对于中心有限差分。

优化集, 名字是FinDiffielstep.看到当前和旧选项名称表

FiniteDifferenceType

用于估计梯度的有限差分'向前'(默认),或“中央”(中心)。“中央”需要两倍的函数求值,但应该更准确。

该算法在估计两种类型的有限差分时小心地遵守边界。例如,它可以取一个向后的,而不是向前的,差异,以避免在边界外的点计算。

优化集, 名字是FinDiffType.看到当前和旧选项名称表

FunctionTolerance

函数值的终止容限,一个正标量。默认值是1 e-6.看到公差和停止标准

优化集, 名字是TolFun.看到当前和旧选项名称表

FunValCheck

检查函数值是否有效。“开”当函数返回的值不正确时,显示错误复杂的,.默认的“关闭”显示没有错误。

最大函数求值

允许的函数求值的最大数目,一个正整数。默认值是100 * numberOfVariables.看到公差和停止标准迭代和函数计数

优化集, 名字是MaxFunEvals.看到当前和旧选项名称表

最大迭代次数

允许的最大迭代次数,为正整数。默认值是400.看到公差和停止标准迭代和函数计数

优化集, 名字是马克西特.看到当前和旧选项名称表

最佳耐受性

一阶最优性(正标量)上的终止容差。默认值是1 e-6.看到一阶最优性测量

在内部,'levenberg-marquardt'算法采用最优容差(停止准则)1的军医FunctionTolerance而且不使用最佳耐受性

优化集, 名字是TolFun.看到当前和旧选项名称表

OutputFcn

指定每个迭代的优化函数调用的一个或多个用户定义的函数。通过功能句柄或功能句柄的单元格数组。默认值为none([]).看到输出函数的语法

绘图仪

在算法执行时绘制各种进度度量;从预定义的绘图中选择或编写自己的绘图。传递名称、函数句柄或名称或函数句柄的单元格数组。对于自定义打印函数,传递函数句柄。默认值为“无”([]):

  • “optimplotx”绘制当前点。

  • “optimplotfunccount”绘制函数计数。

  • “最佳普罗夫瓦尔”绘制函数值。

  • 'Optimplotresnorm'绘制残差的范数。

  • “optimplotstepsize”绘制步长。

  • “optimplotfirstorderopt”绘制一阶最优测度。

自定义打印函数使用与输出函数相同的语法。看见输出函数输出函数的语法

优化集, 名字是绘图仪.看到当前和旧选项名称表

指定对象半径

如果(默认),解算器使用有限差分近似雅可比矩阵。如果符合事实的,解算器使用用户定义的雅可比矩阵(在中定义)享乐),或雅可比信息(使用JacobMult),作为目标函数。

优化集, 名字是雅可比矩阵,值为“开”“关闭”.看到当前和旧选项名称表

StepTolerance.

端接公差x,一个正标量。默认值是1 e-6.看到公差和停止标准

优化集, 名字是TolX.看到当前和旧选项名称表

TypicalX

典型的x值。中的元素数TypicalX等于元素的个数x0,起点。默认值为(Numberofvarialbles,1).解算器使用TypicalX为梯度估计缩放有限差分。

UseParallel

符合事实的,求解器并行估计梯度。通过设置为默认值来禁用,.看到并行计算

Trust-Region-Reflective算法
JacobianMultiplyFcn

Jacobian乘法函数,指定为函数句柄。对于大规模的结构问题,该功能计算了雅各族矩阵产品J * Y.,j'* yJ”* (J * Y)没有真正形成J.功能在于形式

W=jmfun(金佛,Y,旗)

在哪里jinfo.包含用于计算的矩阵J * Y.(或者j'* yJ”* (J * Y)).第一个论点jinfo.必须与目标函数返回的第二个参数相同享乐例如,通过

[F,Jinfo]=fun(x)

Y矩阵的行数与问题的维数相同。国旗确定要计算的产品:

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

  • 如果国旗> 0然后w = j * y

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

在每种情况下,J不是明确形成的。解算器使用jinfo.计算前提者。看到传递额外的参数有关如何为任何其他参数提供值的信息JMFUN.需要。

笔记

“SpecifyObjectiveGradient”必须设置为符合事实的让解算器通过jinfo.享乐JMFUN.

看到稠密结构Hessian线性等式的极小化Jacobian乘以线性最小二乘函数类似的例子。

优化集, 名字是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是1的密集矩阵。然后求解器在每次迭代中计算一个完整的有限差分近似。对于大问题来说,这可能是昂贵的,所以通常最好确定稀疏性结构。

MaxPCGIter

PCG(预处理共轭梯度)迭代的最大次数,正标量。默认值为最大值(1,numberOfVariables/2).有关更多信息,请参见大规模非线性最小二乘

预带宽

PCG预处理器的上限带宽,一个非负整数。默认值预带宽,这意味着使用了直接因子分解(Cholesky)而不是共轭梯度(CG)。直接因式分解在计算上比CG更昂贵,但在求解过程中产生了更好的质量。集预带宽0对于对角线预处理(上限带宽为0)。对于某些问题,中间带宽可减少PCG迭代次数。

子问题算法

确定如何计算迭代步骤。默认的,“分解”,比“重心”.看到Trust-Region-Reflective最小二乘

托尔巴夫

PCG迭代上的终止容差,一个正标量。默认值为0.1

Levenberg-Marquardt算法
InitDamping

Levenberg-Marquardt参数的初始值,正标量。默认为1)依照.有关详细信息,请参阅Levenberg-Marquardt方法

ScaleProblem

的雅可比矩阵有时可以提高规模不大的问题的收敛性;默认值是“没有”

例子:options=options('lsqnonlin','FiniteDifferenceType','central')

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

字段名称 入口

客观的

目标职能

x0

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

解算器

“lsqnonlin”

选项

选择的选项最佳选择

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

得到a的最简单的方法问题结构是从优化应用程序导出问题。

数据类型:结构

输出参数

全部折叠

解决方案,作为实向量或实数组返回。大小x和尺寸一样吗x0.通常,x什么时候能解决局部问题出口滞后是肯定的。有关解决方案质量的信息,请参阅当解算器成功时

余数的平方范数,作为非负实数返回。重新规范是残差的平方2-范数x:总和(乐趣(x)^2)

目标函数在解时的值,以数组形式返回。一般来说,剩余(x) =乐趣

解算器停止的原因,以整数形式返回。

1.

函数收敛到一个解x

2.

的变化x小于规定的公差。

3.

残余量的变化小于规定的公差。

4.

搜索方向的相对幅度小于阶梯公差。

0

超过迭代次数选项。马克西特A.T我在…上s或超出功能评估的数量选项。最大函数求值

-1

打印函数或输出函数使解算器停止。

-2

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

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

firstordopt.

一阶最优性测度

迭代

迭代次数

Funccount.

功能评估的数量

CG迭代

PCG迭代总数(仅可信区域反射算法)

步长

最终位移x

算法

使用的优化算法

消息

退出消息

解处的拉格朗日乘数,返回为带有字段的结构:

较低的

下界

上面的

上界乌兰巴托

解的雅可比矩阵,返回实矩阵。雅可比矩阵(i, j)是部分衍生的乐趣(一)关于x (j)在解决方案x

限制

  • Levenberg-Marquardt算法不处理边界约束。

  • 信任区域反射算法不解决未确定的系统;它要求等式的数量,即行维度F,至少与变量数量一样伟大。在未定的案件中,解非线性最小二乘问题使用Levenberg-Marquardt算法。

    由于信任区域反射算法不处理欠定系统,而Levenberg-Marquardt不处理边界约束,因此同时具有这两种特征的问题不能用解非线性最小二乘问题

  • 解非线性最小二乘问题能直接用levenberg-marquardt算法。但是,该算法不接受约束约束。对于绑定约束的复杂问题,将变量拆分为真实和虚部,并使用trust-region-reflective算法。看到适合复杂的数据模型

  • 信赖域反射法的预处理共轭梯度部分使用的预处理子计算形式JTJ(J为雅可比矩阵)。因此,一排J有许多非零,这会导致几乎稠密的乘积JTJ,可能导致大型问题的解决过程成本高昂。

  • 如果组件x没有上部(或更低的)界限,解非线性最小二乘问题首选的是乌兰巴托(或者)着手(或者而不是一个任意但非常大的正数(或负数的下界)。

您可以在中使用信赖域反射算法解非线性最小二乘问题,最小二乘拟合FSOLVE.不计算雅可比矩阵的中小型问题享乐或者提供雅可比稀疏模式。(这也适用于使用铁铬镍铁合金fminunc没有计算Hessian或提供Hessian稀疏模式。)中小型规模有多小?没有绝对答案,因为这取决于计算机系统配置中的虚拟内存量。

假设你的问题已经解决了M方程式N未知数。如果是命令J=稀疏(一(m,n))引起内存不足如果您的计算机出现错误,那么这肯定是一个太大的问题。如果它没有导致错误,那么问题可能仍然太大。您只能通过运行它并查看MATLAB是否在系统可用的虚拟内存量内运行才能找到答案。

算法

Levenberg-Marquardt和信任区域反射方法基于也使用的非线性最小二乘算法FSOLVE.

工具书类

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

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

[3] Dennis,J.E.JR.“非线性最小二乘”。数值分析的最新进展, D.雅各布斯,学术出版社,269-312页。

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

[5] Marquardt,D。“一种用于非线性参数的最小二乘估计的算法。”暹罗应用数学杂志,第11卷,1963年,第431-441页。

[6] Moré, J. J. < Levenberg-Marquardt算法:实现和理论>。数值分析,ed。G. A. Watson,数学讲义630,Springer Verlag,1977,PP。105-116。

[7] Moré, J. J., B. S. Garbow, K. E. Hillstrom。MINPACK 1用户指南.argonne国家实验室,Rept。ANL-80-74,980。

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

扩展能力

在R2006a之前引入