matlab的lsqnonlin函数怎么用

 我来答
问明6E
高粉答主

2019-06-25 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.9万
展开全部

函数使用方法如下:

x=lsqnonlin(fun,x0)

x=lsqnonlin(fun,x0,lb,ub)

x=lsqnonlin(fun,x0,lb,ub,options)

[x,resnorm]=lsqnonlin(...)

[x,resnorm,residual]=lsqnonlin(...)

[x,resnorm,residual,exitflag]=lsqnonlin(...)

[x,resnorm,residual,exitflag,output]=lsqnonlin(...)

[x,resnorm,residual,exitflag,output,lambda]=lsqnonlin(...)[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(...)

注:

1、lsqnonlin解决非线性最小二乘法问题,包含非线性数据的拟合问题

2、fun函数包含返回值为一个向量,该向量包含了各个求和的分量(以便于找到使目标最小的可行解)。

3、各参数可做为常量在函数中事先给出,也可传递得到(参数表加到lsqnonlin的后面,当然除了调用时候系统会使用的反复迭代的参数)。

4、不选的可致空集。(其中初值一般要有。lb,ub,option可空,即【】)

扩展资料:

MATLAB实现

LSQNONLIN解决非线性最小二乘法问题,包括非线性数据拟合问题;LSQCURVEFIT解决非线性数据拟合问题,下面给出利用这两个函数的例子。

LSQNONLIN

下面的例子说明利用LSQNONLIN函数用下面的函数进行拟合:

f=A+Bexp(C*x)+D*exp(E*x)对数据集x与y进行拟合,其中y是在给定x的情况下的期望输出(可以是方程给出数组,也可以是单独数据组成的数组)。

为了解决这个问题,先建立下面的名为fit_simp.m的函数,它利用数据x与y,将它们作为优化输入参数传递给LSQNONLIN。利用给定的数据x计算f的值,再与原始数据y进行比较。经验值与实际计算出的值之间的差异作为输出值返回。LSQNOLIN函数就是最小化这些差的平方和。

functiondiff=fit_simp(x,X,Y)

A=x(1);B=x(2);C=x(3);D=x(4);E=x(5);

diff=A+B.*exp(C.*X)+D.*exp(E.*X)-Y;

下面的脚本是利用上面定义的fit_simp.m函数的一个例子:

>>X=0:.01:.5;

>>Y=2.0.*exp(5.0.*X)+3.0.*exp(2.5.*X)+1.5.*rand(size(X));

>>X0=[11111]';

>>options=optimset('Largescale','off');

>>x=lsqnonlin(@fit_simp,X0,[],[],options,X,Y);

Optimizationterminatedsuccessfully:

GradientinthesearchdirectionlessthantolFun

Gradientlessthan10*(tolFun+tolX)

>>Y_new=x(1)+x(2).*exp(x(3).*X)+x(4).*exp(x(5).*X);

>>plot(X,Y,'+r',X,Y_new,'b');

注意:LSQNONLIN只可以处理实数变量。在处理包括复数变量的实例的拟合的时候,数据集应该被切分成实数与虚数部分

参考资料:

百度百科——非线性数据拟合

莫道無情
2019-11-27 · TA获得超过1.5万个赞
知道答主
回答量:317
采纳率:100%
帮助的人:8.6万
展开全部

lsqnonlin函数使用方法:

1、lsqnonlin为非线性最小二乘函数

2、格式

最简单的调用格式为:x=lsqnonlin(@F,x0, v1,v2)

最复杂的调用格式为:[x,norm,res,ef,out,lam,jac] = lsqnonlin(@F,x0,v1,v2,opt,P1,P2, ... )

 x0为初始解(缺省时程序自动取x0=0); F给出目标函数的M文件,当Jacobian='on时必须给出其Jacobi矩阵,一般形式为:function [F,J] = Fun(x)。

扩展资料:

lsqnonlin输出变量的含义为:

1、 x : 最优解

2、 norm : 误差的平方和

3、res: 误差向量

4、 ef : 程序结束时的状态指示:

1)、 >0:收敛

2)、0:函数调用次数或迭代次数达到最大值(该值在options中指定)

3)、<0:不收敛

5、 out: 包含以下数据的一个结构变量

