lsqcurvefit
解决非线性曲线拟合(数据拟合)在最小二乘意义上的问题
语法
描述
非线性最小二乘解算器
找到系数x,解决问题
给定的输入数据xdata和观察到的输出ydata,在那里xdata和ydata矩阵或向量,然后呢F(x,xdata)是一个矩阵值或向量值函数相同的大小ydata。
可选的组件x受约束吗
的参数x,磅,乌兰巴托可以是向量或矩阵;看到矩阵的参数。
的lsqcurvefit
函数使用相同的算法lsqnonlin
。lsqcurvefit
仅仅提供了一个方便的接口数据拟合问题。
而不是计算平方和,lsqcurvefit
需要用户定义函数计算向量价值函数
例子
简单指数适合
假设你有观察的时间数据xdata
和观察到的响应数据ydata
和你想找到参数
和
适合的模型形式
输入的观察时间和响应。
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 -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)
最适合与绑定约束
找到最好的指数适合数据拟合参数约束的地方。
生成数据从一个指数衰减模型+噪音。模型是
与 从0到3, 正态分布噪声均值为0和0.05标准差。
rng默认的%的再现性xdata = linspace (0, 3);ydata = exp (-1.3 * xdata) + 0.05 * randn(大小(xdata));
问题是:考虑到数据(xdata
,ydata
),发现指数衰减模型
最适合的数据,有界的参数如下:
磅= (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到7。添加噪声数据使用randn
。
= 2;% x (1)b = 4;% x (2)t0 = 5;% x (3)c = 1/2;% x (4)xdata = linspace (2、7);rng默认的ydata = a + b *: xdata - t0) + c * xdata + 1/10 * randn(大小(xdata));
图数据。
情节(xdata ydata,“罗”)
合适的非线性模型数据与以下约束:
所有系数介于0到7。
。你可以写这个约束的形式
A * x < =
使用一个= [1 1 1 1]
和b = 0
。
1磅= 0 (4);乌兰巴托= 7 * 1 (4,1);一个= [1 1 1 1];b = 0;
的myfun
函数在这个例子创建这个模型的目标函数。
解决装配问题从这一点(1 2 3)
。
startpt = [1 2 3 1];Aeq = [];说真的= [];[x, res] = lsqcurvefit (@myfun、startpt xdata, ydata,磅,乌兰巴托,A, b, Aeq, beq)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×42.3447 4.0972 4.9979 0.4303
res = 1.2682
返回的解决方案从原始点不远(2 4 5 1/2)
。情节点数据与曲线的解决方案。
情节(xdata ydata,“罗”、xdata myfun (x, xdata),“b -”)
返回的解决方案与数据匹配很好。约束活跃吗?
* x (:)
ans = -1.0137
约束是不活跃的,因为* x < 0
。
函数xdata F = myfun (x) = x (1);b = x (2);t0 = x (3);c = x (4);F = a + b * (xdata - t0)每股+ c * xdata;结束
非线性数据拟合和非线性约束
创建人工数据的非线性模型
与参数
,
,
,
,因为时间
从2到7。添加噪声数据使用randn
。
= 2;% x (1)b = 4;% x (2)t0 = 5;% x (3)c = 1/2;% x (4)xdata = linspace (2、7);rng默认的ydata = a + b *: xdata - t0) + c * xdata + 1/10 * randn(大小(xdata));
图数据。
情节(xdata ydata,“罗”)
合适的非线性模型数据与以下约束:
所有系数介于0到7。
1磅= 0 (4);乌兰巴托= 7 * 1 (4,1);
这个问题没有线性约束。
一个= [];b = [];Aeq = [];说真的= [];
的myfun
函数在这个例子创建这个模型的目标函数。的nlcon
函数在这个例子创建非线性约束函数。
解决装配问题从这一点(1 2 3)
。
startpt = [1 2 3 1];[x, res] = lsqcurvefit (@myfun、startpt xdata, ydata,磅,乌兰巴托,A, b, Aeq,说真的,@nlcon)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×41.3806 3.7542 5.0169 0.6337
res = 1.6018
返回的解决方案x
不是在原始点(2 4 5 1/2)
由于非线性约束违反。情节对曲线的数据点和计算约束函数的解决方案。
情节(xdata ydata,“罗”、xdata myfun (x, xdata),“b -”)
测查[c] = nlcon (x)
c = -3.1307 e-06
测查= []
非线性不等式约束的解决方案,因为很活跃c = 0
在解决方案。
即使解决点不是在原始点,解决曲线匹配的数据很好。
函数xdata F = myfun (x) = x (1);b = x (2);t0 = x (3);c = x (4);F = a + b * (xdata - t0)每股+ c * xdata;结束函数测查[c] = nlcon测查(x) = [];c = x (1) ^ 2 + (2) ^ 2 - 4 ^ 2;结束
比较算法
比较的结果拟合和默认值“trust-region-reflective”
算法和“levenberg-marquardt”
算法。
假设你有观察的时间数据xdata
和观察到的响应数据ydata
和你想找到参数
和
适合的模型形式
输入的观察时间和响应。
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 -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)
比较算法和检测解决方案的过程
比较的结果拟合和默认值“trust-region-reflective”
算法和“levenberg-marquardt”
算法。检查解决方案过程,看看哪个更有效率。
假设你有观察的时间数据xdata
和观察到的响应数据ydata
和你想找到参数
和
适合的模型形式
输入的观察时间和响应。
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.0630 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 -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)
适合看起来不错。是残差多大?
流([”“trust-region-reflective”算法具有残留标准% f, \ n”,…”和“levenberg-marquardt”算法具有残留标准% f。\ n”),…resnorm resnorm2)
“trust-region-reflective”算法剩余9.504887规范,和“levenberg-marquardt”算法剩余9.504887规范。
输入参数
有趣的
- - - - - -你想适应函数
函数处理|函数的名字
你想适应函数,指定为一个函数处理或一个函数的名称。为“内点”
算法,有趣的
必须是一个函数处理。有趣的
是一个函数,它有两个输入:一个向量或矩阵x
和一个向量或矩阵xdata
。有趣的
返回一个向量或矩阵F
的目标函数值x
和xdata
。
请注意
有趣的
应该返回乐趣(x, xdata)
,而不是平方和总和(乐趣(x, xdata) -ydata) ^ 2)。
。lsqcurvefit
隐式计算的组件的平方和
。看到例子。有趣的(x, xdata) -ydata
这个函数有趣的
可以指定作为一个函数的函数处理文件:
x = lsqcurvefit (@myfun x0、xdata ydata)
在哪里myfun
MATLAB是一种®等功能
函数F = myfun (x, xdata) F =…%计算函数值x, xdata
有趣的
也可以是一个函数处理为一个匿名函数。
f = @ (x, xdata) x (1) * xdata。x ^ 2 +(2) *罪(xdata);x = lsqcurvefit (f, x0, xdata ydata);
lsqcurvefit
通过x
你的目标函数的形状x0
论点。例如,如果x0
是5-by-3数组,那么lsqcurvefit
通过x
来有趣的
作为一个5-by-3数组。
如果还可以计算雅可比矩阵和的“SpecifyObjectiveGradient”
选择是真正的
设定的,
选择= optimoptions (“lsqcurvefit”,“SpecifyObjectiveGradient”,真正的)
然后函数有趣的
必须返回第二个输出参数与雅可比矩阵值J
(矩阵)x
。通过检查的价值nargout
,该函数可以避免计算J
当有趣的
就是只有一个输出参数(的情况下优化算法只需要的价值F
但不是J
)。
函数F [J] = myfun (x, xdata) F =…在x %目标函数值如果nargout > 1%两个输出参数J =…在x %雅可比矩阵函数的评估结束
如果有趣的
返回一个向量(矩阵)米
组件和x
有n
元素,n
元素的数量吗x0
,雅可比矩阵J
是一个米
——- - - - - -n
矩阵J (i, J)
的偏导数是吗F(我)
关于x (j)
。(雅可比矩阵J
的梯度的转置F
)。有关更多信息,请参见写作目标函数向量和矩阵。
例子:@ (x, xdata) x (1) * exp (- x (2) * xdata)
数据类型:字符
|function_handle
|字符串
x0
- - - - - -初始点
真正的向量|真正的数组
xdata
- - - - - -输入数据模型
真正的向量|真正的数组
输入的数据模型,指定为一个真正的向量或真正的数组。模型是
ydata =乐趣(x, xdata)
,
在哪里xdata
和ydata
是固定的数组和x
数组的参数吗lsqcurvefit
更改搜索最小平方和。
例子:xdata = (1、2、3、4)
数据类型:双
ydata
- - - - - -响应数据模型
真正的向量|真正的数组
响应数据模型,指定为一个真正的向量或真正的数组。模型是
ydata =乐趣(x, xdata)
,
在哪里xdata
和ydata
是固定的数组和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))
。
数据类型:双
一个
- - - - - -线性不等式约束
真正的矩阵
线性不等式约束,指定为一个真正的矩阵。一个
是一个米
——- - - - - -N
矩阵,米
不平等的数量,N
是变量的数量(数量的元素x0
)。对于大型问题,通过一个
作为一个稀疏矩阵。
一个
编码米
线性不等式
A * x < =
,
在哪里x
的列向量N
变量x (:)
,b
是一个列向量米
元素。
例如,考虑这些不平等:
x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30日
输入以下命令来指定不等式约束条件。
= [1,2,3,4,5,6);b = (10、20、30);
例子:指定的x分量总和为1或更少,使用一个= 1 (1,N)
和b = 1
。
数据类型:双
b
- - - - - -线性不等式约束
真正的向量
线性不等式约束,指定为一个真正的向量。b
是一个米
元向量相关一个
矩阵。如果你通过b
作为一个行向量,解决内部转换b
的列向量b (:)
。对于大型问题,通过b
作为一个稀疏的向量。
b
编码米
线性不等式
A * x < =
,
在哪里x
的列向量N
变量x (:)
,一个
是一个矩阵的大小米
——- - - - - -N
。
例如,考虑这些不平等:
x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30。
输入以下命令来指定不等式约束条件。
= [1,2,3,4,5,6);b = (10、20、30);
例子:指定的x分量总和为1或更少,使用一个= 1 (1,N)
和b = 1
。
数据类型:双
Aeq
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为一个真正的矩阵。Aeq
是一个我
——- - - - - -N
矩阵,我
是平等的,N
是变量的数量(数量的元素x0
)。对于大型问题,通过Aeq
作为一个稀疏矩阵。
Aeq
编码我
线性等式
Aeq * x =说真的
,
在哪里x
的列向量N
变量x (:)
,说真的
是一个列向量我
元素。
例如,考虑这些不平等:
x1+ 2x2+ 3x3= 10
2x1+ 4x2+x3= 20,
输入以下命令来指定不等式约束条件。
Aeq = [1、2、3、2、4、1];说真的= (10、20);
例子:指定的x分量之和为1,使用Aeq = 1 (1, N)
和说真的= 1
。
数据类型:双
说真的
- - - - - -线性等式约束
真正的向量
线性等式约束,指定为一个真正的向量。说真的
是一个我
元向量相关Aeq
矩阵。如果你通过说真的
作为一个行向量,解决内部转换说真的
的列向量说真的(:)
。对于大型问题,通过说真的
作为一个稀疏的向量。
说真的
编码我
线性等式
Aeq * x =说真的
,
在哪里x
的列向量N
变量x (:)
,Aeq
是一个矩阵的大小我
——- - - - - -N
。
例如,考虑这些等式:
x1+ 2x2+ 3x3= 10
2x1+ 4x2+x3= 20。
输入以下命令来指定等式约束。
Aeq = [1、2、3、2、4、1];说真的= (10、20);
例子:指定的x分量之和为1,使用Aeq = 1 (1, N)
和说真的= 1
。
数据类型:双
nonlcon
- - - - - -非线性约束
函数处理
非线性约束条件,指定为一个函数处理。nonlcon
是一个函数,它接受一个向量或数组x
并返回两个数组,c (x)
和量表(x)
。
c (x)
非线性不等式约束的数组x
。lsqcurvefit
试图满足c (x) < = 0
所有条目的c
。(1) 量表(x)
是非线性等式约束的数组x
。lsqcurvefit
试图满足量表(x) = 0
所有条目的量表信
。(2)
例如,
x = lsqcurvefit (@myfun x0、xdata ydata,磅,乌兰巴托,A, b, Aeq,说真的,@mycon,选项)
在哪里mycon
是一个MATLAB函数如
函数测查[c] = mycon c (x) =…%计算非线性不等式在x。量表信=…在x %计算非线性等式。
SpecifyConstraintGradient
选择是真正的
设定的,选择= optimoptions (“lsqcurvefit”,“SpecifyConstraintGradient”,真正的)
nonlcon
还必须返回,在第三和第四输出参数,GC
的梯度,c (x)
,GCeq
的梯度,量表(x)
。GC
和GCeq
可以稀疏或密集。如果GC
或GCeq
大,相对较少的非零项,节省运行时间和内存的“内点”
代表他们是稀疏矩阵算法。有关更多信息,请参见非线性约束。
数据类型:function_handle
选项
- - - - - -优化选项
的输出optimoptions
|结构如optimset
返回
优化选项,指定的输出optimoptions
或结构等optimset
的回报。
一些选项适用于所有算法,以及其他相关的特定算法。看到优化选择参考的详细信息。
有些选项是缺席的optimoptions
显示。这些选项出现在以下表中斜体。有关详细信息,请参见视图的优化选择。
所有的算法 | |
|
之间做出选择 的 的 选择算法的更多信息,见选择算法。 |
CheckGradients |
比较用户提供衍生品(目标或约束的梯度)有限差分衍生品。的选择是 为 |
诊断 | 显示诊断信息函数最小化或解决。的选择是 |
DiffMaxChange | 最大的有限差分的变量变化梯度(积极的标量)。默认值是 |
DiffMinChange | 最低有限差分的变量变化梯度(积极的标量)。默认值是 |
|
显示(见水平迭代显示):
|
FiniteDifferenceStepSize |
标量或矢量步长因子有限的差异。当您设置
信号′(x) =标志(x) 除了信号′(0)= 1 。中央有限的差异是
FiniteDifferenceStepSize 扩大到一个向量。默认值是sqrt (eps) 向前有限的差异,eps ^ (1/3) 中央有限的差异。为 |
FiniteDifferenceType |
有限的差异,用于估算梯度,要么 算法时小心遵守限差分估计两种类型。例如,可能需要一个落后,而不是向前,避免在边界外的点评估。 为 |
|
终止公差函数值,一个积极的标量。默认值是 为 |
FunValCheck | 检查函数值是否有效。 |
|
最大允许函数值的运算次数,一个正整数。默认值是 为 |
|
最大允许的迭代次数,一个正整数。默认值是 为 |
OptimalityTolerance |
终止宽容的一阶最优性(积极的标量)。默认值是 在内部, 为 |
OutputFcn |
指定一个或多个用户定义的函数,每个迭代的优化函数调用。通过一个函数处理或处理单元阵列的功能。默认是没有( |
|
情节在算法执行时进步的各种措施;从预定义的情节或编写自己的选择。通过一个名字,一个函数处理,或处理单元阵列的名称或函数。自定义绘制函数,通过函数处理。默认是没有(
自定义函数使用相同的语法作为输出函数。看到输出函数优化工具箱和输出函数和情节函数的语法。 为 |
SpecifyObjectiveGradient |
如果 为 |
|
终止上公差 为 |
|
典型的 |
UseParallel |
当 |
Trust-Region-Reflective算法 | |
JacobianMultiplyFcn |
雅可比矩阵乘法函数,指定为一个函数处理。大规模的结构性问题,这个函数计算雅可比矩阵产品 W = jmfun(动力系统,Y,标志) 在哪里 (F,动力系统)(x) =乐趣
在每种情况下, 请注意
看到最小化茂密的结构化的麻绳,线性等式和雅可比矩阵乘法函数与线性最小二乘法类似的例子。 为 |
JacobPattern | 雅可比矩阵的稀疏模式有限差分。集 使用 如果结构是未知的,不设置 |
MaxPCGIter | 最大数量的首选条件共轭梯度迭代,一个积极的标量。默认值是 |
PrecondBandWidth | 上的带宽预调节器PCG,一个非负整数。默认的 |
SubproblemAlgorithm |
确定迭代步骤是如何计算的。默认的, |
TolPCG | 在PCG迭代终止宽容,积极的标量。默认值是 |
Levenberg-Marquardt算法 | |
InitDamping | Levenberg-Marquardt参数的初始值,一个积极的标量。默认是 |
ScaleProblem |
|
内点算法 | |
BarrierParamUpdate |
指定如何
这个选项会影响速度和收敛的解算器,但效果并不容易预测。 |
ConstraintTolerance |
公差约束违反,积极的标量。默认值是 为 |
InitBarrierParam | 最初的障碍价值,积极的标量。有时它可能有助于尝试一个高于默认值 |
SpecifyConstraintGradient |
梯度的非线性约束函数定义的用户。当设置为默认值, 为 |
SubproblemAlgorithm |
确定迭代步骤是如何计算的。默认的, 为 |
例子:选择= optimoptions (“lsqcurvefit”、“FiniteDifferenceType”,“中央”)
问题
- - - - - -问题的结构
结构
问题的结构,指定为一个结构有以下字段:
字段名 | 条目 |
---|---|
|
目标函数 |
|
初始点x |
|
目标函数的输入数据 |
|
输出数据匹配的目标函数 |
|
矩阵线性不等式约束 |
|
向量的线性不等式约束 |
|
矩阵线性等式约束 |
|
向量的线性等式约束 |
磅 |
向量的下界 |
乌兰巴托 |
向量的上界 |
|
非线性约束函数 |
|
“lsqcurvefit” |
|
选择创建optimoptions |
你必须提供至少客观的
,x0
,解算器
,xdata
,ydata
,选项
字段问题
结构。
数据类型:结构体
输出参数
resnorm
——平方剩余的规范
负的真实
平方剩余的规范,作为非负的实际返回。resnorm
剩余的平方2-norm吗x
:总和(乐趣(x, xdata) -ydata) ^ 2)。
。
剩余
——目标函数在解决方案的价值
数组
值目标函数的解决方案,作为一个数组返回。一般来说,剩余=乐趣(x, xdata) -ydata
。
exitflag
——原因解决者停止了
整数
原因,解算器停止,返回一个整数。
|
功能融合解决方案 |
|
的变化 |
|
剩余的变化小于指定的公差。 |
|
相对大小的搜索方向是公差小于一步。 |
|
迭代次数超过 |
|
一个函数或输出函数停止解决者的阴谋。 |
|
发现不可行点。范围 |
输出
——优化过程的信息
结构
优化过程的信息,作为结构返回字段:
firstorderopt |
的一阶最优性 |
迭代 |
采取的迭代次数 |
funcCount |
的数量评估函数 |
cgiterations |
PCG迭代(总数 |
stepsize |
最终位移 |
constrviolation |
最大的约束函数( |
bestfeasible |
遇到的最好的(最低目标函数)可行点(
如果没有找到可行点, |
算法 |
优化算法 |
消息 |
退出消息 |
雅可比矩阵
解决方案-雅可比矩阵
真正的矩阵
雅可比矩阵的解决方案,作为一个真正的返回矩阵。雅可比矩阵(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
小到中等规模的问题,没有计算雅可比矩阵有趣的
或提供雅可比矩阵稀疏模式。(这也适用于使用fmincon
或fminunc
没有计算黑森或提供黑森稀疏模式。)小到中等规模的有多小?没有绝对的答案是,这取决于虚拟内存的数量在你的电脑系统配置。
假设你的问题米
方程和n
未知数。如果命令J =稀疏((m, n))
导致一个内存不足
错误在您的机器上,那么这肯定是太大的问题。如果它不会导致一个错误,这个问题可能仍然太大。你可以找到只有运行它,看到如果MATLAB运行在系统上可用的虚拟内存的数量。
算法
Levenberg-Marquardt和trust-region-reflective方法是基于非线性最小二乘算法用于fsolve
。
默认trust-region-reflective算法是一个子空间信赖域方法和基于interior-reflective牛顿方法中描述[1]和[2]。每个迭代都包括近似解大型线性系统使用条件共轭梯度法(PCG)。看到Trust-Region-Reflective最小二乘。
Levenberg-Marquardt方法中描述的引用[4],[5],[6]。看到Levenberg-Marquardt方法。
的“内点”
算法使用fmincon
“内点”
算法做了一些调整。有关详细信息,请参见修改fmincon约束最小二乘算法。
选择功能
应用程序
的优化住编辑任务提供了一个可视化界面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年。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
lsqcurvefit
和lsqnonlin
金宝app支持使用生成代码codegen
(MATLAB编码器)函数或MATLAB编码器™应用程序,你必须有一个MATLAB编码器许可来生成代码。目标硬件必须支持标准的双精度浮点计算。金宝app你不能为单精度或定点计算生成代码。
代码生成目标不使用MATLAB解决数学内核库一样。因此,代码生成解决方案可以解决不同的解决方案,特别是对金宝搏官方网站条件不佳的问题。
所有代码必须MATLAB生成的代码。特别是,您不能使用一个定制的黑盒函数作为目标函数
lsqcurvefit
或lsqnonlin
。您可以使用coder.ceval
评估一个自定义函数在C或c++代码。然而,自定义函数必须在调用MATLAB函数。代码生成的
lsqcurvefit
和lsqnonlin
目前不支持线性或非线性约束。金宝applsqcurvefit
和lsqnonlin
不支持金宝app问题
理由代码生成。[x, fval] = lsqnonlin(问题)%不支持金宝app
您必须指定目标函数,利用函数处理,而不是字符串或字符的名字。
x = lsqnonlin (@fun x0,磅,乌兰巴托,选项)%的金宝app支持%不支持:l金宝appsqnonlin(‘有趣的’,…)或lsqnonlin(“有趣”,…)
所有输入矩阵
磅
和乌兰巴托
必须完整,而不是稀疏。稀疏矩阵转换为可以充分利用完整的
函数。的
磅
和乌兰巴托
参数必须有相同数量的条目的x0
参数或必须是空的[]
。如果你的目标硬件不支持无限边界,使用金宝app
optim.coder.infbound
。对于高级代码优化包括嵌入式处理器,您还需要嵌入式编码器®许可证。
你必须包括选项
lsqcurvefit
或lsqnonlin
并指定使用optimoptions
。必须包括的选项算法
选项,设置为“levenberg-marquardt”
。选择= optimoptions (“lsqnonlin”,“算法”,“levenberg-marquardt”);[x, fval exitflag] = lsqnonlin(有趣,x0,磅,乌兰巴托,选项);
代码生成支持这些选项:金宝app
算法
——必须“levenberg-marquardt”
FiniteDifferenceStepSize
FiniteDifferenceType
FunctionTolerance
MaxFunctionEvaluations
MaxIterations
SpecifyObjectiveGradient
StepTolerance
TypicalX
生成的代码错误检查选项有限。推荐的方式来更新一个选项是使用
optimoptions
,而不是点符号。选择= optimoptions (“lsqnonlin”,“算法”,“levenberg-marquardt”);选择= optimoptions(选择,“MaxIterations”1 e4);%推荐选择。米一个xIterations = 1e4;%不推荐
不从文件加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。
通常,如果您指定一个选项不支持,在代码生成选项是默默地忽略。金宝app然而,如果你指定一个情节或输出函数通过使用点符号,代码生成可以发出一个错误。对于可靠性、指定仅支持选项。金宝app
因为输出函数和情节功能不支持,解决不返回退出标志1。金宝app
例如,看到的为lsqcurvefit或lsqnonlin生成代码。
自动并行支持金宝app
加速代码通过自动运行并行计算使用并行计算工具箱™。
版本历史
之前介绍过的R2006aR2023a:线性和非线性约束的支持金宝app
lsqcurvefit
收益支持线性金宝app和非线性约束。要启用约束满足,解算器使用“内点”
算法从fmincon
。
如果您指定约束但不指定一个算法,解算器自动切换到
“内点”
算法。如果你指定约束和一个算法,你必须指定
“内点”
算法。
算法的细节,请参阅修改fmincon约束最小二乘算法。例如,看到的比较lsqnonlin和fmincon约束非线性最小二乘法。
Apri esempio
如果dispone di una versione modificata di questo esempio。Desideri aprire questo esempio con le modifiche星期二吗?
第一MATLAB
海脂肪clic苏联合国collegamento切corrisponde questo第一MATLAB:
Esegui il第一inserendolo所以nella隙缝di第一MATLAB。我浏览器web非supportano金宝app comandi MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。