MATLAB实习报告

  • 格式:pdf
  • 大小:203.12 KB
  • 文档页数:13

MATLAB实习报告

MATLAB课程设计报告

摘要MATLAB是由美国mathworks公司发布的主要⾯对科学计算、可视化以及交互式程序设计的⾼科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及⾮线性动态系统的建模和仿真等诸多强⼤功能集成在⼀个易于使⽤的视窗环境中,为科学研究、⼯程设计以及必须进⾏有效数值计算的众多科学领域提供了⼀种全⾯的解决⽅案,代表了当今国际科学计算软件的先进⽔平。MATLAB的基本数据单位是矩阵。MATLAB⼏乎包括了矩阵的所有运算,从简单的矩阵⽣成及简单的运算到⼤量的矩阵运算与转换。MATLAB应⽤于矩阵有很⼤的必要性和很重要的现实意义。MATLAB具有强⼤的⼆维、三维绘图功能,提供了许多绘图语句。利⽤MATLAB我们可以画出我们所需要的⼏乎所有图形。

关键词:矩阵;解⽅程组;画图

⽬录

⼀、背景 (4)

⼆、第⼀部分题⽬ (17)

三、第⼆部分选做题 (19)

四、⼼得体会 (19)

五、参考⽂献 (19)

⼀、背景MATLAB软件功能简介

MATLAB的名称源⾃Matrix Laboratory,1984年由美国Mathworks公司推向市场。它是⼀种科学计算软件,专门以矩阵的形式处理数据。MATLAB将⾼性能的数值计算和可视化集成在⼀起,并提供了⼤量的内置函数,从⽽被⼴泛的应⽤于科学计算、控制系统和信息处理等领域的分析、仿真和设计⼯作。MATLAB软件包括五⼤通⽤功能,数值计算功能(Nemeric)、符号运算功能(Symbolic)、数据可视化功能(Graphic)、数字图形⽂字统⼀处理功能(Notebook)和建模仿真可视化功能(Simulink)。其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗⼝。该软件有三⼤特点,⼀是功能强⼤;⼆是界⾯友善、语⾔⾃然;三是开放性强。⽬前,Mathworks 公司已推出30多个应⽤⼯具箱。MATLAB在线性代数、矩阵分析、数值及优化、数值统计和随机信号分析、电路与系统、系统动⼒学、次那好和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统以及财政⾦融等众多领域的理论研究和⼯程设计中得到了⼴泛应⽤。MATLAB在信号与系统中的应⽤主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,⽽MATLAB借助符号数学⼯具箱提供的符号运算功能,能基本满⾜信号与系统课程的需求。例如解微分⽅程、傅⾥叶正反变换、拉普拉斯正反变换和z正反变换等。MATLAB在信号与系统中的另⼀主要应⽤是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零极点图绘制等内容。数值计算仿真分析可以帮助学⽣更深⼊地理解理论知识,并为将来使⽤MATLAB进⾏信号处理领域的各种分析和实际应⽤打下基础。

⼆、第⼀部分1. 求解常微分⽅程x’’=-x’+x+1,x’(0)=1,x(0)=0(使⽤函数dsolve )

dsolve('D2x=-Dx+x+1','Dx(0)=1','x(0)=0')

ans =

(5^(1/2)*exp(t*(5^(1/2)/2 - 1/2))*(5^(1/2) + 3))/10 + (5^(1/2)*(5^(1/2) -

3))/(10*exp(t*(5^(1/2)/2 + 1/2))) – 1

2. 请⽤梯形法、⾟普森法分别计算积分值?++1

021dx x x (trapz 、quad ) f=inline('sqrt(x.^2+x+1)','x');>> quad(f,0,1)

ans =

1.3369

>> x=0:0.01:1;y=sqrt(x.^2+x+1);trapz(x,y)

ans =

1.3369

