目前手中有很多组数据,暂且拿一组举例:
已知:
x =[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5];
y =[1274.4,1261.97,1250.14,1232.4,1212.7,1183.1,1153.5,1114.1,1069.7,1025.4,980.6,909.8,828.4,708,534.5,80.2];
曲线符合的公式是:y=b(1)*(1+b(2)*x+b(3)*x.^2).^b(4);
要求:用matlab拟合出系数b(1),b(2),b(3),b(4)的值。
我已经编写了两组程序,但是运行结果都不理想,出现了复数,误差很大,而且并不知道错在哪里
程序一:
x=[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5]';
y=[1274.4, 1262.0, 1250.1, 1232.4, 1212.7, 1183.1, 1153.5, 1114.1, 1069.7, 1025.4, 980.6, 909.8, 828.4, 708.0, 534.5, 80.2]';
fun=inline('b(1)*(1+b(2)*x+b(3)*x.^2).^b(4)','b','x');
b0=[10,0.01,0.001,0.001];
[x,resnorm]=lsqcurvefit(fun,b0,x,y)
程序二:
1.新建M文件
function f=lsqcurvefun(b,x)
f=b(1)*(1+b(2)*x+b(3)*x.^2).^b(4);
2.输入命令
x=[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5]';
y=[1274.4, 1262.0, 1250.1, 1232.4, 1212.7, 1183.1, 1153.5, 1114.1, 1069.7, 1025.4, 980.6, 909.8, 828.4, 708.0, 534.5, 80.2]';
b0=[1,0.01,0.001,0.001];
x=lsqcurvefit('lsqcurvefun',b0,x,y)
2009-7-15 23:07 上传
点击文件名下载附件
30.54 KB, 下载次数: 3280