lsqnonlin
解决非线性最小二乘(非线性数据拟合)的问题
语法
描述
非线性最小二乘解算器
解决了非线性最小二乘曲线拟合问题的形式
受约束
x,磅
,乌兰巴托
可以是向量或矩阵;看到矩阵的参数。
没有指定目标函数作为标量值吗
(平方和)。lsqnonlin
需要的目标函数向量价值函数
例子
适合一个简单的指数
一个简单的指数衰减曲线数据。
生成数据从一个指数衰减模型+噪音。模型是
与 从0到3, 正态分布噪声均值为0和0.05标准差。
rng默认的%的再现性d = linspace (0, 3);y = exp (-1.3 * d) + 0.05 * randn(大小(d));
问题是:考虑到数据(d
,y
),找到最适合的指数衰减率数据。
创建一个匿名函数,需要一个值的指数衰减率 并返回一个向量的差异与衰变速率和数据模型。
有趣= @ (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)”)
绑定约束的问题
找到最佳拟合模型时的一些合适的参数范围。
找到一个定心 和扩展 最适合的函数
标准正态密度,
创建一个向量t
的数据点,这些点和相应的正常密度。
t = linspace (4, 4);y = 1 /√(2 *π)* exp (- t ^ 2/2);
创建一个函数评估之间的差异的集中和缩放功能正常y
,x (1)
作为比例
和x (2)
随着定心
。
有趣= @ (x) x (1) * exp (- t)。* exp (exp(-(时距(2))))- y;
找到最优适应从x0
=(1/2,0)
,扩展
在1/2和3/2,定心
在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”)传说(“正常密度”,的拟合函数)
与线性约束最小二乘法
考虑下面的目标函数,一个平方和:
这个目标函数的代码的出现myfun
函数在这个例子。
这个函数的线性约束最小化 。写这个约束 。
一个= [1 1/2];b = 0;
实施范围 , , , 。
磅= [0 0];乌兰巴托= 2 [4];
从点开始优化过程x0 = (0.3 - 0.4)
。
x0 = (0.3 - 0.4);
没有线性等式约束的问题。
Aeq = [];说真的= [];
运行优化。
x = lsqnonlin (@myfun x0,磅,乌兰巴托,A, b, Aeq, beq)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×20.1695 - 0.3389
函数F = myfun (x) k = 1:10;F = 2 + 2 * k - exp (k * x (1)) - 2 * exp (2 * k * (x (2) ^ 2));结束
非线性最小二乘法和非线性约束
考虑下面的目标函数,一个平方和:
这个目标函数的代码的出现myfun
函数在这个例子。
这个函数的非线性约束最小化
。这个非线性约束函数的代码的出现nlcon
函数在这个例子。
实施范围 , , , 。
磅= [0 0];乌兰巴托= 2 [4];
从点开始优化过程x0 = (0.3 - 0.4)
。
x0 = (0.3 - 0.4);
这个问题没有线性约束。
一个= [];b = [];Aeq = [];说真的= [];
运行优化。
x = lsqnonlin (@myfun x0,磅,乌兰巴托,A, b, Aeq,说真的,@nlcon)
局部最小值。约束满足。fmincon停止因为当前步骤的大小小于一步尺寸公差的值和约束满足约束的值公差内。
x =1×20.2133 - 0.3266
函数F = myfun (x) k = 1:10;F = 2 + 2 * k - exp (k * x (1)) - 2 * exp (2 * k * (x (2) ^ 2));结束函数测查[c] = nlcon测查(x) = [];c = sin (x (1)) - cos (x (2));结束
非线性最小二乘非默认选项
比较的结果时使用不同的数据拟合问题lsqnonlin
算法。
假设你有观察的时间数据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) 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”
算法。
选项。一个lgorithm =“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标题(“指数适合数据”)传说(“数据”,“指数符合”)举行从
非线性最小二乘解和残留标准
找到 ,最大限度地减少
,
并找到最小平方和的价值。
因为lsqnonlin
假设平方和没有显式地形成的用户定义的函数,函数传递给lsqnonlin
应该计算向量值函数
,
为 来 (即, 应该有 组件)。
的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
和你想找到参数
和
适合的模型形式
输入的观察时间和响应。
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 Resnorm一步最优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消息:当地最低可能....“bestfeasible: [] constrviolation: []
相比之下,设置算法
选项“levenberg-marquardt”
。
选项。一个lgorithm =“levenberg-marquardt”;[x, resnorm残留,exitflag,输出]= lsqnonlin(有趣,x0,[]、[]选项);
一阶范数的迭代Func-count Resnorm最优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.0094431 9 42 243568 5.66 e + 04 100000 0.0082162 243424 1.61 e + 45 04 10000 0.00777935 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.07043 5.23 e-05 1 e-05 e-05局部最小值。lsqnonlin停止因为当前步骤的相对大小小于步长值的宽容。
的“levenberg-marquardt”
聚合用更少的迭代,但几乎尽可能多的功能评估:
输出
输出=结构体字段:迭代:19 funcCount: 72 stepsize: 5.0704 e-05 cgiterations: [] firstorderopt: 5.2319 e-05算法:“levenberg-marquardt”的信息:“局部最小值可能....“bestfeasible: [] constrviolation: []
输入参数
有趣的
- - - - - -函数的平方和最小化
函数处理|函数的名字
函数的平方和最小化,指定为一个函数处理或一个函数的名称。为“内点”
算法,有趣的
必须是一个函数处理。有趣的
是一个函数,它接受一个数组x
并返回一个数组F
的目标函数值x
。
请注意
平方和不应显式地形成的。相反,你的函数应该返回一个矢量函数的值。看到例子。
这个函数有趣的
可以指定一个函数处理一个文件:
x = lsqnonlin (x0 @myfun)
在哪里myfun
MATLAB是一种®等功能
函数F = myfun F (x) =…在x %计算函数值
有趣的
也可以是一个函数处理为一个匿名函数。
x = lsqnonlin (@ (x) sin (x) * x), x0);
lsqnonlin
通过x
你的目标函数的形状x0
论点。例如,如果x0
是5-by-3数组,那么lsqnonlin
通过x
来有趣的
作为一个5-by-3数组。
如果还可以计算雅可比矩阵和的“SpecifyObjectiveGradient”
选择是真正的
设定的,
选择= optimoptions (“lsqnonlin”,“SpecifyObjectiveGradient”,真正的)
然后函数有趣的
必须返回第二个输出参数与雅可比矩阵值J
(矩阵)x
。通过检查的价值nargout
,该函数可以避免计算J
当有趣的
就是只有一个输出参数(的情况下优化算法只需要的价值F
但不是J
)。
函数F [J] = myfun F (x) =…在x %目标函数值如果nargout > 1%两个输出参数J =…在x %雅可比矩阵函数的评估结束
如果有趣的
返回一个数组的米
组件和x
有n
元素,n
元素的数量吗x0
,雅可比矩阵J
是一个米
——- - - - - -n
矩阵J (i, J)
的偏导数是吗F(我)
关于x (j)
。(雅可比矩阵J
的梯度的转置F
。)
例子:@ (x), cos (x)。* exp (- x)
数据类型:字符
|function_handle
|字符串
x0
- - - - - -初始点
真正的向量|真正的数组
磅
- - - - - -下界
真正的向量|真正的数组
下界,指定为一个真正的向量或真正的数组。如果元素的数量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
。lsqnonlin
试图满足c (x) < = 0
所有条目的c
。(1) 量表(x)
是非线性等式约束的数组x
。lsqnonlin
试图满足量表(x) = 0
所有条目的量表信
。(2)
例如,
x = lsqnonlin (@myfun x0,磅,乌兰巴托,A, b, Aeq,说真的,@mycon,选项)
在哪里mycon
是一个MATLAB函数如
函数测查[c] = mycon c (x) =…%计算非线性不等式在x。量表信=…在x %计算非线性等式。
SpecifyConstraintGradient
选择是真正的
设定的,选择= optimoptions (”、“SpecifyConstraintGradient”,真的)
nonlcon
还必须返回,在第三和第四输出参数,GC
的雅可比矩阵c (x)
,GCeq
的雅可比矩阵量表(x)
。雅可比矩阵G(x一个矢量函数的)F(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 (“lsqnonlin”、“FiniteDifferenceType”,“中央”)
问题
- - - - - -问题的结构
结构
问题的结构,指定为一个结构有以下字段:
字段名 | 条目 |
---|---|
|
目标函数 |
|
初始点x |
|
矩阵线性不等式约束 |
|
向量的线性不等式约束 |
|
矩阵线性等式约束 |
|
向量的线性等式约束 |
磅 |
向量的下界 |
乌兰巴托 |
向量的上界 |
|
非线性约束函数 |
|
“lsqnonlin” |
|
选择创建optimoptions |
你必须提供至少客观的
,x0
,解算器
,选项
字段问题
结构。
数据类型:结构体
输出参数
resnorm
——平方剩余的规范
负的真实
平方剩余的规范,作为非负的实际返回。resnorm
剩余的平方2-norm吗x
:sum(有趣的(x) ^ 2)
。
剩余
——目标函数在解决方案的价值
数组
值目标函数的解决方案,作为一个数组返回。一般来说,剩余(x) =乐趣
。
exitflag
——原因解决者停止了
整数
原因,解算器停止,返回一个整数。
|
功能融合解决方案 |
|
的变化 |
|
剩余的变化小于指定的公差。 |
|
相对大小的搜索方向是公差小于一步。 |
|
迭代次数超过 |
|
一个函数或输出函数停止解决者的阴谋。 |
|
发现不可行点。范围 |
输出
——优化过程的信息
结构
优化过程的信息,作为结构返回字段:
firstorderopt |
的一阶最优性 |
迭代 |
采取的迭代次数 |
funcCount |
的数量评估函数 |
cgiterations |
PCG迭代(总数 |
stepsize |
最终位移 |
constrviolation |
最大的约束函数( |
bestfeasible |
遇到的最好的(最低目标函数)可行点(
如果没有找到可行点, |
算法 |
优化算法 |
消息 |
退出消息 |
雅可比矩阵
解决方案-雅可比矩阵
真正的矩阵
雅可比矩阵的解决方案,作为一个真正的返回矩阵。雅可比矩阵(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
小到中等规模的问题,没有计算雅可比矩阵有趣的
或提供雅可比矩阵稀疏模式。(这也适用于使用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约束最小二乘算法。
选择功能
应用程序
的优化住编辑任务提供了一个可视化界面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年。
扩展功能
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
lsqnonlin
收益支持线性金宝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国家网站不优化的访问你的位置。