数值分析实验报告3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称 平方逼近与最小二乘法
实验目的
(1)学习并熟练掌握MA TLAB 语言的编程; (2)学习最小二乘法及程序设计算法。 实验原理:
1,由题意决定span(1,x,x^2,…),即决定拟合多项式.
2.分别计算1
(,)(,)n
i j i
j
m k k k k ==
∑,1
(,)(,)n
i
i
j
m k y k y -
==∑
3.用(,)i j k k 组成方阵A,用(,)i k y -
组成矩阵B. 4, 利用A/B 求出该多项式的系数,再利用
1
(())^2n
i
i
i f x y =-∑求出平方误差.
实验题目
1,对于给函数f(x)=
2
1
125x
+在区间【-1,1】上取i x =-1+0.2i (i=0,1…10),试求3次曲线拟合,试画出你和曲线并打印出方程。 2,由实验给出的数据表 x 0.0 0.1 0.2 0.3 0.5 0.8 1.0 y
1.0
0.41
0.50
0.61
0.91
2.02
2.46
试求3次,4次多项式的曲线拟合,再根据数据曲线形状,求一个另外函数的拟合曲线,用图示数据曲线及相应的三种拟合曲线。 3,给定数据点(i x i y )如表所示。
i x 0 0.5 0.6 0.7 0.8 0.9 1.0 i y
1.75
1.96
2.19
2.44
2.71
3.00
用最小二乘法求拟合数据的二次多项式,并求平方误差。 实验结果
1.
i = 0:10;
x = -1+0.2*i; y = 1./(1+25*x.^2); p=polyfit(x,y,3); s=vpa(poly2sym(p)) f = polyval(p,x);
plot( x, f, x, y, 'o ')
s =
0.000000000000000018136579684810800950071230066733*x^3 - 0.57518273581808898597955703735352*x^2 -
0.00000000000000021309598658452197357889078781603*x +
0.48412492484890667920893747577793
2,
x=[0 0.1 0.2 0.3 0.5 0.8 1];
y=[1 0.41 0.5 0.61 0.91 2.02 2.46];
p1=polyfit(x,y,3)%三次多项式拟合
p2=polyfit(x,y,4)%四次多项式拟合
y1=polyval(p1,x);
y2=polyval(p2,x);%多项式求值
plot(x,y,'c--',x,y1,'r:',x,y2,'y-.')
p3=polyfit(x,y,2)% 观察图像,类似于抛物线,用二次多项拟合
y3=polyval(p3,x);
plot(x,y,'c--',x,y1,'r:',x,y2,'y-.',x,y3,'k--')%画出四种拟合曲线
p1 =
-6.6221 12.8147 -4.6591 0.9266
p2 =
2.8853 -12.3348 16.2747 -5.2987 0.9427
p3 =
3.1316 -1.2400 0.7356
3,
function []=zuixiaoercinihe2(x,y)
n=length(x);
k00=0;
for i=1:n
k00=k00+1;
end
k01=0;
for i=1:n
k01=k01+x(i);
end
k02=0;
for i=1:n
k02=k02+x(i)*x(i);
end
k11=0;
for i=1:n
k11=k11+x(i)*x(i);
end
k12=0;
for i=1:n
k12=k12+x(i)*x(i)*x(i);
end
k22=0;
for i=1:n
k22=k22+x(i)*x(i)*x(i)*x(i);
end
k0y=0;
for i=1:n
k0y=k0y+y(i);
end
k1y=0;
for i=1:n
k1y=k1y+x(i)*y(i);
end
k2y=0;
for i=1:n
k2y=k2y+x(i)*x(i)*y(i);
end
A=[k00 k01 k02;k01 k11 k12;k02 k12 k22];
B=[k0y;k1y;k2y];
C=A\B;
p=C(1);
q=C(2);
r=C(3);
syms m;
'拟合的二次函数为:'
f=p+q*m+r*m*m
l=0;
for i=1:n
l=l+((p+q*x(i)+r*x(i)*x(i))-y(i))*((p+q*x(i)+r*x(i)*x(i))-y(i)); end
'该拟合函数的平方误差为:'
l
拟合的二次函数为:
f =
1+m+9007199254740963/9007199254740992*m^2
ans =
该拟合函数的平方误差为:
l =
5.8178e-030