计算方法实验报告1版.docx

上传人:b****9 文档编号:25163780 上传时间:2023-06-05 格式:DOCX 页数:16 大小:19.27KB
下载 相关 举报
计算方法实验报告1版.docx_第1页
第1页 / 共16页
计算方法实验报告1版.docx_第2页
第2页 / 共16页
计算方法实验报告1版.docx_第3页
第3页 / 共16页
计算方法实验报告1版.docx_第4页
第4页 / 共16页
计算方法实验报告1版.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

计算方法实验报告1版.docx

《计算方法实验报告1版.docx》由会员分享,可在线阅读,更多相关《计算方法实验报告1版.docx(16页珍藏版)》请在冰豆网上搜索。

计算方法实验报告1版.docx

计算方法实验报告1版

Matlab上机实验报告

姓名:

刘慧杰班级:

12信算本班学号:

1208300044

第一章

1.1Lagrange插值实验报告

求解的方程

functionf=f1(x)

f=x/(4+x^2);

Lagrange程序

function[y0,N]=Lagrange_eval(X,Y,x0)

formatlonge

m=length(X);

N=zeros(m,1);

y0=0;

fori=1:

m

N(i)=1;

forj=1:

m

ifj~=i

N(i)=N(i)*(x0-X(j))/(X(i)-X(j));

end

end

y0=y0+Y(i)*N(i);

end;

运行结果如下:

1):

令X=[0.5,0.6];Y=[-0.693147,-0.510826];x0=0.54;

2):

令X=[0.4,0.5,0.6];Y=[-0.916291,-0.693147,-0.510826];x0=0.54;

3):

令X=[0.4,0.5,0.6,0.7];Y=[-0.916291,-0.693147,-0.510826,-0.356675];x0=0.54;

4):

令X=[0.4,0.5,0.6,0.7,0.8];

Y=[-0.916291,-0.693147,-0.510826,-0.356675,-0.223144];x0=0.54;

运行[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插值不是插值次数越多越好,插值次数如果太多的话,就会出现失真。

第二章

2.1复化simpson公式实验报告

求解的方程

functionf=f1(x)

f=x/(4+x^2);

复化simpson公式程序

functionS=FSimpson(f,a,b,N)

formatlonge

h=(b-a)/N;

fa=feval(f,a);

fb=feval(f,b);

S=fa+fb;

x=a;

fori=1:

N

T=i;

x=x+h/2;

fx=feval(f,x);

S=S+4*fx;

x=x+h/2;

ifx

fx=feval(f,x);

S=S+2*fx;

end

end

S=h*S/6;

运行结果如下:

令:

f=@f1;

a=0;b=1;

1)N=16;

2)N=64;

3)N=1024;

4)N=2048;

运行:

S=FSimpson(f,a,b,N)

运行结果

(1)

S=1.115717780016748e-01

运行结果

(2)

S=1.115717756662571e-01

运行结果(3)

S=1.115717756571050e-01

运行结果(4)

S=1.115717756571049e-01

准确结果是:

S=1.115717756571049e-01

结果分析:

综上所述:

当将所求区间分成2048个时,所求的精度已经完全符合我们所需要精确度了,同时完全靠上了我们需要的准确值。

第三章

二阶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

h=(b-a)/N;

y=zeros(1,N+1);

x=zeros(1,N+1);

x=a:

h:

b;

y

(1)=ya;

fori=1:

N

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;

dy2=feval(f,x(i+1),y(i+1));

end

end

A=[x',y'];

tic

T=toc

3.4改进的四阶Adams预报校正系统

functionA=CAdams4PC(f,a,b,N,ya)

formatlong

tic

ifN<4

return;

end

h=(b-a)/N;

x=zeros(1,N+1);

y=zeros(1,N+1);

x=a:

h:

b;

y

(1)=ya;

F=zeros(1,4);

fori=1:

N

ifi<4

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);

else

F=feval(f,x(i-3:

i),y(i-3:

i));

py=y(i)+(h/24)*(F*[-9,37,-59,55]');

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;

p=py;c=cy;

end

end

A=[x',y'];

tic

T=toc

令f=@f3;a=0;b=1;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);

