Matlab实验报告

更新时间:2024-03-27 19:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中南大学 Matlab实验报告

目录

实验一 熟悉MATLAB环境………………………………………… 3 实验二 数值数组创建、应用及可视化……………………………… 9 实验三 字符串数组的使用、简单脚本文件和函数的编写…………15 实验四 数据可视化方法…………………………………………… 22 实验感想及心得会……………………………………………………..27

【实验目的】

1 、熟悉 MATLAB 主界面,并学会简单的菜单操作。 2 、学会简单的矩阵输入与信号输入。 3 、掌握部分绘图函数。

【实验内容及实验结果】

1 .从屏幕上输入矩阵 A=[1 2 3 ;4 5 6;7 8 9] 回车 A=[1,2,3;4,5,6;7,8,9] 回车 观察输出结果。

2 .试用回车代替分号,观察输出结果。 3 .输入 size(A) ,观察结果。

实验一 熟悉MATLAB环境

4 .输入矩阵 B=[9,8,7;6,5,4;3,2,1];回车

输入矩阵 C=[4,5,6;7,8,9;1,2,3];回车,然后分别键入 A B C 回车观察结果。

5 .选择 File | new 菜单中的M-file ,输入 B=[9,8,7;6,5,4;3,2,1] ;保存为 B.M 文件,退出编辑环境。此时在工作环境中使用 B 命令就可调出 B 矩阵。

6 .再试着输入一些矩阵,矩阵中的元素可为任意数值表达式,但注意 : 矩阵中各行各列的元素个数需分别相等,否则会给出出错信息。 7 .输入 who 和 whos 观察结果,了解其作用。

二.常用基本命令的使用 数据文件的存取训练:利用 save 和 load 指令可以方便地把当前工作空间的数据变量保存为数据文件。接题一,输入: save a 回车,表示把当前工作空间的所有变量保存为 a.mat 文件。输入 save a A C 回车,表示把当前内存中的变量 A 、 C 保存为 a.mat 文件。类似的还有 load 命令,实现保存数据变量的装载,执行 clear 命令,然后运行 load a 回车,观察工作空间的变化。 save 、 load 、 clear 命令还有一些其他的应用格式,具体可参看帮助文件。 三.基本序列运算

1 .数组的加减乘除和乘方运算 2 .输入 A=[1 2 3] ,B=[4 5 6],求C=A+B,D=A-B,E=A.*B, F=A./B,G=A.^B, 并用 stem 画出A,B,C,D,E,G。再输入一些数组,进行类似运算。

>> stem(A) >> stem(B)

>>

stem(C) >> stem(D)

>> stem(E) >> stem(F)

3 .在命令窗口用 plot 指令粗略描绘下列各函数的波形(其中对于连续信号可取时间间隔为 0.001,可参看下面的a的实例来实现,数学函数 MATLAB 实现参见附录)

a. f?t??3?e?t 0?t?3

实现方法,在命令窗口执行一下指令,可简单描绘出函数曲线: t=0:.001:3; y=3-exp(-t); plot(t,y)

b. f?t??5e?t?3e?2t 0?t?3 >> t=0:0.001:3;

>> y=5*exp(-t)+3*exp(-2*t); >> plot(t,y)

c. f?t??e?tsin?2?t? 0?t?3 >> t=0:0.001:3;

>> y=exp(-t).*sin(2*pi*t); >> plot(t,y)

d. f?t??sin?at?/at ?2??t?2? ( 在 MATLAB 中用pi来实现) >> t=0:0.001:3; >> a=2;

>> y=sin(a*t)./(a*t); Warning: Divide by zero. >> plot(t,y)

f. f?t??ek 0?k?5 >> k=0:0.001:5;

>> y=exp(k); >> plot(k,y)

三. M 脚本文件编写初步用 M 文件编辑器编写脚本文件重新描绘上面函数波形。

实验二 数值数组创建、应用及可视化

[实验目的]

1 .掌握二维数组的创建、寻访,区分数组运算与矩阵运算的区别。 2 .掌握标准数组生成函数和数组构造技法。 3 .进一步熟悉 M 脚本文件编写的方法和技巧。

[实验内容]

一.数组的创建和寻访

1 .一维数组在命令窗口执行下面指令,观察输出结果,体味数组创建和寻访方法,%号后面的为注释,不用输入。

