1个回答
展开全部
matlab 非线性的拟合有两个命令lsqcurvefit和lsqnonlin。这里用lsqcurvefit(lsqnonlin一样做),先介绍下lsqcurvefit(原理是最小二乘法)
已知数据点:xdata=(xdata1,xdata2,…,xdatan)
ydata=(ydata1,ydata2,…,ydatan)
lsqcurvefit用以求含参量x(向量)的向量值函数
F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T
中的参变量x(向量),使得1/2*∑[a+b*exp(-0.02*k*t(i))-c(i)]^2最小
1.先定义个函数fun
function y=fun(x,tdata)
y=x(1)*gamma(1-x(2))*gamma(x(2))*cos(x(2)*pi/2)*(x(3)*tdata).^x(2);
保存一下
2调用解题
clc
x0=[0.05 0.1 0.05];
tdata=[0.06283 0.08118 0.1048 0.13534 0.17486 0.22581 0.29166];
ydata=[0.02797 0.04477 0.06839 0.101 0.145 0.2 0.27];
x=lsqcurvefit('fun',x0,tdata,ydata)
结果x =0.1163 1.3353 4.1766 即分别是A,n,B
*****有一个地方x0=[0.05 0.1 0.05];这边是x0迭代的初始值即A,n,B迭代的初始值,你可以自己修改一下(根据建的模型,找你认为近似的解或可行解带入可以提高结果精度)初始值的不同对A和B有影响,但n基本不变
已知数据点:xdata=(xdata1,xdata2,…,xdatan)
ydata=(ydata1,ydata2,…,ydatan)
lsqcurvefit用以求含参量x(向量)的向量值函数
F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T
中的参变量x(向量),使得1/2*∑[a+b*exp(-0.02*k*t(i))-c(i)]^2最小
1.先定义个函数fun
function y=fun(x,tdata)
y=x(1)*gamma(1-x(2))*gamma(x(2))*cos(x(2)*pi/2)*(x(3)*tdata).^x(2);
保存一下
2调用解题
clc
x0=[0.05 0.1 0.05];
tdata=[0.06283 0.08118 0.1048 0.13534 0.17486 0.22581 0.29166];
ydata=[0.02797 0.04477 0.06839 0.101 0.145 0.2 0.27];
x=lsqcurvefit('fun',x0,tdata,ydata)
结果x =0.1163 1.3353 4.1766 即分别是A,n,B
*****有一个地方x0=[0.05 0.1 0.05];这边是x0迭代的初始值即A,n,B迭代的初始值,你可以自己修改一下(根据建的模型,找你认为近似的解或可行解带入可以提高结果精度)初始值的不同对A和B有影响,但n基本不变
追问
椭圆一般方程:ax^2+b*y^2+cx+dy+exy+f=0;已知一些x,y离散点,如何估计参数a b c d e f?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询