lsqcurvefit

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

描述

非线性最小二乘解算器

找到系数x该解决问题

x F ( x , x d 一个 t 一个 ) y d 一个 t 一个 2 2 = x ( F ( x , x d 一个 t 一个 ) y d 一个 t 一个 ) 2 ,

给定的输入数据xdata,以及观测到的输出ydata,其中xdataydata是矩阵还是向量F(x,xdata)是一个矩阵值函数或向量值函数,其大小与ydata

可选地,组件x可以具有下限和上限,UB。的参数x,,UB可以是向量或矩阵;看到矩阵的参数

lsqcurvefit函数使用与lsqnonlinlsqcurvefit简单地提供了一种用于数据拟合问题的便利接口。

与其计算平方和,lsqcurvefit要求用户定义的函数来计算向量价值函数

F ( x , x d 一个 t 一个 ) = ( F ( x , x d 一个 t 一个 ( 1 ) ) F ( x , x d 一个 t 一个 ( 2 ) ) F ( x , x d 一个 t 一个 ( k ) ) ]

例子

x= lsqcurvefit(有趣的,X0,xdata,ydata)开始于X0和发现系数x以最佳拟合非线性函数乐趣(x, xdata)的数据ydata(用最小二乘法)ydata必须与向量(或矩阵)相同的大小F通过返回有趣的

注意

传递额外的参数说明如何将额外参数传递给向量函数有趣(X),如果必要的。

例子

x= lsqcurvefit(有趣的,X0,xdata,ydata,,UB)中的设计变量定义一组下界和上界x,所以解总是在这个范围内xUB。您可以修复解决方案组件X(ⅰ)通过指定磅(i) =乌兰巴托(我)

注意

如果问题的指定输入界限不一致,则输出也不一致xX0和输出resnorm剩余[]

的组件X0违反界限的lb≤x≤ub被重置到边界定义的框的内部。尊重边界的组件不会改变。

例子

x= lsqcurvefit(有趣的,X0,xdata,ydata,,UB,选项)与优化选项最小化指定的选项。使用optimoptions设置这些选项。通作空矩阵UB如果没有边界存在。

x= lsqcurvefit(问题)找到最低的问题,其中问题是这样的结构,说明输入参数。创建问题结构通过从优化应用程序导出的一个问题,如在导出您的工作

(x,resnorm] = lsqcurvefit(___),对于任何输入参数,返回残差at的平方2-范数的值x:总和((FUN(X,XDATA)-ydata)。^ 2)

例子

(x,resnorm,剩余,exitflag,输出] = lsqcurvefit(___)另外返回剩余的值有趣(X,XDATA)-ydata在该解决方案x,一个值exitflag它描述了退出条件和结构输出其中包含关于优化过程的信息。

(x,resnorm,剩余,exitflag,输出,拉姆达,雅可比矩阵] = lsqcurvefit(___)另外返回结构拉姆达其字段包含拉格朗日乘子的解决方案x的雅可比矩阵有趣的在该解决方案x

例子

全部折叠

假设你有观测时间数据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, xdata) x (1) * exp (x (2) * xdata);

使用起始点来拟合模型x0 =[1] 100年

x0 =[1] 100年;x = lsqcurvefit(有趣,x0, xdata ydata)
当地最小的可能。lsqcurvefit停止,因为在相对于其初始值的平方和最终的变化小于函数允差值。
X =1×2498.8309 - -0.1013

绘制数据和拟合曲线。

次= linspace(XDATA(1),XDATA(结束));情节(xdata ydata,“柯”,时代,有趣的(X,次),'B-')图例('数据',的拟合指数)标题(“数据和拟合曲线”)

寻找最好的指数拟合到拟合参数被约束的数据。

从指数衰减模型和噪声中产生数据。模型是

y = 经验值 ( - 1 3. t ) + ε ,

t 取值范围为0至3,和 ε 均值为0,标准差为0.05的正态分布噪声。

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

