数值分析实验报告.docx
《数值分析实验报告.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
数值分析实验报告
实验报告
课程名称:
学院:
专业:
班级:
姓名:
学号:
日期:
实验作业1
1.实验目标与任务
了解matlab的基本操作
2.实验内容
三.程序实现与结果
(2)
functionjiechenghe=funn(x)
jiechenghe=0;
s=1;
fori=1:
x
s=s*i;
jiechenghe=jiechenghe+s;
end
结果:
>>x=20;funn(x)
ans=
2.5613e+18
(3)
functionhaishu=fu(x,y)
f=x.^4-2*x.^2*y+x.^2-2*x*y+2*y.^2+(9/2)*x-4*y+4
>>fu(1,2)
f=
2.5000
(4)
functionpic_z
x=-2:
0.1:
3;
y=-1:
0.1:
7;
[X,Y]=meshgrid(x,y);
Z=X.^4-2*Y.*X.^2+X.^2-2*X.*Y+2*Y.^2+(9*X)/2-4*Y+4;
[c,h]=contour(X,Y,Z,[0,1,2,3,4,5,10,15,20,30,40,50]);clabel(c,h)
end
四.实验成绩
五.教师评语
实验作业2
1.实验内容
拉格朗日与分段线性插值的matlab编程实现
二实验内容
三.程序实现与结果
1.
(1)
functiony=lagr1(x0,y0,x)
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
ifj~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
x=-1:
0.1:
1;
y=1./(1+25.*x.^2);
z=0*x;
x0=-1:
2/(n-1):
1;
y0=1./(1+25.*x0.^2);
y1=lagr1(x0,y0,x);plot(x,z,'r',x,y,'k:
',x,y1,'r')
gtext(['Lagr.',num2str(n)])
holdon
end
title(
'Lagrange'
)
legend('Largr插值','f(x)图像')
end
(2)
n=input('n=');
x0=linspace(-1,1,n+1);
y0=1./(1+25*x0.^2);
x=[-1:
0.01:
1];
a=length(x0);
b=length(x);
forj=1:
b;
fori=1:
a-1;
if(x(j)>=x0(i))&&(x(j)<=x0(i+1));
y(j)=y0(i)*((x(j)-x0(i+1))/(x0(i)-x0(i+1)))+y0(i+1)*((x(j)-x0(i))/(x0(i+1)-x0(i)));
end
end
end
plot(x,y)
title('分段线性插值')
n=4
n=8
n=20
2.
Chashang.m文件:
functionsum=ChaShang(x,y0,n)
sum=0;
fori=1:
n
t=1;
forj=1:
n
ifj~=i
t=t*(x(i)-x(j));
end
end
sum=sum+y0(i)/t;%f(x(i))/t;
end
sum;
end
Newton.m文件:
functionN=Newton(x0,y0,x,i,n)
ifi<=n
c=ChaShang(x0,y0,i);
p(i)=c+Newton(x0,y0,x,i+1,n)*(x-x0(i));
else
p(i)=0;
end
N=p(i);
end
Tmain.m文件:
W=0:
0.1:
15;
m=length(W);
x0=[035791112131415];
y0=[01.21.72.02.12.01.81.21.01.6];
n=length(x0);
fori=1:
m
P(i)=Newton(x0,y0,W(i),1,n);
end
plot(W,P);
运行结果:
四.实验成绩
五.教师评语
实验作业3
1.实验目标与任务
掌握最小二乘拟合,计算平方误差和,并学会作图
2.实验内容
三.程序实现与实验结果
functionf=fun(p,t)
f=p
(1)*exp(-p
(2)*(t-p(3)).^2)
曲线拟合程序:
t=0:
1:
24;
x=[15141414141516182022232528313231292725242220181716];
p2=polyfit(t,x,2);
f2=polyval(p2,t);
c2=(x-f2).^2
p3=polyfit(t,x,3);
f3=polyval(p3,t);
c3=(x-f3).^2
p4=polyfit(t,x,4);
f4=polyval(p4,t);
c4=(x-f4).^2
p5=lsqcurvefit('fun',[111],t,x);
f5=fun(p5,t);
c5=(x-f5).^2
plot(t,x,'-p',t,f2,'.',t,f3,'-.',t,f4,'-',t,f5,'-o')
legend('样本点','二次拟合曲线','三次拟合曲线','四次拟合曲线','曲线x(t)=a*exp(-b*(t-c)^)')
误差分析程序:
t=0:
1:
24;
x=[15141414141516182022232528313231292725242220181716];
p2=polyfit(t,x,2);
f2=polyval(p2,t);
c2=(x-f2).^2;
p3=polyfit(t,x,3);
f3=polyval(p3,t);
c3=(x-f3).^2;
p4=polyfit(t,x,4);
f4=polyval(p4,t);
c4=(x-f4).^2;
p5=lsqcurvefit('fun',[111],t,x);
f5=fun(p5,t);
c5=(x-f5).^2;
plot(t,c2,'-p',t,c3,'.',t,c4,'-.',t,c5,'-o')
legend('二次曲线拟合误差平方','三次曲线拟合误差平方','四次曲线拟合误差平方','曲线x(t)=a*exp(-b*(t-c)^)误差平方')
4.实验成绩
五.教师评语
实验作业4
1.实验目标与任务
学会用复化梯形公式与复化simpson公式求积分的方法
2.实验内容
3.程序实现与结果
functionf=fun(x)
f=x/(4+(x.^2));
functionf=fun(x)
f=x.^(1/2);
functionf=fun(x)
f=(4-sin(x).^2).^(1/2);
Main.m文件:
a=input('a=');
b=input('b=');
n=input('n=');
h=(b-a)/n;
s1=0;s2=0;
fori=1:
n-1
s1=s1+fun(i*h);
end
fori=0:
n-1
s2=s2+fun((i+0.5)*h);
end
T=h/2*(fun(a)+2*s1+fun(b))
S=h/6*(fun(a)+4*s2+2*s1+fun(b))
实验结果:
a=0
b=1
n=8
T=0.1114S=0.1116
a=1
b=9
n=4
T=15.7274S=15.3943
a=0
b=pi/6
n=6
T=1.0356S=1.0358
4.实验成绩
5.教师评语
贝奇儿曲线
一.实验目标与任务
贝奇尔曲线的程序实现
2.实验内容
编写Bezier曲线拟合通用程序
3.程序实现与结果
function[X,Y]=bezier(x,y)
%用法:
%bezier(x,y)
%生成n-1次贝塞尔曲线,其中x和y是n个点的坐标
%h=bezier(x,y)
%生成n-1次贝塞尔曲线并返回曲线句柄
%[X,Y]=bezier(x,y)
%返回n-1次贝塞尔曲线的坐标
%例子:
%bezier([5,6,10,12],[05-5-2])
n=length(x);
t=linspace(0,1);
xx=0;yy=0;
fork=0:
n-1
tmp=nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
xx=xx+tmp*x(k+1);
yy=yy+tmp*y(k+1);
end
ifnargout==2
X=xx;Y=yy;
end
h=plot(xx,yy);
ifnargout==1
X=h;
end
end
bezier([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],[15,14,14,14,14,15,16,18,20,22,23,25,28,31,32,31,29,27,25,24,22,20,18,17,16])
4.实验成绩
五.教师评语
实验作业5
1.实验目标与任务
掌握一般迭代法与steffensen加速迭代法的步骤与程序
2.实验内容
3.程序实现与实验结果
1.考虑迭代公式
一般迭代法:
iterate.m
function[x_star,index,it]=iterate(phi,x,ep,it_max)
ifnargin<4it_max=100;end
ifnargin<3ep=1e-5;end
index=0;k=1;
whilek<=it_max
x1=x;x=feval(phi,x)
ifabs(x-x1)index=1;break;
end
k=k+1;
end
x_star=x;it=k;
phi=inline('0.99*x-x^2');
[x_star,index,it]=iterate(phi,0.5)
结果
x_star=0.0053
index=0
it=101
加速迭代法:
steffensen.m
function[x_star,index,it]=steffensen(phi,x,ep,it_max)
ifnargin<4it_max=100;end
ifnargin<3ep=1e-5;end
index=0;k=1;
whilek<=it_max
x1=x;y=feval(phi,x);z=feval(phi,y);
x=x-(y-x)^2/(z-2*y+x);
ifabs(x-x1index=1;break;
end
k=k+1
end
x_star=x;it=k;
phi=inline('0.99*x-x^2');
[x_star,index,it]=steffensen(phi,0.5)
结果
x_star=0.1623
index=1
it=1
2.定积分的应用:
functionf=f(x)
R=6371.0;
H=3484.0;
h=439.0;
a=(2*R+H+h)/2;
c=(H-h)/2;
f=a*sqrt(1-(c/a)^2*(sin(x))^2);
function[n,t2]=compT(a,b,eps)
%利用复化梯形递推公式求fun在[a,b]的定积分;
%输入积分下限a;输入积分上限b;精度eps;
%输出分半次数n和积分值t2;具体问题1的值s;
h=b-a;%节点步长
t1=(f(a)+f(b))*h/2;%梯形值T0:
h=h/2;
t2=t1/2+h*f(a+h);%经1次分半复合梯形值
err=t2-t1;%误差
n=1;
whileabs(err)>eps
sum=0;
h=h/2;
t1=t2;
n=n+1;
k=1;
whilek<2^n
sum=sum+f(a+k*h);
k=k+2;
end
t2=t1/2+h*sum;
err=t2-t1;end
>>[n,t2]=compT(0,pi/2,0.00001)
n=2
t2=1.297872245148920e+04
四.实验成绩
五.教师评语