matlab上机实验报告.docx

上传人:b****4 文档编号:3926209 上传时间:2023-05-06 格式:DOCX 页数:29 大小:254.14KB
下载 相关 举报
matlab上机实验报告.docx_第1页
第1页 / 共29页
matlab上机实验报告.docx_第2页
第2页 / 共29页
matlab上机实验报告.docx_第3页
第3页 / 共29页
matlab上机实验报告.docx_第4页
第4页 / 共29页
matlab上机实验报告.docx_第5页
第5页 / 共29页
matlab上机实验报告.docx_第6页
第6页 / 共29页
matlab上机实验报告.docx_第7页
第7页 / 共29页
matlab上机实验报告.docx_第8页
第8页 / 共29页
matlab上机实验报告.docx_第9页
第9页 / 共29页
matlab上机实验报告.docx_第10页
第10页 / 共29页
matlab上机实验报告.docx_第11页
第11页 / 共29页
matlab上机实验报告.docx_第12页
第12页 / 共29页
matlab上机实验报告.docx_第13页
第13页 / 共29页
matlab上机实验报告.docx_第14页
第14页 / 共29页
matlab上机实验报告.docx_第15页
第15页 / 共29页
matlab上机实验报告.docx_第16页
第16页 / 共29页
matlab上机实验报告.docx_第17页
第17页 / 共29页
matlab上机实验报告.docx_第18页
第18页 / 共29页
matlab上机实验报告.docx_第19页
第19页 / 共29页
matlab上机实验报告.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

matlab上机实验报告.docx

《matlab上机实验报告.docx》由会员分享,可在线阅读,更多相关《matlab上机实验报告.docx(29页珍藏版)》请在冰点文库上搜索。

matlab上机实验报告.docx

matlab上机实验报告

上海电力学院

数值计算方法上机实习报告

 

院系:

能源与机械工程学院

专业年级:

动力机械及工程2012级

*******

学号:

ys**********

*******

2012年12月26日

数值计算方法上机实习题

1.设

(1)由递推公式

,从

的几个近似值出发,计算

解:

I0=

=0.1823

计算I20编辑matlab命令如下:

I=0.1823

forn=1:

1:

20,

I=-5*I+1/n;

fprintf('%.1d%.4f\n',n,I);

end

结果:

(2)粗糙估计

,用

,计算

解:

I20=

使用复合中点公式进行积分,相应的matlab程序如下:

I=0;

forh=0:

0.001:

1,

m=h+0.0005;

I=I+0.001*m^20/(5+m);

fprintf('%.1d%.4f\n',m,I);

end

disp(I);

fork=1:

20,

n=21-k;

I=0.2*(1/n-I);

fprintf('%.1d%.4f\n',n,I);

end

disp(I)

结果:

程序结束时输出两个I值,第一个表示I20,第二个表示I0;

分别为I20=0.0082

I0=0.1823

(3)分析结果的可靠性及产生此现象的原因(重点分析原因)。

从上述计算中分析得到如果先得到I0,再从I0由递推公式得到I20,I20结果跟精确值相比误差很大;如果先估算I20,在从I20有递推公式得到I0,I0的结果跟精确值相比近似相等。

原因分析:

如果从I0推I20的近似值,需要用到递推公式In=-5In-1+1/n,I0本身结果是有误差的;经过递推公式计算20次,就等于误差被认为的放大5的20次方倍,所以得到的I20与其精确值相差甚远。

如果从I20推I0的近似值,需要用到In-1=0.2(1/n-In),尽管I20本身有误差,但是经过20次运算,其误差缩小到原来的0.2的20次方倍,所以得到的I0与其精确值比较相近。

2.求方程

的近似根,要求

,并比较计算量。

(1)在[0,1]上用二分法;

Matlab程序如下:

a=0;

b=1;

c=b-a;

n=0

whilec>0.0005,

x=(a+b)/2;

f=exp(x)+10*x-2;

iff>0,

b=x;

c=b-a;

elseiff<0,

a=x;

c=b-a;

else

x=x;

c=0;

end

n=n+1;

fprintf('%.1d%.4f%.4f\n',n,x,c);

end

结果如下:

解得到;x=0.0903

(2)取初值

,并用迭代

采用matlab进行迭代的程序如下:

x=0;

c=1;

n=0;

whilec>0.0005,

m=x;

m=(2-exp(m))/10;

c=abs(m-x);

x=m;

n=n+1;

fprintf('%.1d%.4f%.4f\n',n,x,c);

end

结果:

解得x=0.0905

(3)加速迭代的结果;

采用matlab进行迭代的程序如下:

x=0;

n=0;

a=0;

b=1;

whileabs(a-b)>0.0005,

