
matlab程序设计:题目:设已有数学模型t=an^2+bn,数据(n,t)的十个观测值分别为:
n为0 1141 2019 2760 3413 4004 4545 5051 5525 6061 ,使用最小二乘法原理估计a,b的值,写出主要的数学推导公式,程序和最后的结果。 奥有源代码,方法,不凑,结果,设计方案谢谢了。 展开
解题过程参看下面的图。图中的点是原始数据点,线是拟合后的曲线。
下面给出代码:
%以下是Matlab代码:
t=[0 20 40 60 80 100 120 140 160 184];
n=[0 1141 2019 2760 3413 4004 4545 5051 5525 6061];
A=[sum(n.^4),sum(n.^3);sum(n.^3),sum(n.^2)];
B=[sum(t.*n.^2);sum(t.*n)];
x=A\B;
a=x(1)
b=x(2)
t_fit=a*n.^2+b*n;
plot(n,t,'r*',n,t_fit);
xlabel('n'); ylabel('t');
legend('source data','fitting data')
最后得到结果:
a = 2.6113e-006
b = 0.0145
当然你也可以参照一楼的matlab程序,他是直接调用系统的多项式拟合函数。
另外,还可以这样:
AA=[n.^2;n]';
BB=t';
xx=AA\BB;
aa=xx(1)
bb=xx(2)
结果也是一样的。这个很简洁,但很有技巧,你看一下AA,BB的构造。
xx=AA\BB可以求解长方阵的逆。
x=[0 1141 2019 2760 3413 4004 4545 5051 5525 6061];
t=[0 20 40 60 80 100 120 140 160 184];
n=2;
plot(x,t)
axis ([0 6000 0 200])
hold on
p=polyfit(x,t,n);
p=double(p);
xi=linspace(0,6000,100);
yi=polyval(p,xi);
p
plot(xi,yi,'r');
hold on
plot(x,0.0000026*x.^2+0.0145*x,'.')
xlabel('x'),ylabel('t')
title('函数拟合')
运行结果为
p =
0.00000261230593 0.01452185158817 0.01445324226522
舍去常数项
则a=0.00000261230593 b=0.01452185158817