问题是:给定数据(xdata,ydata),找到指数衰减模型 y = x ( 1 ) 经验值 ( x ( 2 ) xdata ) 最适合的数据,参数有界如下:

0 x ( 1 ) 3. / 4

- 2 x ( 2 ) - 1

LB = [0,-2];UB = [3/4,-1];

创建模型。

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

创建初始猜测。

x0 = [1/2, 2];

解决边界问题的拟合。

X = lsqcurvefit(乐趣,X0,XDATA,YDATA,LB,UB)
局部最小值。优化完成是因为梯度的大小小于最优容差的值。
X =1×20.7500 -1.0000

检查结果曲线吻合程度的数据。由于边界与真实值保持解掉,适合的才是平庸。

情节(xdata ydata,“柯”、xdata有趣(x, xdata),'B-')图例('数据',的拟合指数)标题(“数据和拟合曲线”)

比较与默认值拟合的结果“trust-region-reflective”算法和“文伯格 - 马夸特”算法。

假设你有观测时间数据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, xdata) x (1) * exp (x (2) * xdata);

使用起始点来拟合模型x0 =[1] 100年

x0 =[1] 100年;x = lsqcurvefit(有趣,x0, xdata ydata)
当地最小的可能。lsqcurvefit停止,因为在相对于其初始值的平方和最终的变化小于函数允差值。
X =1×2498.8309 - -0.1013

把解和a的解比较一下“文伯格 - 马夸特”适合。

选项= optimoptions('lsqcurvefit','算法',“文伯格 - 马夸特”);磅= [];UB = [];x = lsqcurvefit (ydata,有趣,x0, xdata磅,乌兰巴托,选项)
当地最小的可能。lsqcurvefit停止,因为当前步骤的相对尺寸小于步骤尺寸公差的值。
X =1×2498.8309 - -0.1013

这两种算法收敛于同一解。绘制数据和拟合指数模型。

次= linspace(XDATA(1),XDATA(结束));情节(xdata ydata,“柯”,时代,有趣的(X,次),'B-')图例('数据',的拟合指数)标题(“数据和拟合曲线”)

比较与默认值拟合的结果“trust-region-reflective”算法和“文伯格 - 马夸特”算法。检查溶液处理至看这是在这种情况下更有效。

假设你有观测时间数据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, xdata) x (1) * exp (x (2) * xdata);

使用起始点来拟合模型x0 =[1] 100年

x0 =[1] 100年;[X,resnorm,残差,exitflag,输出] = lsqcurvefit(乐趣,X0,XDATA,YDATA);
当地最小的可能。lsqcurvefit停止,因为在相对于其初始值的平方和最终的变化小于函数允差值。

把解和a的解比较一下“文伯格 - 马夸特”适合。

选项= optimoptions('lsqcurvefit','算法',“文伯格 - 马夸特”);磅= [];UB = [];[X2,resnorm2,residual2,exitflag2,输出2] = lsqcurvefit(乐趣,X0,XDATA,YDATA,LB,UB,选项);
当地最小的可能。lsqcurvefit停止,因为当前步骤的相对尺寸小于步骤尺寸公差的值。

解是等价的吗?万博 尤文图斯

规范(x x2)
ANS = 2.0626e-06

是的,解决方案是等万博 尤文图斯价的。

哪种算法需要更少的函数计算才能得到解?

