计算方法实验+编程代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法实验报告
1 在区间[-1,1]上分别取n=10,20,用两组等距节点对龙格函数21()125f x x
=+作多项式插值,对每个n 值,分别画出插值函数及()f x 的图形。
解:n=10时:
n=20时:
2 在区间[-1,1]上分别取n=10,20,用两组等距节点对龙格函数21()125f x x
=
+作分段线性插值,对每个n 值,分别画出插值函数及()f x 的图形。 解:n=10:
n=20时:
3 对龙格函数21()125f x x =
+在区间[-1,1]上取21, 0,1,2k x k k n n
=-+= ,n 分别取10,20,试分别求3次、5次最小二乘拟合多项式,打印出此曲线拟合函数,分别画出此拟合函数及()f x 的图形。 3次最小二乘拟合
n=10时:
n=20时:
5次最小二乘拟合n=10时:
n=20时:
4 取点
21
cos,0,1,2
2(1)
k
k
x k n
n
π
+
==
+
,n分别取10,20,对龙格函数
2
1
()
125
f x
x
=
+
作多项式插值,对每个n值,分别画出插值函数及()
f x的图形。解:n=10时:
n=20时:
5 比较上面三组近似函数,说说你的体会。你能在此基础上做进一步的探索吗,比如n如果继续增加下去,结果会如何?
附注:编程语言不限,但用matlab等语言编程时,不得直接调用现成的插值与逼近函数,需要你在我们课堂教学的基础上,编程实现上述算法。
解:用不同方法进行插值,得出的插值函数差异较大。其中,最小二乘拟合的曲线精度较低,多项式插值拟合的曲线精度较高。曲线拟合的精度不仅和拟合方法有关,还和采样点位置的选取、个数有关。如1,4题都是多项式插值,但是第4题的拟合度最高。n值越大,拟合的函数会更加接近原函数。
程序:
1.等距节点多项式插值
clear;
clc;
syms x
n=input('input n=');
x1=linspace(-1,1,n+1);
y1=1./(1.+25*x1.^2);
yy=zeros(1,n+1);
fx=0;
for i=1:n+1;
lga=1;
for j=1:n+1
if j~=i
lga=lga*(x-x1(1,j))/(x1(1,i)-x1(1,j));
else
end
end
fx=fx+y1(1,i)*lga;
end
disp(fx);
x=-1:0.01:1;
plot(x,eval(fx),'rh')
hold on
a=linspace(-1,1,100);
y2=1./(1.+25*a.^2);
plot(a,y2,'b')
legend('插值函数','龙格函数')
2.分段线性插值
function y=div(x0,y0,x,n)
for j=1:n
if (x>=x0(j))&&(x<=x0(j+1))
y=(x-x0(j+1))/(x0(j)-x0(j+1))*y0(j)+(x-x0(j))/(x0(j+1)-x0(j ))*y0(j+1);
else
continue
end
end
end
clear;
clc;
n=input('input n=');
x0=linspace(-1,1,n+1);
yy=zeros(2001,1);
for i=1:1:2001
xx(i,1)=0.001*(i-1)-1;
y=div(x0,1./(1+25*x0.^2), xx(i,1),n);
disp(y);
yy(i,1)=y;
end
plot(xx,yy,'r','LineWidth',1.5)
a=linspace(-1,1,100);
hold on
plot(a,1./(1+25*a.^2),'b','LineWidth',1.5)
legend('插值函数','龙格函数')
3.
①三次最小二乘拟合
clear ;
n=input('input n=');
x0=ones(n+1,1);
x1=zeros(n+1,1);
x2=zeros(n+1,1);
x3=zeros(n+1,1);
y1=zeros(n+1,1);
for k=0:1:n
x1(1+k,1)=-1+2*k/n;
y1(1+k,1)=1./(1+25*x1(1+k,1).^2);
x2(k+1,1)=x1(k+1,1)*x1(k+1,1);
x3(k+1,1)=x1(k+1,1)*x1(k+1,1)*x1(k+1,1); end
A=[x0 x1 x2 x3];
B=A'*A;
C=A'*(y1);
D=B\C;
x=linspace(-1,1,51);
y=D(4,1)*x.^3+D(3,1)*x.^2+D(2,1)*x+D(1,1);
a=linspace(-1,1,101);
y0=1./(1+25*a.^2);
plot(x,y,'rh')
hold on
plot(a,y0,'b','LineWidth',2)
legend('插值函数','龙格函数')
②五次最小二乘拟合
clear ;
n=input('input n=');
x0=ones(n+1,1);
x1=zeros(n+1,1);
x2=zeros(n+1,1);
x3=zeros(n+1,1);
x4=zeros(n+1,1);
x5=zeros(n+1,1);
y1=zeros(n+1,1);
for k=0:1:n
x1(1+k,1)=-1+2*k/n;
y1(1+k,1)=1./(1+25*x1(1+k,1).^2);
x2(k+1,1)=x1(k+1,1)*x1(k+1,1);
x3(k+1,1)=x1(k+1,1)*x1(k+1,1)*x1(k+1,1); x4(k+1,1)=(x1(k+1,1)).^4;