1)、funcCount 函数调用次数

2)、 iterations 实际迭代次数

3)、cgiterations 实际PCG迭代次数(大规模计算用)

4)、algorithm 实际使用的算法

5)、stepsize 最后迭代步长(中等规模计算用)

6)、firstorderopt 一阶最优条件满足的情况(大规模计算用)

6、 lam:上下界所对应的Lagrange乘子

7、 jac:结果(x点)处的雅可比矩阵

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lhmhz
高粉答主

推荐于2018-04-24 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17014

向TA提问 私信TA
展开全部

matlab的lsqnonlin()函数主要用于拟合非线性函数的系数,其处理方法是利用最小二乘法原理,使得函数的均方误差最小。

lsqnonlin()函数基本使用格式:

x = lsqnonlin(fun,x0,lb,ub,options)

x——使用迭代法搜索最优参数,x可以是一个变量,也可以是多个变量

fun——自定义函数,即非线性函数

x0——x变量的迭代初值

lb,ub——x值的上下限制值,即x值的范围设定,也可以是空矩阵【】

options—— 使用optimoptions设置选项,可以参照matlab的使用手册

使用实例:

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

fun = @(x)x(1)*exp(x(2)*xdata)-ydata;

x0 = [100,-1];
options = optimoptions(@lsqnonlin,'Algorithm','trust-region-reflective');
x = lsqnonlin(fun,x0,[],[],options)
运行结果

x =  498.8309   -0.1013    %即x1=498.8309,x2=-0.1013

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
强潍侨弘
2019-03-05 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:31%
帮助的人:820万
展开全部
matlab中lsqnonlin函数使用方法如下:
x
=
lsqnonlin(fun,x0)
x
=
lsqnonlin(fun,x0,lb,ub)
x
=
lsqnonlin(fun,x0,lb,ub,options)
[x,resnorm]
=
lsqnonlin(...)
[x,resnorm,residual]
=
lsqnonlin(...)
[x,resnorm,residual,exitflag]
=
lsqnonlin(...)
[x,resnorm,residual,exitflag,output]
=
lsqnonlin(...)
[x,resnorm,residual,exitflag,output,lambda]
=lsqnonlin(...)[x,resnorm,residual,exitflag,output,lambda,jacobian]=
lsqnonlin(...)
注:
1.lsqnonlin解决非线性最小二乘法问题,包含非线性数据的拟合问题
2.fun函数包含返回值为一个向量,该向量包含了各个求和的分量(以便于找到使目标最小的可行解)。
3.各参数可做为常量在函数中事先给出,也可传递得到(参数表加到lsqnonlin的后面,当然除了调用时候系统会使用的反复迭代的参数)。
4.不选的可致空集。(其中初值一般要有。lb,ub,option可空,即【】)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hello_world002
2018-04-24
知道答主
回答量:9
采纳率:0%
帮助的人:3826
展开全部

按照课本上的说法,isqnonlin主要用于求解非线性最小二乘(曲线拟合)问题。最一般的调用方法:

[x,norm,res,ef,out,lam,jac]=isqnonlin(@F,x0,v1,v2,opt,P1,P2,...)

左边是输出列表,右边是输入列表。

输出列表中参数的含义是:

x:目标函数F中的待定参数

norm:误差的平方

res:误差的向量

ef:程序停止运行的原因

out:一个结构变量,包含程序运行或停止时的一些信息

lam:上下界所对应的拉格朗日乘子

jac:结果(x点)处的雅可比矩阵

输入列表中参数的含义:

F:调用的函数

x0:迭代初值或有根区间

v1等:课本上没说我也不知道,一般写作[],意思是使用缺省值(默认值)

opt控制程序运行的参数,一般写作[],意思也是使用缺省值(默认值)

P1等:传递给F的参数(有需要的话)

以上就是isqnonlin的调用方法,最后再提醒大家,并不需要把所有的输入输出都写出来,只需要写出自己需要的就行。

举个例子(比如只想要x):

函数

function h=aabb(x)

h(1)=x(2)-x(1)^2;

h(2)=1-x(1);

命令行

x0=[2,2];

[x]=lsqnonlin(@aabb,x0)

结果为

1 .000   1.000

以上~

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式