admin管理员组

文章数量:1532345

2024年5月23日发(作者:)

Matlab实验报告

一, MATLAB的基本功能:

MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序

设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统

的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计

以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上

摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计

算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中

在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创

建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与

通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相

似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并

且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在

新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以

将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的

MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。

(1)友好的工作平台和编程环境 MATLAB由一系列工具组成。这些工具方便用户使用

MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命

令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文

件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也

越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本

的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程

环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报

告出现的错误及进行出错原因分析。

(2)简单易用的程序语言 Matlab一个高级的矩阵/阵列语言,它包含控制语句、函数、

数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命

令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的

MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,

而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的

科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到

科学研究及工程计算各个领域的重要原因。

(3)强大的科学计算机数据处理能力 MATLAB是一个包含大量计算算法的集合。其

拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。

函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错

处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的

情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单

最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题

其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、

傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三

角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。

(4)出色的图形处理功能 MATLAB自产生之日起就具有方便的数据可视化功能,以

将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维

和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的

MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都

具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其

他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB

同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB

也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图

形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满

足。

(5)应用广泛的模块集合工具箱 MATLAB对许多专门的领域都开发了功能强大的模

块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱

学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸

到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、

优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控

制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性

控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力

系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。

(6)实用的程序接口和发布平台 新版本的MATLAB可以利用MATLAB编译器和

C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和

C++代码。允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB

网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一

个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是

MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包

括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。

(7)应用软件开发(包括用户界面) 在开发环境中,使用户更方便地控制多个文件

和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的

图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和

HDF5进行连接。

二,MATLAB实验作业:

习题一:

1. 输入20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB的max

函数、min函数来实现。

(1)循环结构:

方法一:

A=[1,2,3,4,5,6,7,8,9,0,12,34,35,23,78,98,100,11,123,234];

B=[1,2,3,4,5,6,7,8,9,0,12,34,35,23,78,98,100,11,123,234];

for j=1:20

for i=1:19

if A(i)>A(i+1)

t=A(i+1);

A(i+1)=A(i);

A(i)=t;

end

if B(i)

q=B(i);

B(i)=B(i+1);

B(i+1)=q;

end

end

end

A(i+1) %最大值

B(i+1) %最小值

运行结果:

ans =

234

ans =

0

说明:方法一是根据C语言中的冒泡法编写的,比较麻烦,也许是本人的能力有限,下面

我用了一种简便的编程循环,见方法二。

方法二:

A=[1 2 3 4 5 6 7 23 32 12 53 1 23 53 5 235 31 5131 332 3 21];

max=A(1);

min=A(1);

for i=1:20;

mid=A(i);

if mid>max;

max=mid;

end

if mid

min=mid;

end

end

max

min

结果:

max =

5131

min =

1

(2)调用函数实现:

max函数编写如下:

function f=max(A)

f=A(1);

for i=1:20;

mid=A(i);

if mid>f;

f=mid;

end

end

end

mix函数编写如下:

function f=min(A)

f=A(1);

for i=1:20;

mid=A(i);

if mid

f=mid;

end

end

end

调用脚本文件:

A=[12,23,21,24,56,45,67,788,33,45,2,3,4,5,6,7,8,2,9,0];

max(A)

min(A)

结果:

ans =

788

ans =

0

2.求Fibonacci数列

(1)大于4000的最小项。

(2)5000之内的项数。

(1)

a=ones(1,4000);

a(1)=1;

a(2)=1;

i=2;

while a(i)<=4000

a(i+1)=a(i-1)+a(i);

i=i+1;

end;

a(i)

i

ans =

4181

i =

19

(2)函数文件:

function f=ffib(n)

f=[1,1];

i=1;

while f(i)+f(i+1)

f(i+2)=f(i)+f(i+1);

i=i+1;

end

脚本文件:

ffib(5000)

结果:

ans =

Columns 1 through 12

1 1

13 21 34

Columns 13 through 19

233 377

2 3

55 89

610 987

5

144

8

2584

1597

4181

3. 写出下列程序的输出结果:

s=0;

a=[12,13,14;15,16,17;18,19,20;21,22,23];

for k=a

for j=1:4

if rem(k(j),2)~=0

s=s+k(j);

end

end

end

s

输出结果:

s =

108

解释说明:

给变量s赋值为0,给出四行三列的矩阵a,for循环,其中rem(k(j),2)~=0,是k(j)对2取

余不等于0的意思。然后把各行的对k(j)除2取余不等于0的数(即奇数)相加,最后和

为s,s的值为108。

作业二:

1、解方程组Ax=b,分别用求逆解法与直接解法求其解。

21000

12100



A

01210

,



00121



00012

1

0



b

0



0

0

(1)直接法:

A=[2,-1,0,0,0;-1,2,-1,0,0;0,-1,2,-1,0;0,0,-1,2,-1;0,0,0,-1,2]

b=[1;0;0;0;0];

x=Ab

结果:

x =

0.8333