rand('state',0) % 把均匀分布伪随机发生器置为 0 状态 x=rand(1,5) % 产生(1*5)的均布随机数组 x(3) % 寻访数组 x 的第三个元素。

x([1 2 5]) % 寻访数组 x 的第一、二、五个元素组成的子数组。 x(1:3) % 寻访前三个元素组成的子数组

x(3:end) % 寻访除前 2 个元素外的全部其他元素。End是最后一个元素的下标。

x(3:-1:1) % 由前三个元素倒排构成的子数组 x(find(x>0.5)) % 由大于 0.5 的元素构成的子数组

x([1 2 3 4 4 3 2 1]) % 对元素可以重复寻访,使所得数组长度允许大于原数组。

x(3) = 0 % 把上例中的第三个元素重新赋值为0。

x([1 4])=[1 1] % 把当前 x 数组的第一、四个元素都赋值为1。 x[3]=[] % 空数组的赋值操作 2 .二维数组

(1) 在命令窗口执行下面指令,观察输出结果

a=2.7358; b=33/79; % 这两条指令分别给变量 a , b 赋值。

C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i] % 这指令用于创建二维组C

M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16] % 创建复数数组的另一种方法

CN=M_r+i*M_i % 由实部、虚部数组构成复数数组

(2) 利用 M 文件创建和保存下面的数组(分号后面是一个空格后加3个小

数点,表示换行续写) AM=[101,102,103,104,105,106,107,108,109;...

201,202,203,204,205,206,207,208,209;... 301,302,303,304,305,306,307,308,309];

(3) 仿照问题 1 中方法找出数组A??的元素。

??4?2024??中所有绝对值大于 ?3?1135??3

(4)在命令窗口执行下面指令,体味二维数组的子数组寻访和赋值

A=zeros(2,4) % 创建(2*4)的全零数组 A(:)=1:8 % 全元素赋值方式

s=[2 3 5]; % 产生单下标数组行数组

A(s) % 由“单下标行数组”寻访产生 A 元素组成的

行数组

Sa=[10 20 30]’ %Sa 是长度为 3 的“列数组” A(s)=Sa % 单下标方式赋值

A(:,[2 3])=ones(2) % 双下标赋值方式:把 A 的第2 、3列元素

全赋为1

(5) 运行指令

rand(‘state ’,11),A=rand(3,10000);B=(A>0.5);C=2*B-1;

首先预测( C*C’)/100 的运行结果,然后再在机器上验证。(本方法提供了产生通信等仿真中常需若干独立的双随机码的方法原型。)

(6) 在命令窗口执行下面指令,体味数组运算与矩阵运算的区别 clear ;A=zeros(2,3);

A(:)=1:6; % 全元素赋值法

A=A*(1+i) % 运用标量与数组乘产生复数矩阵

A_A=A.' % 数组转置,即非共轭转置,其中单引号实现转置功能

A_M=A' % 矩阵转置,即共轭转置

二.编写如图所示波形的 MATLAB 脚本文件,图中虚线为正弦波,要求它分别在?及

122处削顶。 2

图 1

可能用到的额外指令: find 、 hold on 、 hold off 、 legend ,具体使用方法使用 help+指令名来解答。

[实验结果]

一.数组的创建和寻访 1、一维数组

2、二维数组 (1)

(3)

(4)

(5)

(6)

二、

实验三

[实验内容]

一.串数组的创建和寻访

1 .先请实际操作下例,以体会数值量与字符串的区别 clear % 清除所有内存变量 a=12345.6789 % 给变量 a 赋数值标量 class(a) % 对变量 a 的类别进行判断 a_s=size(a) % 数值数组 a 的“大小”

b='S' % 给变量 b 赋字符标量(即单个字符) class(b) % 对变量 b 的类别进行判断 b_s=size(b) % 符号数组 b 的“大小

whos % 观察变量 a,b 在内存中所占字节

2 .已知串数组 a=”This is an example.”, 试将其到序输出。

3 .接上题,试执行ascii_a=double(a),观察其ASCII码,并将ASCII码变回字符串。 4 .设A=”这是一个算例”,重复上面的2-3。

5 .尝试用直接输入法在命令窗口创建字符串 s ,第一行时“ This string array ” , 第二行是“ has multiple rows. ”。

