非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x,xdata),但不知道系数向量x。进行曲线拟合,求x,使得下式成立:
在MATLAB 5.x中,使用函数lsqcurvefit解决这类问题。
函数lsqcurvefit格式:
参数说明:
x0为初始解向量;
xdata,ydata为满足关系ydata=F(x,xdata)的数据;
lb,ub为解向量的下界和上界,lb≤x≤ub,若没有指定界限,则lb=[ ],ub=[ ];
options为指定的优化参数;
fun为拟合函数,其定义为x=lsqcurvefit(@myfun,x0,xdata,ydata),其中myfun已定义为function F=myfun(x,xdata),计算x处拟合函数值fun的用法与前面的相同;
resnorm=sum((fun(x,xdata)-ydata).^2),即在x处残差的平方和;
resnorm=fun(x,xdata)-ydata,即在x处的残差;
exitflag为终止迭代的条件;
output为输出的优化信息;(www.daowen.com)
lambda为解x处的拉格朗日乘子;
jacobian为解x处拟合函数fun的Jacobian矩阵。
例5.21 求解如下最小二乘非线性拟合问题。
已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为
ydata(i)=x(1)·xdata(i)2+x(2)·sin(xdata(i))+x(3)·xdata(i)3
即目标函数为
其中,
初始解向量为x0=[0.3,0.4,0.1]。
解:先建立拟合函数文件,并保存为myfun.m:
然后给出数据xdata和ydata:
结果为:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。