主要内容

lsqnonlin

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

描述

非线性最小二乘解算器

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

最小值 x f ( x ) 2 2 = 最小值 x ( f 1 ( x ) 2 + f 2 ( x ) 2 + + f n ( x ) 2 )

受约束

x x 乌兰巴托 一个 x b Aeq x = 说真的 c ( x ) 0 量表信 ( x ) = 0。

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

没有指定目标函数作为标量值吗 f ( x ) 2 2 (平方和)。lsqnonlin需要的目标函数向量价值函数

f ( x ) = ( f 1 ( x ) f 2 ( x ) f n ( x ) ]

例子

x= lsqnonlin (有趣的,x0)开始的时候x0并找到最低的平方和函数描述有趣的。这个函数有趣的应该返回一个向量(或数组)的值,而不是值的平方和。(隐式算法计算组件的平方和有趣的(x)。)

请注意

传递额外的参数解释如何通过额外的参数向量函数有趣的(x),如果必要的。

例子

x= lsqnonlin (有趣的,x0,,乌兰巴托)定义了一组设计变量的上下界限x,这样的解决方案总是范围x乌兰巴托。你可以修复解决方案组件x(我)通过指定磅(i) =乌兰巴托(我)

请注意

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

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

例子

x= lsqnonlin (有趣的,x0,,乌兰巴托,一个,b,Aeq,说真的)约束的解决方案满足线性约束

一个xb

Aeqx=说真的。

例子

x= lsqnonlin (有趣的,x0,,乌兰巴托,一个,b,Aeq,说真的,nonlcon)约束满足的非线性约束的解决方案nonlcon(x)函数。nonlcon返回两个输出,c量表信。解算器试图满足约束条件

c≤0

量表信= 0。

例子

x= lsqnonlin (有趣的,x0,,乌兰巴托,选项)x= lsqnonlin (有趣的,x0,,乌兰巴托,一个,b,Aeq,说真的,nonlcon,选项)最小化的优化选项中指定选项。使用optimoptions设置这些选项。通过空矩阵乌兰巴托和其他输入参数,如果参数不存在。

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

例子

(x,resnorm)= lsqnonlin (___),对于任何输入参数,返回的值的平方2-norm剩余的x:sum(有趣的(x) ^ 2)

例子

(x,resnorm,剩余,exitflag,输出)= lsqnonlin (___)此外返回剩余的价值有趣的(x)在解决方案x,一个值exitflag描述退出条件和结构输出包含的信息优化过程。

(x,resnorm,剩余,exitflag,输出,λ,雅可比矩阵)= 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 并返回一个向量的差异与衰变速率和数据模型。

有趣= @ (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, ylabel exp (tx)包含2线类型的对象。一个或多个行显示的值只使用这些对象标记表示数据,最适合。

找到最佳拟合模型时的一些合适的参数范围。

找到一个定心 b 和扩展 一个 最适合的函数

一个 经验值 ( - - - - - - t ) 经验值 ( - - - - - - 经验值 ( - - - - - - ( t - - - - - - b ) ) )

标准正态密度,

1 2 π 经验值 ( - - - - - - t 2 / 2 )

创建一个向量t的数据点,这些点和相应的正常密度。

t = linspace (4, 4);y = 1 /√(2 *π)* exp (- t ^ 2/2);

创建一个函数评估之间的差异的集中和缩放功能正常y,x (1)作为比例 一个 x (2)随着定心 b

有趣= @ (x) x (1) * exp (- t)。* exp (exp(-(时距(2))))- y;

找到最优适应从x0=(1/2,0),扩展 一个 在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 -”)包含(“t”)传说(“正常密度”,的拟合函数)

图包含一个坐标轴对象。坐标轴对象包含t包含2线类型的对象。这些对象代表正常密度拟合函数。

考虑下面的目标函数,一个平方和:

k = 1 1 0 ( 2 + 2 k + 经验值 ( k x 1 ) + 2 经验值 ( 2 k x 2 2 ) ) 2

