主要内容

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可以上下界限吗,乌兰巴托。的参数x,,乌兰巴托可以是向量或矩阵;看到矩阵的参数

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,,乌兰巴托)定义了一组设计变量的上下界限x,这样的解决方案总是范围x乌兰巴托。你可以修复解决方案组件x(我)通过指定磅(i) =乌兰巴托(我)

请注意

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

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

例子

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

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

(x,resnorm)= lsqcurvefit (___),对于任何输入参数,返回的值的平方2-norm剩余的x:总和(乐趣(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 -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)

图包含一个轴。坐标轴标题数据和拟合曲线包含2线类型的对象。这些对象表示数据,拟合指数。

找到最好的指数适合数据拟合参数约束的地方。

生成数据从一个指数衰减模型+噪音。模型是

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

t 从0到3, ε 正态分布噪声均值为0和0.05标准差。

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

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

0 x ( 1 ) 3 / 4

- - - - - - 2 x ( 2 ) - - - - - - 1

磅= (0,2);乌兰巴托= [3/4,1];

创建模型。

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

创建一个初始猜测。

x0 = [1/2, 2];

解决有限的拟合问题。

x = lsqcurvefit (ydata,有趣,x0, xdata磅,乌兰巴托)
局部最小值。优化完成因为梯度的大小小于最优值的宽容。
x =1×20.7500 - -1.0000

检查结果如何曲线与数据的吻合程度。由于边界保持解决方案远离真正的价值观,适合是平庸的。

情节(xdata ydata,“柯”、xdata有趣(x, xdata),“b -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)

图包含一个轴。坐标轴标题数据和拟合曲线包含2线类型的对象。这些对象表示数据,拟合指数。

比较的结果拟合和默认值“trust-region-reflective”算法和“levenberg-marquardt”算法。

假设你有观察的时间数据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

比较用的解决方案“levenberg-marquardt”健康。

选择= optimoptions (“lsqcurvefit”,“算法”,“levenberg-marquardt”);磅= [];乌兰巴托= [];x = lsqcurvefit (ydata,有趣,x0, xdata磅,乌兰巴托,选项)
局部最小值。lsqcurvefit停止因为当前步骤的相对大小小于步长值的宽容。
x =1×2498.8309 - -0.1013

这两个算法融合到相同的解决方案。绘制数据和拟合指数模型。

* = linspace (xdata (1) xdata(结束));情节(xdata ydata,“柯”,乘以,有趣(x,倍),“b -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)

图包含一个轴。坐标轴标题数据和拟合曲线包含2线类型的对象。这些对象表示数据,拟合指数。

比较的结果拟合和默认值“trust-region-reflective”算法和“levenberg-marquardt”算法。检查解决方案过程,看看哪个更有效率。

假设你有观察的时间数据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停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。

比较用的解决方案“levenberg-marquardt”健康。

选择= optimoptions (“lsqcurvefit”,“算法”,“levenberg-marquardt”);磅= [];乌兰巴托= [];(x2, resnorm2 residual2、exitflag2 output2] = lsqcurvefit (ydata,有趣,x0, xdata磅,乌兰巴托,选项);
局部最小值。lsqcurvefit停止因为当前步骤的相对大小小于步长值的宽容。

等效的解决方案吗金宝搏官方网站?

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

是的,解决方案是等金宝搏官方网站价的。

该算法减少了函数评估到达解决方案吗?

流([”“trust-region-reflective”算法把% d函数评估,\ n”,”和“levenberg-marquardt”算法把% d函数评估。\ n '),output.funcCount output2.funcCount)
trust-region-reflective的算法函数计算花了87,和“levenberg-marquardt”算法花了72功能评估。

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

* = linspace (xdata (1) xdata(结束));情节(xdata ydata,“柯”,乘以,有趣(x,倍),“b -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)

图包含一个轴。坐标轴标题数据和拟合曲线包含2线类型的对象。这些对象表示数据,拟合指数。

适合看起来不错。是残差多大?

流([”“trust-region-reflective”算法具有残留标准% f, \ n”,”和“levenberg-marquardt”算法具有残留标准% f。\ n”),resnorm resnorm2)
“trust-region-reflective”算法剩余9.504887规范,和“levenberg-marquardt”算法剩余9.504887规范。

输入参数

全部折叠

你想适应函数,指定为一个函数处理或一个函数的名称。有趣的是一个函数,它有两个输入:一个向量或矩阵x和一个向量或矩阵xdata有趣的返回一个向量或矩阵F的目标函数值xxdata。函数的乐趣可以指定作为一个函数的函数处理文件:

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数组,它们转化为向量通过线性索引(看到了吗数组索引)。

请注意

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

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

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

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

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

如果有趣的返回一个向量(矩阵)组件和xn元素,n元素的数量吗x0,雅可比矩阵J是一个——- - - - - -n矩阵J (i, J)的偏导数是吗F(我)关于x (j)。(雅可比矩阵J的梯度的转置F)。有关更多信息,请参见写作目标函数向量和矩阵

例子:@ (x, xdata) x (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(我)> =磅(我)对所有

如果元素个数(磅)<元素个数(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 (“lsqcurvefit”、“FiniteDifferenceType”,“中央”)

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

字段名 条目

客观的

目标函数的xxdata

x0

初始点x有效集算法

xdata

目标函数的输入数据

ydata

输出数据匹配的目标函数
向量的下界
乌兰巴托 向量的上界

解算器

“lsqcurvefit”

选项

选择创建optimoptions

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

数据类型:结构体

输出参数

全部折叠

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

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

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

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

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,至少是大数量的变量。在欠定的情况下,lsqcurvefit使用Levenberg-Marquardt算法。

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

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

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

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

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

算法

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

选择功能

应用程序

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

引用

[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