6 .利用串操作函数char、str2mat、strvcat分别写出使以下这段文字成为字符串的程序,注意保持这段文字的格式。

在英式用法中,引号通常是单引号,如‘Fire!’。

In GB usage quotation marks are usually single: ’Fire!’ .

二.脚本文件实现y?1?e0.4tcos?3t?,0?t?3?,并在图上标出图名和极大值点坐标。如下图所示。

可能用到的函数: num2str, char, text, hold on, 具体应用自己查找 help 文档。 三.编程实现分别用 for 或 while 循环语句计算:

K??2i?1?2?22???263

i?063的程序,并给出运行结果。此外,实现一种避免使用循环的的计算程序。

四.函数文件 1 .详读并运行下面的circle.m函数文件。体会 M 函数文件的编写结构及方法。 % 后面的内容称为注释行,不被执行,起注释说明作用。

function sa = circle(r,s) % 首行是函数声明行,以 function 开头 %CIRCLE 以制定颜色画半径为 r 的圆面 % r 指定半径的数值 % s 指定线色的字符串 % sa 圆面积 % % circle(r) 利用蓝实线画半径为 r 的圆周线 % circle(r,s) 利用串 s 指定的线色画半径为 r 的圆周线 % sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面 % sa=circle(r,s) 计算圆面积,并画半径为 r 的 s 色圆面 % if nargin>2 % nargin 表示输入宗量的变量个数,是系统保留变量 error('输入宗量太多。'); % error 把引号的内容在命令窗口前加问号输 end if nargin==1 s='b'; end clf % 清图形窗口 t=0:pi/100:2*pi; x=r*exp(i*t); if nargout==0 % nargin 表示输出宗量的变量个数,是系统保留变量 plot(x,s); else sa=pi*r*r; fill(real(x),imag(x),s) % fill 指令是填充颜色指令,具体看帮助 end axis('square') % 使得输出图形坐标为正方形 2 .编写一个简单的函数文件,它具有如下性质:该函数被调用时,如果不指定输入变量,则自动输出“用户,你忘记给定输入变量了!”;当输入大于1的整数时,则输出“你是一个合法用户!”;当输入的是一个非正整数时,函数文件会给出一个错误提示“你是非法用户!” 【 提示:可能用到 disp,error 等指令,使用方法自己查询帮助 】

【实验结果】

一、 1.

2、

3、

4、

5、

二、

三、

Circle(2)

Circle(5)

实验四

【实验内容】

一.仿照运行,体会数据可视化方法。

1 .已知n?0,1,?,12,y?n?6??1,运行下面程序,体会离散数据可视化方法。

% 用 plot 实现离散数据可视化 n=0:12; % 产生一组自变量数据 y=1./abs(n-6); % 计算相应点的函数值 plot(n,y,'r*','MarkerSize',20) % 用红花标出数据点 grid on % 画坐标方格 % 用stem实现离散数据可视化 n=0:12; y=1./abs(n-6); stem(n,y) 说明:

plot和stem指令均可以实现离散数据的可视化,但通常plot更常用于连续函数中特殊点的标记;而stem广泛运行与数字信号处理中离散点的图示。

用户在运行上面例程时会发现在命令窗口出现警告:Warning: Divide by zero!即警告程序中出现非零数除以0的指令。MATLAB对于这种情况并不中止程序只是给该项赋值为inf 以做标记。

2 .下面时用图形表示连续调制波形y?sin?t?sin?9t?,仿照运行,分析表现形式不同的原因。

clear t1=(0:11)/11*pi; y1=sin(t1).*sin(9*t1); t2=(0:100)/100*pi; y2=sin(t2).*sin(9*t2); subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图(1)'); subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图(2)'); subplot(2,2,3),plot(t1,y1,t1,y1,'r.') axis([0,pi,-1,1]),title('子图(3)'); subplot(2,2,4),plot(t2,y2) axis([0,pi,-1,1]),title('子图 (4)') 二.编程实现。 1 .用图形表示连续调制波形y?sin?t?sin?9t?,过零点及其包络线,如下图所

示。

2 .编写函数 [x,n]=stepseq(n0,n1,n2), 实现:

?1n1?n?n0u?n????0n2?n?n0,n为整数

并编写脚本文件实现:

x?n??n?u?n??u?n?10??/10e?0.3?n?10??u?n?10??u?n?20??,0?n?20