流([“信任区域反射”算法采用%d函数计算,\n','和'文伯格 - 马夸特“算法拿了%d功能评估。\ n”]output.funcCount output2.funcCount)
“信任区域反射”算法进行了87次函数评估,“levenberg-marquardt”算法进行了72次函数评估。

绘制数据和拟合指数模型。

次= linspace(XDATA(1),XDATA(结束));情节(xdata ydata,“柯”,时代,有趣的(X,次),'B-')图例('数据',的拟合指数)标题(“数据和拟合曲线”)

拟合看起来不错。有多大的残差?

流([“的‘’信赖域反射”“算法具有剩余范%F,\ N”,“和'列文伯格 - 马夸尔特”“算法具有剩余范%F。\ N”]resnorm resnorm2)
‘trust-region-’算法的残差范数为9.504887,‘levenberg-marquardt’算法的残差范数为9.504887。

输入参数

全部折叠

要匹配的函数,指定为函数句柄或函数名。有趣的是一个函数,采用两个输入:向量或矩阵x和矢量或矩阵xdata有趣的返回向量或矩阵F,目标函数在xxdata。该函数fun可以被指定为函数文件的函数句柄:

X = lsqcurvefit(@ myfun,X0,XDATA,YDATA)

在哪里myfunMATLAB是一种®功能如

函数F = myfun(x,xdata) F =…在x, xdata处计算函数值

有趣的也可以是匿名函数的函数句柄。

f = @ (x, xdata) x (1) * xdata。x ^ 2 +(2) *罪(xdata);x = lsqcurvefit (f, x0, xdata ydata);

如果用户定义的值xF是阵列,它们被转换为使用线性索引载体(参见数组索引(MATLAB))。

注意

有趣的应该返回乐趣(x, xdata)而不是平方和总和((FUN(X,XDATA)-ydata)。^ 2)lsqcurvefit隐式计算的分量的平方的总和有趣(X,XDATA)-ydata。看到例子

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

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

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

函数[F,J] = myfun(X,XDATA)F = ...在x%的目标函数的值是否nargout> 1%的两个输出参数J = ...%雅可比的函数在x端评估

如果有趣的返回的向量(矩阵)组件和xn元素,n元素的个数是X0,雅可比矩阵J是一个-通过-n矩阵,其中Ĵ(I,J)是的偏导数F(我)关于X(j)的。(雅可比J梯度的转置是F。)有关详细信息,请参阅写向量和矩阵目标函数

例:@(X,XDATA)×(1)* EXP(-x(2)* XDATA)

数据类型:烧焦|function_handle|字符串

初始点,指定为实向量或实数组。求解器使用元素的数量X0和大小X0确定变量的个数和大小有趣的接受。

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

数据类型:

为模型输入数据,指定为实向量或实数组。模型是

YDATA =乐趣(X,XDATA),

在哪里xdataydata是固定的阵列,并且x是的参数,所述阵列lsqcurvefit改变搜索最小平方和。

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

数据类型:

模型的响应数据,指定为实向量或实数组。模型是

YDATA =乐趣(X,XDATA),

在哪里xdataydata是固定的阵列,并且x是的参数,所述阵列lsqcurvefit改变搜索最小平方和。

ydata数组的大小和形状必须与数组相同有趣(X0,XDATA)

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

数据类型:

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

X(ⅰ)> =磅(I)对所有

如果numel(LB),然后该指定

X(ⅰ)> =磅(I)1 <= i <= numel(lb)

如果有更少的元素X0,解决问题的人会发出警告。

例:要指定所有x分量都是正数,使用磅= 0(大小(x0))

数据类型:

上限,指定为实向量或真正的数组。如果元素的个数X0等于元素的数UB,然后UB该指定

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

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

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

如果有更少的元素UBX0,解决问题的人会发出警告。

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

数据类型:

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

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

选项中缺少一些选项optimoptions显示。这些选项出现在以下表中斜体字。有关详细信息,请参阅视图选项

所有的算法

算法

之间做出选择“trust-region-reflective”(默认),“文伯格 - 马夸特”

算法选项指定要使用的算法的首选项。这只是一个首选项,因为使用每个算法必须满足特定的条件。对于可信区域反射算法,非线性方程组不能欠定;即方程的个数(的元素个数)F通过返回有趣的的长度至少与的长度相同x。Levenberg-Marquardt算法不处理绑定约束。有关选择算法的详细信息,请参阅选择算法

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

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

optimset, 名字是TolFun。看到当前和旧式选项名表

FunValCheck

检查函数值是否有效。“上”当函数返回值时显示错误复杂,天道酬勤, 要么。默认的“关”显示没有错误。

MaxFunctionEvaluations

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

optimset, 名字是MaxFunEvals。看到当前和旧式选项名表

MaxIterations

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

optimset, 名字是MAXITER。看到当前和旧式选项名表

OptimalityTolerance

第一阶最优终止公差(正标)。默认值是1E-6。看到一阶最优性措施

在内部,“文伯格 - 马夸特”算法使用的最优公差(停止条件)1E-4FunctionTolerance并且不使用OptimalityTolerance

optimset, 名字是TolFun。看到当前和旧式选项名表

OutputFcn

指定一个或多个用户定义的函数,一个优化函数在每次迭代调用。传递一个函数手柄或手柄功能的单元阵列。默认为none ([])。看到输出函数的语法

PlotFcn

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

  • 'optimplotx'绘制当前点。

  • 'optimplotfunccount'绘制功能计数。

  • 'optimplotfval'绘制函数值。

  • 'optimplotresnorm'绘制残差的常态。

  • 'optimplotstepsize'绘制步长。

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

自定义绘图函数使用与输出函数相同的语法。看到输出函数输出函数的语法

optimset, 名字是PlotFcns。看到当前和旧式选项名表

SpecifyObjectiveGradient

如果(默认),求解器使用有限差分近似雅可比矩阵。如果真正的中,解算器使用一个用户定义的雅可比(定义在有趣的),或雅可比矩阵信息(使用时)JacobMult),用于目标函数。

optimset, 名字是雅可比矩阵,其值为“上”“关”。看到当前和旧式选项名表

StepTolerance

关于终止宽容x,正面标。默认值是1E-6。看到公差和停止条件

optimset, 名字是TolX。看到当前和旧式选项名表

TypicalX

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

UseParallel

什么时候真正的,解算器估算梯度并联。通过设置为默认禁用,。看到并行计算

Trust-Region-Reflective算法
JacobianMultiplyFcn

雅可比乘功能,指定为函数句柄。对于大型结构的问题,这个函数计算雅可比矩阵产品Ĵ* Y,J'* Y, 要么J”* (J * Y)实际上不形成J。该函数的形式为

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

在哪里金佛山包含用来计算所述矩阵Ĵ* Y(要么J'* Y, 要么J”* (J * Y))。第一个参数金佛山必须与目标函数返回的第二个参数相同吗有趣的例如,by

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

Y是一个矩阵,其行数与问题中的维数相同。确定要计算的产品:

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

  • 如果国旗> 0然后W =Ĵ* 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

PCG的最大数量(预条件共轭梯度)迭代中,一个正标量。默认值是MAX(1,numberOfVariables / 2)。有关更多信息,请参见大规模非线性最小二乘

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

在PCG迭代,正面标终止宽容。默认值是0.1

Levenberg-Marquardt算法
InitDamping

列文伯格 - 马夸尔特参数的初始值,将正标量。默认值是1E-2。有关详细信息,请参阅Levenberg-Marquardt方法

ScaleProblem

的雅可比矩阵有时可以改善一个小尺度问题的收敛性;默认值是“没有”

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

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

字段名称 条目

目的

目标函数的xxdata

X0

初始点x,只有活动集算法

xdata

输入目标函数的数据

ydata

输出数据由目标函数匹配
下界向量
UB 上界的矢量

解算器

'lsqcurvefit'

选项

选择与创造optimoptions

你必须至少提供目的,X0,解算器,xdata,ydata,选项在田间地头问题结构。

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

数据类型:结构体

输出参数

全部折叠

解,作为实向量或实数组返回。的大小x是一样的大小吗X0。通常情况下,x是局部解决问题的时候吗exitflag是正的。有关解决方案质量的信息,请参见当求解成功时

剩余的平方范,返回非负实。resnorm是剩余的在平方2-范数x:总和((FUN(X,XDATA)-ydata)。^ 2)

在溶液的目标函数的值,作为一个数组返回。一般来说,剩余=乐趣(x, xdata) -ydata

停止求解程序的原因,作为整数返回。

1

功能融合到一个解决方案x

2

的变化x不到规定的公差。

3.

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

4

搜索方向的相对大小比一步公差较小。

0

超过迭代次数options.MaxIterations或超出的函数计算次数options.MaxFunctionEvaluations

1

标绘功能或输出功能停止求解。

2

问题是不可行的:界限UB是不一致的。

关于优化过程的信息,以带字段的结构返回:

firstorderopt

一阶最优性测度

迭代

迭代次数

funcCount

功能评估的次数

cgiterations

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

一步的大小

在最后的位移x

算法

采用优化算法

消息

退出消息

在该溶液拉格朗日乘数,返回与字段的结构:

较低的

下界

上界UB

解的雅可比矩阵,作为实矩阵返回。雅可比矩阵(i, j)是的偏导数有趣的(我)关于X(j)的在该解决方案x

限制

  • Levenberg-Marquardt算法不处理绑定约束。

  • 信赖区域反射算法并没有解决欠定系统;它要求方程的数量,即,行维度F,至少是一样大的变量的数目。在未确定的情况下,lsqcurvefit使用Levenberg-Marquardt算法。

    由于trust-region-反思算法不处理欠定系统,而Levenberg-Marquardt不处理有界约束,因此具有这两个特征的问题是无法解决的lsqcurvefit

  • lsqcurvefit可以直接用?解决复值问题吗levenberg-marquardt算法。然而,这种算法不接受约束的限制。为具有结合的约束一个复杂的问题,分割变量分为实部和虚部,并使用trust-region-reflective算法。看到将模型与复杂值数据

  • 在信赖区域反射法的预处理共轭梯度部分中使用的预处理计算JTJ(哪里J是雅可比矩阵),然后再计算预调节器。因此,一排J如果有很多非零,那么结果几乎是一个密集的乘积JTJ,可能会导致对大问题昂贵的解决方案的过程。

  • 如果组件x没有上(或下)边界内,lsqcurvefit的对应分量UB(要么被设置成INF(要么对于下界),而不是任意的而是非常大的正(或负为下限)号码。

您可以使用信赖域反射算法lsqnonlin,lsqcurvefit,fsolve与中小规模的问题,而计算雅可比在有趣的或者提供雅可比稀疏模式。这也适用于使用fminconfminunc没有计算的Hessian或供给的Hessian稀疏图案。)是多么小中小规模?没有绝对的答案是可用的,因为它依赖于虚拟内存在您的计算机系统的配置量。

假设你的问题有方程n未知数。如果命令J =稀疏((m, n))导致一个内存不足在您的机器上出现错误,那么这肯定是一个太大的问题。如果它没有导致错误,问题可能仍然太大。您只能通过运行它并查看MATLAB是否在系统上可用的虚拟内存范围内运行来确定。

算法

列文伯格 - 马夸尔特和信赖域反射的方法是基于最小二乘算法还使用了非线性fsolve

参考

[1] Coleman, T.F.和Y. Li。一种非线性有界最小化的内部信赖域方法。SIAM杂志上优化, 1996年第6卷,第418-445页。

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

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

[4]的Levenberg,K.“一种用于若干问题的最小二乘解方法”。季刊应用数学2, 1944年,第164-168页。

[5]马夸特,D.“算法的非线性参数的最小二乘估计”。SIAM杂志应用数学, 1963年第11卷,431-441页。

李文柏-马夸特算法:实施与理论。数值分析编辑。G. A.华生,数学630讲义,施普林格出版社,1977,页105-116。

[7]以上,J. J.,B. S. Garbow和K. E. Hillstrom。用户指南MINPACK 1。阿贡国家实验室,REPT。ANL-80-74,1980。

一个用于求解非线性代数方程组的Fortran子程序。非线性代数方程的数值方法拉比诺维茨主编,第7版,1970年。

扩展功能

之前介绍过的R2006a