n=n+1;

a=x;

y=(2-exp(x))/10;

z=(2-exp(y))/10;

x=x-(y-x)^2/(z-2*y+x);

b=x;

fprintf('%.1d%.4f%.4f\n',n,x,abs(a-b));

end

结果如下:

(4)取初值

,并用牛顿迭代法;

Matlab程序如下:

x=0;

a=1;

n=0;

whileabs(a)>0.0005,

n=n+1;

a=(exp(x)+10*x-2)/(exp(x)+10);

x=x-a;

fprintf('%.1d%.4f%.4f\n',n,x,abs(a));

end

运行结果:

(5)分析绝对误差。

迭代次数

二分法

代数式迭代

加速迭代

牛顿迭代

X(k)

Erroe

X(k)

Erroe

X(k)

Erroe

X(k)

Erroe

1

0.5000

0.5000

0.1000

0.1000

0.0905

0.0905

0.0909

0.0909

2

0.2500

0.2500

0.0895

0.0105

0.0905

0.0000

0.0905

0.0004

3

0.1250

0.1250

0.0906

0.0012

4

0.0625

0.0625

0.0905

0.0001

5

0.0938

0.0313

6

0.0781

0.0156

7

0.0859

0.0078

8

0.0898

0.0039

9

0.0918

0.0020

10

0.0908

0.0010

11

0.0903

0.0005

我们可以看到,在运算要求到同一精度的情况下,采用

(1)的二分法运算了11次,采用

(2)的方法运算了4次,采用(3)的加速迭代法运算了2次,采用(4)的牛顿迭代法也需运算2次。

也就是说牛顿的迭代的收敛速度与加速迭代速度都是超线性收敛的,而简单迭代法是线性收敛的。

而二分法收敛速度较慢,所以在工程上不经常使用。

3.钢水包使用次数多以后,钢包的容积增大,数据如下:

x

2

3

4

5

6

7

8

9

y

6.42

8.2

9.58

9.5

9.7

10

9.93

9.99

10

11

12

13

14

15

16

10.49

10.59

10.60

10.8

10.6

10.9

10.76

试从中找出使用次数和容积之间的关系,计算均方差。

(注:

增速减少,用何种模型)

解:

将使用次数x与体积y的关系用matlab采用如下程序绘制在二维坐标系:

x=[2345678910111213141516];

y=[6.428.29.589.59.7109.939.9910.4910.5910.6010.810.610.910.76];

plot(x,y,'b*-');

结果如下:

由数据点分布图可知,拟合曲线y=f(x)随着x的增加而上升,但上升速度由快到慢,当x趋于无穷大时,y趋于某个常数,故曲线有一水平渐进线。

根据上述特征很容易想到用Logistic模型来拟合该曲线。

设y=f(x)的形式为y=aeb/x(a>0,b<0),两边取对数,得lny=lna+b/x。

记A=lna,B=b,并引入新变量m=lny,n=1/x。

引入新变量后的数据表如下:

x

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

n=1/x

0.5000

0.3333

0.2500

0.2000

0.1667

0.1429

0.1250

0.1111

0.1000

0.0909

0.0833

0.0769

0.0714

0.0667

0.0625

m=lny

1.8594

2.1041

2.2597

2.2513

2.2721

2.3026

2.2956

2.3016

2.3504

2.3599

2.3609

2.3795

2.3609

2.3888

2.3758

Matlab拟合程序如下:

n=[0.50000.33330.25000.20000.16670.14290.12500.11110.10000.09090.08330.07690.07140.06670.0625];

m=[1.85942.10412.25972.25132.27212.30262.29562.30162.35042.35992.36092.37952.36092.38882.3758];

polyfit(n,m,1)

运行的结果:

由此可得A=2.4578B=-1.1107

a=eA=11.6791b=B=-1.1107

由此得到使用次数与容积的函数为

将统计表和函数用matlab绘制在同一坐标系内程序如下:

x1=[2345678910111213141516];

y1=[6.428.29.589.59.7109.939.9910.4910.5910.6010.810.610.910.76];

x=2:

1:

16;

y=11.679*exp(-1.1107*x.^(-1));

holdon;

plot(x,y,'ro-');

plot(x1,y1,'b*-');

结果如图:

计算均方差s,matlab程序如下:

y=[6.428.29.589.59.7109.939.9910.4910.5910.6010.810.610.910.76];

s=0;

forn=2:

1:

16,

a=abs(11.679*exp(-1.1107*n.^(-1))-y(n-1));

s=s+a.^2;

end

s=(s/15).^(1/2);

disp(s);

运算结果均方差S=0.2438

小结:

根据已给的条件计算函数是十分困难的,但通过对离散点的分析及变化规律找出其中的规律,并通过计算来得到实际的函数是十分有用的方法。

本题就是这样做的一个典型,在n=1/x和m=lny的基础上找到了它们之间的关系并通过这种关系来拟合原函数,并最终验证计算结果。

4.设

分析下列迭代法的收敛性,并求

的近似解及相应的迭代次数。

(1)JACOBI迭代;

解matlab计算程序如下:

A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];

b=[0;5;-2;5;-2;6];

error=1;

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

X=zeros(size(b));

whileerror>0.0001,

X=D\(b+L*X+U*X);

error=norm(b-A*X)/norm(b);

end

disp(x);

disp(error);

解得X=[0.9999;1.9999;0.9998;1.9999;0.9998;1.9999]error=7.0206e-05

(2)GAUSS-SEIDEL迭代;

A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];

b=[0;5;-2;5;-2;6];

error=1;

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

X=zeros(size(b));

whileerror>0.0001,

X=(D-L)\(b+U*X);

error=norm(b-A*X)/norm(b);

end

disp(x);

disp(error);

解得X=[0.9998;1.9998;0.9998;1.9999;0.9999;1.9999]error=5.5892e-05

(3)SOR迭代(

)。

●N=1.334使用matlab求解程序如下:

A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];

b=[0;5;-2;5;-2;6];

error=1;

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

X=zeros(size(b));

whileerror>0.0001,

n=1.334;

X=(D-n*L)\[(1-n)*D+n*U]*X+n*[(D-n*L)\b];

error=norm(b-A*X)/norm(b);

disp(X);

end

disp(error);

此循环得到的X=[0.9999;2.0000;1.0000;1.9999;1.0000;2.0000]error=6.3632e-05

●N=1.95使用matlab求解程序如下:

A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];

b=[0;5;-2;5;-2;6];

error=1;

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

X=zeros(size(b));

whileerror>0.0001,

n=1.95;

X=(D-n*L)\[(1-n)*D+n*U]*X+n*[(D-n*L)\b];

error=norm(b-A*X)/norm(b);

disp(X);

end

disp(error);

此循环得到的X=[0.9999;2.0001;0.9999;1.9999;1.0001;1.9999]error=9.0363e-05

●N=0.95使用matlab求解程序如下:

A=[4-10-100;-14-10-10;0-14-10-1;-10-14-10;0-10-14-1;00-10-14];

b=[0;5;-2;5;-2;6];

error=1;

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

X=zeros(size(b));

whileerror>0.0001,

n=0.95;

X=(D-n*L)\[(1-n)*D+n*U]*X+n*[(D-n*L)\b];

error=norm(b-A*X)/norm(b);

disp(X);

end

disp(error);

此循环得到的X=[0.9997;1.9997;0.9997;1.9998;0.9998;1.9999]error=8.6235e-05

5.用逆幂迭代法求

最接近于11的特征值和特征向量,准确到

解:

matlab程序如下:

a=[631;321;111];

I=[100;010;001];

b0=a-11*I;

v0=[1;1;1];

m=max(abs(v0));

flab=1;

whileflab>0.001,

u=v0/m;

v0=b0\u;

[tv,ti]=max(abs(v0));

n=v0(ti);

flab=abs(n-m);

m=n;

end

m=1/m+11;

disp(m);

运行结果如下:

即离11最近的特征值为7.8745;相应的特征向量u=[1.0000;0.5503;0.2271]。

6.用经典R-K方法求解初值问题

(1)

解:

采用经典R-K公式计算的MATLAB程序如下:

y1=2;

y2=3;

forh=0:

0.01:

10,

k1=0.01*(-2*y1+y2+2*sin(h));

l1=0.01*(y1-2*y2+2*cos(h)-2*sin(h));

k2=0.01*(-2*(y1+0.5*k1)+(y2+0.5*l1)+2*sin(h+0.005));

l2=0.01*((y1+0.5*k1)-2*(y2+0.5*l1)+2*cos(h+0.005)-2*sin(h+0.005));

k3=0.01*(-2*(y1+0.5*k2)+(y2+0.5*l2)+2*sin(h+0.005));

l3=0.01*((y1+0.5*k2)-2*(y2+0.5*l2)+2*cos(h+0.005)-2*sin(h+0.005));

k4=0.01*(-2*(y1+k3)+(y2+l3)+2*sin(h+0.01));

l4=0.01*((y1+k3)-2*(y2+l3)+2*cos(h+0.01)-2*sin(h+0.01));

y1=y1+1/6*(k1+2*k2+2*k3+k4);

y2=y2+1/6*(l1+2*l2+2*l3+l4);

ifh==fix(h);

