Matlab中的lsqcurvefit,非线性拟合

非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(a, xdata),但不知道系数向量a。今进行曲线拟合,求a使得输出的如下最小二乘表达式成立:min Σ(F(a,xdatai)-ydatai)^2, 在matlab中需要使用非线性曲线拟合函数lsqcurvefit来进行拟合。

 函数  lsqcurvefit

 格式  x = lsqcurvefit(fun,a0,xdata,ydata)

x = lsqcurvefit(fun,a0,xdata,ydata,lb,ub)

x = lsqcurvefit(fun,a0,xdata,ydata,lb,ub,options)

[x,resnorm] = lsqcurvefit(…)

[x,resnorm,residual] = lsqcurvefit(…)

[x,resnorm,residual,exitflag] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(…)

参数说明:

a0为初始解向量, 因为求解是一个迭代的过程,需要先给定一个初始参数,再逐步修改参数的过程。所以要对a0初始化,一般而言,可以随机,但是经验上取与解接近的值会提高计算速度。

xdata,ydata为满足关系ydata=F(a, xdata)的数据;

lb、ub为解向量的下界和上界lb≤a≤ub,若没有指定界,则lb=[ ],ub=[ ];

options为指定的优化参数;

fun为待拟合函数,计算x处拟合函数值,其定义为     function F = myfun(a,xdata)

resnorm=sum ((fun(a,xdata)-ydata).^2),即在a处残差的平方和;

residual=fun(a,xdata)-ydata,即在x处的残差;

exitflag为终止迭代的条件;

output为输出的优化信息;

lambda为解x处的Lagrange乘子;

jacobian为解x处拟合函数fun的jacobian矩阵。

例 求解如下最小二乘非线性拟合问题

已知输入向量xdata和输出向量ydata,且长度都是n,待拟合函数的表达式为

ydata(i)=x(1)-xdata(i)^2+x(2)-sin(xdata(i))+x(3)-xdata^3

即目标函数为min Σ(F(a,xdata(i))-ydata(i))^2

其中:F(a,xdata) = a(1)*xdata^2 +a(2)*sin(xdata) + a(3)*xdata^3

初始解向量为a0=[0.3, 0.4, 0.1],即表达式的 个参数[a(1),a(2),a(3)]。

解:先建立拟合函数文件,并保存为myfun.m

function F = myfun(a,xdata)

F = a(1)*xdata.^2 + a(2)*sin(xdata) + a(3)*xdata.^3;

然后给出数据xdata和ydata

>>xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];

>>ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];

>>a0 = [10, 10, 10];    %初始估计值

>>[a,resnorm] = lsqcurvefit(@myfun,a0,xdata,ydata)

结果为:

Optimization terminated successfully:

Relative function value changing by less than OPTIONS.TolFun

a = 0.2269    0.3385    0.3021

=>即解出的系数最优估计值

resnorm =      6.2950

=>在a解值处的目标最小二乘表达式值。即所谓残差。

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值