作业帮 > 综合 > 作业

matlab 已知x、y值以及函数,求未知参数

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 20:04:36
matlab 已知x、y值以及函数,求未知参数
已知 x=[0.0015 0.0073 0.0125 0.0415 0.0725 0.1030 0.1323 0.1607 0.1879 0.2141 0.2392 0.2632 0.2862 0.3081 0.3291]
y=[-2.8988 -0.1635 0.0122 0.0174 0.0181 0.0176 0.0170 0.0164 0.0159 0.0153 0.0146 0.0140 0.0134 0.0129 0.0125]
函数y=(a+b*x^m)*(1-x)^n
请问如何用matlab拟合求出方程中的位置参数a、b、m、n?
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,t)
y=(x(1)+x(2)*t.^x(3)).*(1-t).^x(4);
2.调用
clc
clear
tdata=[0.0015 0.0073 0.0125 0.0415 0.0725 0.1030 0.1323 0.1607 0.1879 0.2141 0.2392 0.2632 0.2862 0.3081 0.3291];
ydata=[-2.8988 -0.1635 0.0122 0.0174 0.0181 0.0176 0.0170 0.0164 0.0159 0.0153 0.0146 0.0140 0.0134 0.0129 0.0125];
x0=[1 1 1 1];
x=lsqcurvefit('fun',x0,tdata,ydata)
结果a =-12.4986 b =31.6477 m =0.2062
n =250.3035
*****有一个地方x0=[1 1 1 1];这边是x0迭代的初始值即a,b,m,n迭代的初始值,你可以自己修改一下(根据建的模型,找你认为近似的解或可行解带入可以提高结果精度)初始值的不同对解有点影响,但不大