这个目标函数的代码的出现myfun函数在这个例子

这个函数的线性约束最小化 x 1 x 2 2 。写这个约束 x 1 - - - - - - x 2 2 0

一个= [1 1/2];b = 0;

实施范围 x 1 0 , x 2 0 , x 1 2 , x 2 4

磅= [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));结束

考虑下面的目标函数,一个平方和:

k = 1 1 0 ( 2 + 2 k + 经验值 ( k x 1 ) + 2 经验值 ( 2 k x 2 2 ) ) 2

这个目标函数的代码的出现myfun函数在这个例子

这个函数的非线性约束最小化 ( x 1 ) 因为 ( x 2 ) 。这个非线性约束函数的代码的出现nlcon函数在这个例子

实施范围 x 1 0 , x 2 0 , x 1 2 , x 2 4

磅= [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和你想找到参数 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) 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标题(“指数适合数据”)传说(“数据”,“指数符合”)举行

图包含一个坐标轴对象。坐标轴标题指数适合数据对象,包含xdata, ylabel ydata包含2线类型的对象。一个或多个行显示的值只使用这些对象标记表示数据,指数。

找到 x ,最大限度地减少

k = 1 1 0 ( 2 + 2 k - - - - - - e k x 1 - - - - - - e k x 2 ) 2 ,

并找到最小平方和的价值。

因为lsqnonlin假设平方和没有显式地形成的用户定义的函数,函数传递给lsqnonlin应该计算向量值函数

F k ( x ) = 2 + 2 k - - - - - - e k x 1 - - - - - - e k x 2 ,

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

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和你想找到参数 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) 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)

在哪里myfunMATLAB是一种®等功能

函数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 %雅可比矩阵函数的评估结束

如果有趣的返回一个数组的组件和xn元素,n元素的数量吗x0,雅可比矩阵J是一个——- - - - - -n矩阵J (i, J)的偏导数是吗F(我)关于x (j)。(雅可比矩阵J的梯度的转置F。)

例子:@ (x), cos (x)。* exp (- x)

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

初始点,指定为一个真正的向量或真正的数组。解决使用中元素的数量x0和的大小x0确定变量的数量和大小有趣的接受。

