主要内容

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 x 乌兰巴托 一个 x b Aeq x = 说真的 c ( x ) 0 量表信 ( x ) = 0。

的参数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,,乌兰巴托,一个,b,Aeq,说真的)约束的解决方案满足线性约束

一个xb

Aeqx=说真的。

例子

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

c≤0

量表信= 0。

例子

x= lsqcurvefit (有趣的,x0,xdata,ydata,,乌兰巴托,选项)x= lsqcurvefit (有趣的,x0,xdata,ydata,,乌兰巴托,一个,b,Aeq,说真的,nonlcon,选项)最小化的优化选项中指定选项。使用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线类型的对象。一个或多个行显示的值只使用这些对象标记表示数据,拟合指数。

创建人工数据的非线性模型 y = 一个 + b 反正切 ( t - - - - - - t 0 ) + c t 与参数 一个 , b , t 0 , c ,因为时间 t 从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。

  • x 1 + x 2 x 3 + x 4 。你可以写这个约束的形式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 -”)

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。一个或多个行显示的值只使用标记

返回的解决方案与数据匹配很好。约束活跃吗?

* 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;结束

创建人工数据的非线性模型 y = 一个 + b 反正切 ( t - - - - - - t 0 ) + c t 与参数 一个 , b , t 0 , c ,因为时间 t 从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。

  • x 1 2 + x 2 2 4 2

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 -”)

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。一个或多个行显示的值只使用标记

测查[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和你想找到参数 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.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 -”)传说(“数据”,的拟合指数)标题(的数据和拟合曲线)

图包含一个坐标轴对象。坐标轴对象与标题数据和拟合曲线包含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, xdata),而不是平方和总和(乐趣(x, xdata) -ydata) ^ 2)。lsqcurvefit隐式计算的组件的平方和有趣的(x, xdata) -ydata。看到例子

这个函数有趣的可以指定作为一个函数的函数处理文件:

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);

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

如果有趣的返回一个向量(矩阵)组件和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))

数据类型:

线性不等式约束,指定为一个真正的矩阵。一个是一个——- - - - - -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)非线性不等式约束的数组xlsqcurvefit试图满足

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

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

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

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

SubproblemAlgorithm

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

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

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

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

字段名 条目

客观的

目标函数

x0

初始点x

xdata

目标函数的输入数据

ydata

输出数据匹配的目标函数

Aineq

矩阵线性不等式约束

bineq

向量的线性不等式约束

Aeq

矩阵线性等式约束

说真的

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

nonlcon

非线性约束函数

解算器

“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

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,至少是大数量的变量。在欠定的情况下,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

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

扩展功能

版本历史

之前介绍过的R2006a

全部展开