fprintf('%.1d%.4f%.4f\n',h,y1,y2);

else

end

end

结果如下所示:

(2)

和精确解

比较,分析结论。

Matlab程序如下:

y1=2;

y2=3;

forh=0:

0.00001:

10,

k1=0.00001*(-2*y1+y2+2*sin(h));

l1=0.00001*(998*y1-999*y2+999*cos(h)-999*sin(h));

k2=0.00001*(-2*(y1+0.5*k1)+(y2+0.5*l1)+2*sin(h+0.000005));

l2=0.00001*(998*(y1+0.5*k1)-999*(y2+0.5*l1)+999*cos(h+0.000005)-999*sin(h+0.000005));

k3=0.00001*(-2*(y1+0.5*k2)+(y2+0.5*l2)+2*sin(h+0.005));

l3=0.00001*(998*(y1+0.5*k2)-999*(y2+0.5*l2)+999*cos(h+0.000005)-999*sin(h+0.000005));

k4=0.00001*(-2*(y1+k3)+(y2+l3)+2*sin(h+0.00001));

l4=0.00001*(998*(y1+k3)-999*(y2+l3)+999*cos(h+0.00001)-999*sin(h+0.00001));

y1=y1+1/6*(k1+2*k2+2*k3+k4);

y2=y2+1/6*(l1+2*l2+2*l3+l4);

ifh==fix(h),

fprintf('%.1d%.4f%.4f\n',h,y1,y2);

else

end

end

结果如下:

精确解:

forx=0:

1:

10,

y1=2*exp(-x)+sin(x);

y2=2*exp(-x)+cos(x);

fprintf('%.1d%.4f%.4f\n',x,y1,y2);

end

结果;

结果分析:

四阶RungeKutta方法得到的结果已很接近精确解,证明这种迭代方法精确度很好,是一种有效的算法。

但是要注意龙格-库塔公式的推导基于泰勒展开方法,因而它要求所求的的解具有较好的光滑性质。

反之,如果解得光滑性差,那么,使用四阶龙格-库塔求得的数值解精度就不是太高,此种情况可以采用缩小步长来解决,比如上述计算。

7.用有限差分法求解边值问题(h=0.1):

.

微分方程式可以变为

用有限差分法matlab程序如下:

h=0.1;

n=2/0.1-1;

g

(1)=1/(h.^2);

g(n)=1/(h^2);

fori=2:

1:

18,

g(i)=0;

end

g=[g

(1);g

(2);g(3);g(4);g(5);g(6);g(7);g(8);g(9);g(10);g(11);g(12);g(13);g(14);g(15);g(16);g(17);g(18);g(19)];

disp(g);

fori=1:

1:

19,

forj=1:

1:

19,

ifi==1,

H(1,1)=2/(h.^2)+(1+(-1+0.1*i).^2);

H(1,2)=-1/(h.^2);

elseifi==19,

H(19,18)=-1/(h.^2);

H(19,19)=2/(h.^2)+(1+(-1+0.1*i).^2);

else

ifj==i,

H(i,j)=2/(h.^2)+(1+(-1+0.1*i).^2);

elseifj==i-1,

H(i,i-1)=-1/(h.^2);

elseifj==i+1;

H(i,i+1)=-1/(h.^2);

else

H(i,j)=0;

end

end

end

end

disp(H);

y=H\g;

fori=1:

1:

19,

fprintf('%.4f%.4f\n',-1+0.1*i,y(i,1))

end

运算结果为:

H矩阵为:

Y在各点的近似值为:

X

Y

8.用函数y=asin(bx)拟合数据.

x

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

y

0.6

1.1

1.6

1.8

2.0

1.9

1.7

1.3

Matlab上机程序为:

function[err,a,b]=nlfitb(x,y)

ifnargin<2,

x=[1:

8]'/10;

y=[0.61.11.61.82.01.91.71.3]';

end

beta0=[11]';

beta=nlinfit(x,y,@mymodel,beta0);

fprintf('Thenonlinearleastsquarefittingy=a*sin(b*x)fordata\n\n');

fprintf('%6.1f',x);

fprintf('%6.1f',y);

fprintf('\n\nis\n\nty=%7.4f*sin(%7.4f*x)\n\n',beta);

z=linspace(x

(1),x(end),100);

plot(x,y,'ro',z,beta

(1)*sin(beta

(2)*z),'b-.');

functionyb=mymodel(beta,xb)

yb=beta

(1)*sin(beta

(2)*xb);

计算结果:

9.拟合形如f(x)≈(a+bx)/(1+cx)的函数的一种快速方法是将最小二乘法用于下列问题:

f(x)(1+cx)≈(a+bx),试用这一方

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2