y=solvef3(a:

(b-a)/N:

b);

m=[CA4,y']

运行结果如下:

运行结果

(1):

最小时间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

运行结果

(2):

最小时间T=1.184198528514909e-06

最大时间T=1.673664214191514e-06

离散节点值改进的四阶Adams预报校正系统准确值

m=

01.0000000000000001.000000000000000

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)

f=sqrt(x^2+1)-tan(x);

d1='sqrt(x^2+1)-tan(x)';

d=subs(diff(d1));

4.1二分法和4.3Newton下山法的程序

4.1

function[x,k]=demimethod(a,b,f,emg)

formatlonge

fa=feval(f,a);

fab=feval(f,(a+b)/2);

k=0;

whileabs(b-a)>emg

iffab==0

x=(a+b)/2;

return;

elseiffa*fab<0

b=(a+b)/2;

else

a=(a+b)/2;

end

fa=feval(f,a);

fab=feval(f,(a+b)/2);

k=k+1;

end

x=(a+b)/2;

4.3

function[x,k]=Mendnewton(f,x0,emg)

formatlonge

[f1,d1]=feval(f,x0);

k=1;

x

(1)=x0;

x

(2)=x

(1)-f1/d1;

whileabs(f1)>emg

u=1;

k=k+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;

x(k+1)=x(k)-u*f1/d1;

[f2,d2]=feval(f,x(k+1));

end

end

1)令:

f=@func2;

运行:

[x0,k]=demimethod(0,pi/2,f,10^-5)

2)令:

x0=-1.2;f=@func3;

运行:

[x,k]=Mendnewton(f,x0,10^-6)

运行结果如下:

运行结果

(1)

x0=9.414597361712279e-01

k=18

运行结果

(2)

x=

Columns1through3

-1.200000000000000e+00-7.069047932971935e-011.942400972108480e-01

Columns4through6

1.163518073303871e+001.023918977930554e+009.530711345686330e-01

Columns7through9

9.416925081385333e-019.414616152761416e-019.414615238528302e-01

k=8

结果分析:

综上所述:

二分法的优点是算法简单,缺点就是收敛速度慢;

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迭代与5.2Gauss-Seidel迭代程序

5.1

function[x,k]=Jacobimethod(A,b,x0,N,emg)

formatlonge

n=length(A);

x1=zeros(n,1);

x2=zeros(n,1);

x1=x0;k=0;

r=max(abs(b-A*x1));

whiler>emg

fori=1:

n

sum=0;

forj=1:

n

ifi~=j

sum=sum+A(i,j)*x1(j);

end

end

x2(i)=(b(i)-sum)/A(i,i);

end

r=max(abs(x2-x1));

x1=x2;

k=k+1;

ifk>N

disp('迭代失败,返回');

return;

end

end

x=x1;

5.3

function[x,k]=Gaussmethod(A,b,x0,N,emg)

formatlonge

n=length(A);

x1=zeros(n,1);

x2=zeros(n,1);

x1=x0;

r=max(abs(b-A*x1));

k=0;

whiler>emg

fori=1:

n

sum=0;

forj=1:

n

ifj>i

sum=sum+A(i,j)*x1(j);

elseifj

sum=sum+A(i,j)*x2(j);

end

end

x2(i)=(b(i)-sum)/A(i,i);

end

r=max(abs(x2-x1));

x1=x2;

k=k+1;

ifk>N

disp('µü´úʧ°Ü£¬·µ»Ø');

return;

end

end

x=x1;

令:

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)

运行结果如下:

运行结果

(1)

x=-9.999761621685057e-01

-9.999761621685057e-01

-9.999761621685057e-01

-9.999761621685057e-01

k=37

运行结果

(2)

x=-9.999896479636309e-01

-9.999910053552269e-01

-9.999921847613638e-01

-9.999932095200554e-01

k=21

结果分析:

综上所述:

Jacobi迭代要比Gauss-Seidel迭代花费更多的时间,浪费了大量时间,所以Gauss-Seidel迭代算法要比Jacobi迭代算法好。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1