0.6667

0.5000

0.3333

0.1667

(2)逆解法:

A=[2,-1,0,0,0;-1,2,-1,0,0;0,-1,2,-1,0;0,0,-1,2,-1;0,0,0,-1,2];

b=[1;0;0;0;0];

x=inv(A)*b

结果:

x =

0.8333

0.6667

0.5000

0.3333

0.1667

说明:两种方法的结果一致,根据线性代数的知识同样可以解释。

2、编一个m程序,求N阶方阵A的行列式的值。

函数文件:

function f= det( A )

A=rand(n)

det(A)

end

调用脚本文件:

n=8;

det(A)

结果:

ans =

-0.2767

3.今有多项式P1(x)=x4-2x+1,P2(x)=x2+4x-0.5,要求先求得P(x)=P1(x)+P2(x),然后计算

xi=0.2*i各点上的P(xi)(i=0,1,2,…,5)值。

P(x)=P1(x)+P2(x)=x4+x2+2x+0.5

求根:

A=[1 0 1 2 0.5];

x=roots(A)

结果为:

x =

0.5634 + 1.3057i

0.5634 - 1.3057i

-0.8282

-0.2985

求值:x1=0,x2=0.2,x3=0.4,x3=0.6,x4=0.8,x5=1.0,时的P(xi)的值

A=[1 0 1 2 0.5];

x=[0 0.2 0.4 0.6 0.8 1.0]

y=polyval(A,x)

结果:

x =

0 0.2000 0.4000 0.6000 0.8000 1.0000

y =

0.5000 0.9416 1.4856 2.1896 3.1496 4.5000

4.试编一个m程序,将一维数组x中的N个数按颠倒的次序重新存储。如N=5,原来x

为:

x=[ 1 3 5 7 9 ]

而经过颠倒处理后x中数据的次序应该为:

x=[ 9 7 5 3 1 ]

function b=fun1(x)

N=length(x)

for i=1:N

b(i)=x(N-i+1);

end

fun1([1 3 5 7 9])

N =

5

ans =

9 7 5 3 1

习题三:

1、在[0 2π]范围内绘制二维曲线图y=sin(x)*cos(5x)。

x=0:0.01:2*pi;

y=sin(x).*cos(5*x);

plot(y);

2、在[0 2π]范围内绘制以Y轴为对数的二维曲线图。

y=|1000sin(4x)|+1

x=0:0.01:2*pi;

y=abs(1000*sin(4*x))+1;

semilogy(x,y);

3. 把自己姓名中的各个拼音字母(小写)所对应的ASCII值转换为二进制序列,并用二进

制脉冲绘图表示出来

我的名字的小写字母是:jiachanglin 对应的ASCII值分别为:106,105,97,99,104,

97,110,103,108,105,110.转换二进制序列为:

jia:111100001,chang:,lin:

x=[1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1

1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 0 1 0 0 1 1 1 0 1 1 1 0];

stem(x)

axis([0 76 0 1]);

title('jiachanglin');

xlabel('X轴');

ylabel('Y轴');

执行结果:

jiachanglin

1

0.9

0.8

0.7

0.6

Y

0.5

0.4

0.3

0.2

0.1

0

010203040

X轴

506070

三,对MATLAB的认识与体会:

一个星期的MATLAB的学习结束了,感觉时间过的可真快啊!通过这段时间的

学习,我知道了matlab真的是博大精深,而我只是学到了一点点。我很喜欢matlab

的简单的语法,易于绘制图形一开始就感觉跟变魔术一样简单的语句就会有精美的

图形这就更加让我对它如痴如醉了。它不但有很强的图形绘制能力而且它其中包

含的toolbox更是让人用起来得心应手这也使得我对它更加的感兴趣。matlab的

help功能 help:最有效的命令其实,可以这样说吧,如果离开matlab课本,我想我自己

是基本上什么都不会. 一遇到什么问题,通常我的第一反应是:help它帮我解决了

matlab学习中的许多困难与障碍所以在有不懂得地方第一个想到的就是它的help

功能。

这个星期我们上了五次理论课,五次实验课。感觉这些时间真的很少,我又在我

的电脑上安装了MATLAB,以便自己在课余的时间能够学习MATALB。学习MATLAB

要多动脑,多动手写程序、调试,看程序时候多想几个为什么,理解别人程序中精华

的东西,多自己调调程序,可以改改程序,把知识转成自己的。要试着解决类似的问

题,要举一反三,要学会变通。善于总结,学习过的知识,看过好的帖子可以收藏起

来,过段时间再复习一下,一段时间的积累,你会发现你的水平在慢慢提高。

五次理论课,老师把MATLAB的功能以及详细的用法都给我们介绍了,还给我们

传了课件有助于我们课下的学习。此次MATLAB的学习 ,对我今后的学习,毕业设

计,工作都有很大的帮助,以后我会继续学习MATLAB,感谢老师的教导。

本文标签: 程序函数用户矩阵