计算方法实验报告5版Word格式.docx
- 文档编号:16270232
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:17
- 大小:20.80KB
计算方法实验报告5版Word格式.docx
《计算方法实验报告5版Word格式.docx》由会员分享,可在线阅读,更多相关《计算方法实验报告5版Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
运行[y0,N]=Lagrange_eval(X,Y,x0)
运行结果
(1)
y0=-6.202185999999998e-01
N=5.999999999999995e-01
4.000000000000005e-01
运行结果
(2)
y0=-6.153198399999997e-01
N=-1.200000000000001e-01
8.399999999999995e-01
2.800000000000004e-01
运行结果(3)
y0=-6.160284079999997e-01
N=-6.400000000000002e-02
6.719999999999994e-01
4.480000000000005e-01
-5.600000000000004e-02
运行结果(4)
y0=-6.161427151999998e-01
N=-4.160000000000001e-02
5.823999999999994e-01
5.824000000000005e-01
-1.456000000000000e-01
2.239999999999996e-02
准确结果是:
y0=-6.160284079999997e-01
结果分析:
运行结果
(1):
是两点插值,具有一阶精度,精度不高。
离准确值较远。
运行结果
(2):
是二次插值,具有二阶精度,精度较高。
还不是很接近准确值。
运行结果(3):
是三次插值,具有三阶精度,精度很高。
接近准确值。
运行结果(4):
是四次插值,具有四阶精度,精度更高。
但是已经偏离准确值。
综上所述:
Lagrange插值不是插值次数越多越好,插值次数如果太多的话,就会出现失真。
第二章
复化simpson公式(修改后)和Romberg加速算法比较的实验报告
2.1复化simpson公式程序(修改后)
functionS=FSimpson(f,a,b,N)
h=(b-a)/N;
fa=feval(f,a);
fb=feval(f,b);
S=fa+fb;
x=a;
N
T=i;
x=x+h/2;
fx=feval(f,x);
S=S+4*fx;
ifx<
b
S=S+2*fx;
end
S=h*S/6;
2.3Romberg加速算法程序
function[quad,R]=Romberg(f,a,b,eps)
h=b-a;
R(1,1)=h*(feval(f,a)+feval(f,b))/2;
M=1;
J=0;
err=1;
whileerr>
eps
J=J+1;
h=h/2;
S=0;
forp=1:
M
x=a+h*(2*p-1);
S=S+feval(f,x);
R(J+1,1)=R(J,1)/2+h*S;
M=2*M;
fork=1:
J
R(J+1,k+1)=R(J+1,k)+(R(J+1,k)-R(J,k))/(4^k-1);
err=abs(R(J+1,J)-R(J+1,J+1));
quad=R(J+1,J+1);
令:
f=@f1;
a=0;
b=1;
eps=10^-15;
1)N=16;
2)N=64;
3)N=1024;
4)N=2048;
运行:
一:
S=FSimpson(f,a,b,N)
二:
[quad,R]=Romberg(f,a,b,eps)
运行结果
(一)
S=1.115717780016748e-01
S=1.115717756662571e-01
S=1.115717756571050e-01
S=1.115717756571049e-01
运行结果
(二)
quad=1.115717756571049e-01
R=
Columns1through3
1.000000000000000e-0100
1.088235294117647e-011.117647058823530e-010
1.108922705014566e-011.115818508646873e-011.115696605301763e-01
1.114023545295480e-011.115723825389118e-011.115717513171934e-01
1.115294485718600e-011.115718132526307e-011.115717753002119e-01
1.115611956442211e-011.115717780016749e-011.115717756516111e-01
1.115691307637255e-011.115717758035603e-011.115717756570194e-01
Columns4through6
000
1.115717845042890e-0100
1.115717756808947e-011.115717756462932e-010
1.115717756571889e-011.115717756570959e-011.115717756571065e-01
1.115717756571052e-011.115717756571049e-011.115717756571049e-01
Column7
0
1.115717756571049e-01
S=1.115717756571049e-01
如果采用复化simpson公式,当等分2048个区间时,其结果达到我们想要的结果,但是当其过程浪费大量的时间,而采用Romberg加速算法时,其仅等分64个区间,可想而知,其算法的核心思想是多么的重要,Romberg加速算法好于复化simpson公式。
第三章
二阶Adams预报校正系统和改进的四阶Adams预报校正系统比较的实验报告
functionz=f3(x,y)
z=-y+x+1;
functiony=solvef3(x)
y=exp(-x)+x;
3.3二阶Adams预报校正系统程序
functionA=Adams2PC(f,a,b,N,ya)
formatlong
tic
y=zeros(1,N+1);
x=zeros(1,N+1);
x=a:
h:
b;
y
(1)=ya;
ifi==1
y1=y(i)+h*feval(f,x(i),y(i));
y2=y(i)+h*feval(f,x(i+1),y1);
y(i+1)=(y1+y2)/2;
dy1=feval(f,x(i),y(i));
dy2=feval(f,x(i+1),y(i+1));
else
y(i+1)=y(i)+h*(3*dy2-dy1)/2;
P=feval(f,x(i+1),y(i+1));
y(i+1)=y(i)+h*(P+dy2)/2;
dy1=dy2;
A=[x'
y'
];
T=toc
3.4改进的四阶Adams预报校正系统程序
functionA=CAdams4PC(f,a,b,N,ya)
ifN<
4
return;
F=zeros(1,4);
ifi<
k1=feval(f,x(i),y(i));
k2=feval(f,x(i)+h/2,y(i)+k1*(h/2));
k3=feval(f,x(i)+h/2,y(i)+k2*(h/2));
k4=feval(f,x(i)+h,y(i)+k3*h);
y(i+1)=y(i)+(h/6)*(k1+2*k2+2*k3+k4);
elseifi==4
F=feval(f,x(i-3:
i),y(i-3:
i));
py=y(i)+(h/24)*(F*[-9,37,-59,55]'
);
p=feval(f,x(i+1),py);
F=[F
(2)F(3)F(4)p];
y(i+1)=y(i)+(h/24)*(F*[1,-5,19,9]'
p=py;
c=y(i+1);
my=py-251*(p-c)/270;
m=feval(f,x(i+1),my);
F=[F
(2)F(3)F(4)m];
cy=y(i)+(h/24)*(F*[1,-5,19,9]'
y(i+1)=cy+19*(py-cy)/270;
c=cy;
令f=@f3;
N=10;
ya=1;
1)运行A2=Adams2PC(f,a,b,N,ya);
y=solvef3(a:
(b-a)/N:
b);
m=[A2,y'
]
2)运行CA4=CAdams4PC(f,a,b,N,ya);
m=[CA4,y'
最小时间T=1.184198528514909e-06
最大时间T=1.578931371353211e-06
离散节点值二阶Adams预报校正系统准确值
m=
01.0000000000000001.000000000000000
0.1000000000000001.0050000000000001.004837418035960
0.2000000000000001.0187875000000001.018730753077982
0.3000000000000001.0407871562500001.040818220681718
0.4000000000000001.0702173755468751.070320046035640
0.5000000000000001.1063703004181641.106530659712633
0.6000000000000001.1486055041906171.148811636094027
0.7000000000000001.1963435693019391.196585303791410
0.8000000000000001.2490602753810331.249328964117222
0.9000000000000001.3062813409850331.306569659740599
1.0000000000000001.3675776662554651.367879441171442
最小时间T=1.184198528514909e-06
最大时间T=1.673664214191514e-06
离散节点值改进的四阶Adams预报校正系统准确值
0.1000000000000001.0048375000000001.004837418035960
0.2000000000000001.0187309014062501.018730753077982
0.3000000000000001.0408184220011781.040818220681718
0.4000000000000001.0703199182439461.070320046035640
0.5000000000000001.1065305771785771.106530659712633
0.6000000000000001.1488115792758771.148811636094027
0.7000000000000001.1965852694227261.196585303791410
0.8000000000000001.2493289497773841.249328964117222
0.9000000000000001.3065696613693961.306569659740599
1.0000000000000001.3678794559163771.367879441171442
改进的四阶Adams所求的值要比二阶Adams所求的值更靠进准确值。
时间平均开销上,改进的四阶Adams和二阶Adams基本差不多,改进的四阶Adams略多一点。
第四章
二分法和Newton下山法(修改后)的比较实验报告
functionf=func2(x)
f=sqrt(x^2+1)-tan(x);
function[f,d]=func3(x)
d1='
sqrt(x^2+1)-tan(x)'
;
d=subs(diff(d1));
4.1二分法的程序
function[x,k]=demimethod(a,b,f,emg)
fab=feval(f,(a+b)/2);
k=0;
whileabs(b-a)>
emg
iffab==0
x=(a+b)/2;
elseiffa*fab<
b=(a+b)/2;
a=(a+b)/2;
fa=feval(f,a);
fab=feval(f,(a+b)/2);
k=k+1;
x=(a+b)/2;
4.3Newton下山法(修改后)的程序
function[x,y,k,N]=Mendnewton(f,x0,emg)
%y为f1(K)=feval(f,x(k))值
%k,N为迭代次数
y=zeros(100,1);
[f1,d1]=feval(f,x0);
k=1;
x
(1)=x0-f1/d1;
whileabs(f1)>
u=1;
[f1,d1]=feval(f,x(k));
x(k+1)=x(k)-u*f1/d1;
[f2,d2]=feval(f,x(k+1));
whileabs(f2)>
abs(f1)
u=u/2;
y(k)=f1;
y(k)=feval(f,x(k));
N=k;
k=(1:
1:
N);
注:
本题修改后的Newton下山法最多可满足100次迭代,如果需要可将y=zeros(100,1);
中的100修改成需要的大小。
1)令:
f=@func2;
[x0,k]=demimethod(0,pi/2,f,10^-5)
2)令:
x0=-1.2;
f=@func3;
运行:
[x,y,k,N]=Mendnewton(f,x0,10^-6);
A=[k'
x'
y(1:
N)]
x0=9.414597361712279e-01
k=18
迭代次数kx值f1(x)=feval(f,x(k))的值
A=
1.000000000000000e+00-7.069047932971935e-012.078789280010764e+00
2.000000000000000e+001.942400972108480e-018.219695728408298e-01
3.000000000000000e+001.163518073303871e+00-7.838374932606165e-01
4.000000000000000e+001.023918977930554e+00-2.113030290935414e-01
5.000000000000000e+009.530711345686330e-01-2.606996588743926e-02
6.000000000000000e+009.416925081385333e-01-5.085688425774393e-04
7.000000000000000e+009.414616152761416e-01-2.012113482496858e-07
8.000000000000000e+009.414615238528302e-01-3.153033389935445e-14
二分法的优点是算法简单,缺点就是收敛速度慢;
Newton下山法的优点是收敛速度快,精度比二分法高,缺点就是需要选取初值点。
第五章
Jacobi迭代与Gauss-Seidel迭代的比较实验报告
求解的方程组
-4x1+x2+x3+x4=1
x1-4x2+x3+x4=1
x1+x2-4x3+x4=1
x1+x2+x3-4x4=1
5.1Jacobi迭代程序
function[x,k]=Jacobimethod(A,b,x0,N,emg)
n=length(A);
x1=zeros(n,1);
x2=zeros(n,1);
x1=x0;
k=0;
r=max(abs(b-A*x1));
whiler>
fori=1:
n
sum=0;
ifi~=j
sum=sum+A(i,j)*x1(j);
x2(i)=(b(i)-sum)/A(i,i);
r=max(abs(x2-x1));
x1=x2;
ifk>
disp('
迭代失败,返回'
x=x1;
5.3Gauss-Seidel迭代程序
function[x,k]=Gaussmethod(A,b,x0,N,emg)
ifj>
i
elseifj<
sum=sum+A(i,j)*x2(j);
令:
A=[-4,1,1,1;
1,-4,1,1;
1,1,-4,1;
1,1,1,-4];
b=[1,1,1,1]'
x0=[0,0,0,0]'
1)运行:
[x,k]=Jacobimethod(A,b,x0,100,10^-5)
2)运行:
[x,k]=Gaussmethod(A,b,x0,100,10^-5)
x=-9.999761621685057e-01
-9.999761621685057e-01
k=37
x=-9.999896479636309e-01
-9.999910053552269e-01
-9.999921847613638e-01
-9.999932095200554e-01
k=21
本题中Jacobi迭代要比Gauss-Seidel迭代花费更多的时间,所以在本题中选取Gauss-Seidel迭代算法要比Jacobi迭代算法好。
附录:
实验报告目录
第一章1
1.1Lagrange插值实验报告1
求解的方程1
Lagrange程序1
运行结果1
准确结果2
结果分析2
第二章2
复化simpson公式(修改后)和Romberg加速算法比较的实验报告2
求解的方程2
2.1复化simpson公式程序(修改后)2
2.3Romberg加速算法程序3
运行结果3
运行结果
(一)3
运行结果
(二)3
准确结果4
结果分析4
第三章4
二阶
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 实验 报告