3. 计算⼆重积分??+++++102022)12(dxdy y x xy y x (使⽤函数dblquad ) dblquad('x.^2+y.^2+x*y+2*x+y+1', 0, 1, 0, 2)

ans =

10.3333

4. 矩阵M=[1,2,6; 4,2,7; 8,9,3],求M 的LU 分解,QR 分解,对⾓阵,特征值分解。

(使⽤函数lu 、qr 、shol 、eig )M=[1,2,6; 4,2,7; 8,9,3]; lu(M)

ans =

8.0000 9.0000 3.0000

0.5000 -2.5000 5.5000

0.1250 -0.3500 7.5500

qr(M)

ans =

9.0000 9.1111 6.4444

-0.5000 2.4470 -2.3360

-1.0000 -0.4719 6.8566

[D,X]=eig(M)

D =

-0.4111 -0.7719 -0.4992

-0.5484 0.6237 -0.3914

-0.7282 0.1229 0.7730

X =

14.2944 0 0

0 -1.5712 0

0 0 -6.7232

5. a=3,A=4,b=a2,B=b2-1,c=a+A-2B,C=a+B+2c,求C。(使⽤函数solve)

>> syms a b c A B C

eq1='a=3';

eq2='A=4';

eq3='b=a^2';eq4='B=b^2-1';

eq5='c=a+A-2*B';

eq6='C=a+B+2*c';

x=solve(eq1,eq2,eq3,eq4,eq5,eq6);

>> x.C

ans =-223

6. ⽤两种⽅法求解Ax=b的解。(A为四阶随机矩阵,b为四阶向量,⾃⼰创建)。⽅法⼀:>> A=rand(4)

A =

0.9355 0.0579 0.1389 0.2722

0.9169 0.3529 0.2028 0.1988

0.4103 0.8132 0.1987 0.0153

0.8936 0.0099 0.6038 0.7468

>> B=[1;2;3;4];x=inv(A)*B

x = -0.2035

2.3800

5.7042

0.9564

⽅法⼆:>> A(:,5)=B;rref(A)

ans =

1.0000 0 0 0 -0.2035

0 1.0000 0 0 2.3800

0 0 1.0000 0 5.7042

0 0 0 1.0000 0.9564

7.)1(5)25.1/()8.0()(323x x x x x x f +-+-+=,⽤两种⽅法求函数的根,并求其极值与零点。

⽅法1: >> solve('x^3+(x-4/5)^2/(x+5/4)^3-5*x-5/x');x=double(ans);>> for i=1:length(x)

xx(i)=isreal(x(i));

end

>> x=x(xx)

x =

2.4156

⽅法2:>> fzero('x.^3+(x-0.8).^2/(x+1.25).^3-5*(x+1/x)',3)

ans =2.4156求极值:>> syms x y

>> y=x.^3+(x-0.8).^2/(x+1.25).^3-5*(x+1/x);

>> dydx=diff(y);

>> solve(dydx);x=double(ans);

>> for i=1:length(x)

xx(i)=isreal(x(i));

end

>> t=x(xx)

t = -0.4694

-2.4039

>> x=t(1);y1=subs(y)

y1 = 16.2832

>> x=t(2);y2=subs(y)

y2 = -6.4732

>> z=diff(diff(y));

>> x=t(1);z1=subs(z)

z1 = 205.8164

>> x=t(2);z2=subs(z)

z2 = -53.5382

所以函数f(x)存在⼀个极⼤值点x1=-2.4039,极⼤值为-6.4732;⼀个极⼩值点x2=-2.4039,极⼩值为16.28328、f(x)的定义如下:2226,04()56,010,231,x x x x f x x x x x x x x ?+-<≠-?=-+≤<≠≠??--?

且且其它,写⼀个matlab 函

数func1实现该函数。function func1 (x)

if x<0&&x==-4

y=x^2+x-6;

elseif x>=0&x<10&x~=2&x~=3

y=x^2-5*x+6;

else

y=x.^2-x-1;

end

fprintf('%d\n',y);

9、写⼀个MATLAB⼩程序,求出最⼩的 n 值,使得 n! > realmax。

function f=realmax10()s=1;n=1;

while(1)

n=n+1;

s=s*n;

if s>realmax

break;

end

end

fprintf(' %d\n',n)

10、写⼀个 MATLAB 函式 pifun.m 来计算下列级数:

f(n) = 4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...)

其中 n 为函式的输⼊,级数和 f(n) 则是函式的输出。此外,你必须进⾏下列事项:function f=pifun(n)

n=input(‘输⼊n的值’)

l=1;s=0;

for i=1:n

s=s+l/(2*i-1);

l=-l;

end

s=4*s;

disp('f(n)的值是');disp(num2str(s))

(1) 使⽤ tic 和 toc 指令来测量 pifun(100000) 的计算时间。如果你不知道如何使⽤这两个指令,请使⽤ help tic 及 help toc来查出它们的⽤法。我的计算机是 Pentium-450,所得的计算时间约为 2 秒。请说明你的计算机规格以及其计算时间。>> tic,pifun(100000),toc

f(n)的值是

3.1416

Elapsed time is 0.028928 seconds.

Cpu Pentium dual —core e5300

(2)使⽤ flops 指令来测量 pifun(100000) 所⽤到 floating point operations 的计算次数。如果你不知道如何使⽤这个指令,请使⽤ help flops 来查出它的⽤法。11. 解线性⽅程组 -=+=+--=-+=-+1

423

5231543421431321x x x x x x x x x x x 并求系数矩阵的⾏列式。

a=[5 1 -1 0 1;1 0 3 -1 2;-1 -1 0 5 3;0 0 2 4 -1];

>> rref(a)

ans =