例子:x0 = (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编码线性不等式

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是一个——- - - - - -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是一个函数,它接受一个向量或数组x并返回两个数组,c (x)量表(x)

  • c (x)非线性不等式约束的数组xlsqnonlin试图满足

    c (x) < = 0所有条目的c (1)
  • 量表(x)是非线性等式约束的数组xlsqnonlin试图满足

    量表(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)是

G , j ( x ) = F ( x ) x j

GCGCeq可以稀疏或密集。如果GCGCeq大,相对较少的非零项,节省运行时间和内存的“内点”代表他们是稀疏矩阵算法。有关更多信息,请参见非线性约束

数据类型:function_handle

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

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

有些选项是缺席的optimoptions显示。这些选项出现在以下表中斜体。有关详细信息,请参见视图的优化选择

所有的算法

算法

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

算法选项指定偏爱使用何种算法。它仅仅是一个偏好,因为每个算法必须满足一定的条件下使用。trust-region-reflective算法,元素的数量F返回的有趣的必须至少多达的长度x

“内点”算法是唯一的算法,可以解决线性或非线性约束问题。如果你在你的问题包括这些约束,不指定一个算法,解算器自动切换到“内点”算法。的“内点”算法的修改版本fmincon“内点”算法。

选择算法的更多信息,见选择算法

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“trust-region-reflective”算法,200 * numberOfVariables“levenberg-marquardt”算法,3000年“内点”算法。看到公差和停止条件迭代和函数计算

optimset,名字是MaxFunEvals。看到当前和遗留选项名称

MaxIterations

最大允许的迭代次数,一个正整数。默认值是400年“trust-region-reflective”“levenberg-marquardt”算法,以及1000年“内点”算法。看到公差和停止条件迭代和函数计算

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“trust-region-reflective”“levenberg-marquardt”算法,以及1平台以及“内点”算法。看到公差和停止条件

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

的雅可比矩阵有时可以改善收敛了不佳的问题;默认值是“没有”

内点算法
BarrierParamUpdate

指定如何fmincon参数(见更新障碍fmincon内点算法)。的选项是:

  • “单调”(默认)

  • 预估的

这个选项会影响速度和收敛的解算器,但效果并不容易预测。

ConstraintTolerance

公差约束违反,积极的标量。默认值是1 e-6。看到公差和停止条件

optimset,名字是TolCon。看到当前和遗留选项名称

InitBarrierParam

最初的障碍价值,积极的标量。有时它可能有助于尝试一个高于默认值0.1,尤其是在目标或约束函数是大。

SpecifyConstraintGradient

梯度的非线性约束函数定义的用户。当设置为默认值,,lsqnonlin估计梯度非线性约束的有限的差异。当设置为真正的,lsqnonlin预计,约束函数有四个输出,所述nonlcon

optimset,名字是GradConstr和值“上”“关闭”。看到当前和遗留选项名称

SubproblemAlgorithm

确定迭代步骤是如何计算的。默认的,“分解”,通常是速度比“重心”不过,(共轭梯度)“重心”密集的麻布可能更快的大问题。看到fmincon内点算法

optimset的值是“重心”“ldl-factorization”。看到当前和遗留选项名称

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

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

字段名 条目

客观的

目标函数

x0

初始点x

Aineq

矩阵线性不等式约束

bineq

向量的线性不等式约束

Aeq

矩阵线性等式约束

说真的

向量的线性等式约束
向量的下界
乌兰巴托 向量的上界

nonlcon

非线性约束函数

解算器

“lsqnonlin”

选项

选择创建optimoptions

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

数据类型:结构体

输出参数

全部折叠

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

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

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

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

1

功能融合解决方案x

2

的变化x小于指定的公差,或雅可比矩阵x是未定义的。

3

剩余的变化小于指定的公差。

4

相对大小的搜索方向是公差小于一步。

0

迭代次数超过options.MaxIterations超过或数量的功能评估options.MaxFunctionEvaluations

1

一个函数或输出函数停止解决者的阴谋。

2

发现不可行点。范围乌兰巴托解决不一致,或者停在一个不可行点。

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

firstorderopt

的一阶最优性

迭代

采取的迭代次数

funcCount

的数量评估函数

cgiterations

PCG迭代(总数“trust-region-reflective”“内点”算法)

stepsize

最终位移x

constrviolation

最大的约束函数(“内点”算法)

bestfeasible

遇到的最好的(最低目标函数)可行点(“内点”算法)。与这些字段的结构:

  • x

  • fval

  • firstorderopt

  • constrviolation

如果没有找到可行点,bestfeasible字段是空的。为了这个目的,一个点是可行的,当约束函数的最大不超过options.ConstraintTolerance

bestfeasible点可以从返回的不同解决方案x因为各种各样的原因。例如,看到的获得最佳可行点

算法

优化算法

消息

退出消息

拉格朗日乘数法在解决方案,作为结构返回字段:

较低的

下界对应

上界对应乌兰巴托

ineqlin

线性不等式对应一个b

eqlin

线性等式对应Aeq说真的

ineqnonlin

非线性不等式对应cnonlcon

eqnonlin

非线性平等对应量表信nonlcon

雅可比矩阵的解决方案,作为一个真正的返回矩阵。雅可比矩阵(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小到中等规模的问题,没有计算雅可比矩阵有趣的或提供雅可比矩阵稀疏模式。(这也适用于使用fminconfminunc没有计算黑森或提供黑森稀疏模式。)小到中等规模的有多小?没有绝对的答案是,这取决于虚拟内存的数量在你的电脑系统配置。

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

算法

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

“内点”算法使用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年。

扩展功能

版本历史

之前介绍过的R2006a

全部展开