要求在脚本文件中调用 stepseq 函数,最后绘出序列x?n?在给定区间的波形图。

3 .编写一个函数文件[y,n]=sigadd(x1,n1,x2,n2),实现两个对应样本之间的相加,其中x1是长度为n1的序列,x2是长度为n2的序列,n1、n2 分别是x1、x2的位置信息(n1、 n2 均为整数),如:

n1={ -3,-2,-1,0,1,2,3,4} ,对应的 x1={ 2, 3, 1,4,1,3,1,2} ;

n2={-4,-3,-2,-1,0,1,2} ,对应的 x2={ 1, 3, 2, 5,1,3,4} 。

当调用函数 [y,n]=sigadd(x1,n1,x2,n2) 时,我们应该得到: n={-4,-3,-2,-1,0,1,2,3,4},

对应的 y={ 1, 5, 5, 6,5,4,7,1,2} 。 仔细观察 sigadd 函数的功能。编好函数文件程序后,请在命令窗口调用,验证正确性,记录验证结果。

【实验结果】

一、 1、

2、

二、 1、

2

3

M文件

function [y,n]=sigadd(x1,n1,x2,n2)

n=(min(n1(1),n2(1)):max(n1(end),n2(end))); y1=zeros(1,length(n)); y2=y1;

y1(find((n>=n1(1))&(n<=n1(end))==1))=x1; y2(find((n>=n2(1))&(n<=n2(end))==1))=x2; y=y1+y2; end

实验感想及心得体会

Matlab这种编程语言,不同于C,C++,它以矩阵作为数据操作

的基本单位,拥有强大的的计算功能与绘图功能。同时,作为一个简单易学,编程效率高的语言工具,它在我们的学习生活中发挥了越来越大的作用。尤其我们作为通信工程的学生,这更应该是我们应该熟练掌握的工具。

通过这几次实验,我只能说对Matlab这个工具有了初步的认识和了解,对它一些基础的功能有了一定掌握,也有了一些经验与体会。

1、: ; ‘ “ * .* \\ / 这些符号在运用时是完全不一样的,而且中英文输入法的不同也会引起错误;

2、可以将代码用M文件保存,再在窗口中调用,这样在出现错误的时候,打开对应的M文件修改即可,更加方便;

3、Matlab又很强大的作图功能,可以用它做出一维,二维,三维的图形,还可以给图形添加颜色;

4、help;有时候我不知道一些函数或变量名的意思和用法时,我会使用Help窗口,它会给出详细的解释。

但是,这还远远不够,在未来的日子里,我会再接再厉,完善自己不了解的地方。其实想要学习好一们语言,不能只靠老师,关键是自己。每个人内心深处都是有抵触意识的,不可能把老师的所有都学到。学习这门语言,不光是学习一种语言,更重要的事学习一种方法,一种学习软件的方法,还有学习的态度。

实验感想及心得体会

Matlab这种编程语言,不同于C,C++,它以矩阵作为数据操作

的基本单位,拥有强大的的计算功能与绘图功能。同时,作为一个简单易学,编程效率高的语言工具,它在我们的学习生活中发挥了越来越大的作用。尤其我们作为通信工程的学生,这更应该是我们应该熟练掌握的工具。

通过这几次实验,我只能说对Matlab这个工具有了初步的认识和了解,对它一些基础的功能有了一定掌握,也有了一些经验与体会。

1、: ; ‘ “ * .* \\ / 这些符号在运用时是完全不一样的,而且中英文输入法的不同也会引起错误;

2、可以将代码用M文件保存,再在窗口中调用,这样在出现错误的时候,打开对应的M文件修改即可,更加方便;

3、Matlab又很强大的作图功能,可以用它做出一维,二维,三维的图形,还可以给图形添加颜色;

4、help;有时候我不知道一些函数或变量名的意思和用法时,我会使用Help窗口,它会给出详细的解释。

但是,这还远远不够,在未来的日子里,我会再接再厉,完善自己不了解的地方。其实想要学习好一们语言,不能只靠老师,关键是自己。每个人内心深处都是有抵触意识的,不可能把老师的所有都学到。学习这门语言,不光是学习一种语言,更重要的事学习一种方法,一种学习软件的方法,还有学习的态度。

本文来源:https://www.bwwdw.com/article/p90r.html

Top