《通信原理》用matlab实现函数调用和参数传递

目录

一、实验名称

二、实验目的

三、实验原理

四、实验内容及结果

五、实验收获


一、实验名称

       函数调用和参数传递

二、实验目的

1.掌握matlab语言的基本操作和基本的编程功能;

2.了解常用序列的图形和实现方法,并掌握matlab产生常用离散时间信号的编程方法;

3.掌握基本函数exp、imag、real,二维图形处理函数function、figure、stem、title、xlabel、ylabel、axis、grid on及通用功能图形函数subplot的用法。

三、实验原理

1.matlab功能强大、简单易学、编程效率高,具有强大的数值计算和符号计算、很好的图形功能、可直接处理声音和图像文件、强大的工具箱、自动控制理论、数字信号处理、动态系统仿真、很好的扩展等功能;

2.matlab具有多种函数图形处理和生成器,可对不同的函数进行处理,分析和计算速度快,可以运用stem函数绘制离散图形,利用起来非常方便;可以很方便绘制二维、三维及四维图形,支持多种声音和图像格式,所编写的程序可以直接运行,无须编译,非常快捷。

3.函数调用和参数传递

(1)函数调用:函数文件编制好后,即可调用函数进行计算,用function函数进行调用,一般格式为[输出参数1,输出参数2,…]=文件名(输入参数1,输入参数2,…,)。函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己(递归调用)。

(2)参数传递:局部变量和全局变量。

1)局部变量存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。

2)通过global指令,MATLAB允许几个不同的函数空间及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。

3)在MATLAB中,函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。但是,如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将共用这一个安量。笑局变量的作用城是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行芽取和修改。因此,定义全局变量是函数间传递信息的一种手段。

4.matlab的程序结构

(1)for-end语句,语法为:

For indx=循环初始值:循环步长:循环结束值

    可执行语句组

End

紧跟的是循环初始值,循环步长,循环结束值。在循环步长为1的情况下,也可以省略而代之以:循环初始值:循环结束值。中间是可执行语句组成的集合,在语句的最后要加end代表for循环的结束。for-end语句是可以嵌套的,也就是说在一个for-end语句中可以嵌套其他的for-end语句。

(2)while-end循环

While循环将循环体中的语句循环执行不定次数。语法为:

While 表达式

循环体语句

End

表达式一般是由逻辑运算和关系运算及一般运算组成的,以判断循环的进行和停止;只要表达式的值非0,继续循环;直到表达式值为0,循环停止。

(3)分支结构

分支结构的语句有if语句和switch语句,if语句的格式有如下几种格式。

格式一:

If 条件

可执行语句组

End

格式二:

If 条件

可执行语句组1

Else

可执行组2

End

格式三:

If 条件 1

可执行语句组1

Elseif 条件 2

可执行语句组2

……

Elseif if m

可执行语句组 m

Else

可执行语句组 m+1

End

    在格式1中,首先判断条件是否满足,如果满足则执行可执行语句组,否则结束。在格式2中,首先判断条件是否满足,如果满足则执行可执行语句组1,若不满足则执行可执行语句组2。格式3是格式2的进一步扩展,分别对判断是否满足条件1,2,…m,然后执行相应的可执行语句组。若所有的条件都不满足,则执行可执行语句组m+1。可见,格式3实现了一种多路选择,比较复杂。可替代下面要讲到的switch-case-end语句。

四、实验内容及结果

编制程序使用function函数实现对函数进行调用和参数传递,并利用matlab中的程序结构(包括for语句和while语句)实现正确结果和产生图形。

  • 实验一:全局变量应用示例。先建立函数文件myfun.m,该函数将计

算输入的参数的二次多项式和。

1.实验代码

%全局变量应用示例



function s=myfun(x)

global A B

s=A*x.^2+B*x+1;         %求二次多项式的和。

2.实验结果

在命令窗口做以下操作:

(1)输入“global A B”回车;

(2)输入“A=1,B=2”回车;

(3)输入“s=myfun(2)”回车。得到结果为s=9。

3.碰到的问题及解决方法

问题:犯了一个错误,在命令窗口输入完了但是都提示错误,经过几次的错误才发现脚本还没运行,导致运行不出来。

解决方法:先运行脚本,再在命令窗口输入s=myfun(2),即可运行出结果。

(二)实验二:利用for循环求y=sinx+sin2x+…+sin100x,0<=x<=2Π的值。

1.实验代码

%for循环



x=0:0.01:2*pi,y=0;                            %定义x的范围

for indx=1:100

    y=y+sin(indx*x);

end

plot(x,y,'g-');                                      %绘制y的函数图像,并设置线为g(绿色)实线型

title('y=sinx+sin2x+…+sin100x');     %对图像主题的说明

xlabel('n');                                          %对横轴进行说明

ylabel('y');                                          %对纵轴进行说明

grid on;                                               %打开图像网格

2.实验结果

(三)实验三:用while循环实现y=sinx+sin2x+…+sin100x,0<=x<=2Π的值。

1.实验代码

%while循环



x=0:0.01:2*pi,y=0;                            %定义x的范围

indx=1;

while indx<=100                               %判断条件,满足则下一步,否则直接结束

    y=y+sin(indx*x);

    indx=indx+1;

end

plot(x,y,'r-');                                       %绘制y的函数图像,并设置线为r(红色)实线型

title('y=sinx+sin2x+…+sin100x');    %对图像主题的说明

xlabel('n');                                         %对横轴进行说明

ylabel('y');                                         %对纵轴进行说明

grid on;                                              %打开图像网格

2.实验结果

(四)实验四:一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。请输出全部水仙花数。

1.实验代码

%输出全部水仙花数代码



for indx=100:999

    a1=fix(indx/100);           %求indx的百位数字

    a2=rem(fix(indx/10),10);    %求indx的十位数字

    a3=rem(indx,10);            %求indx的个位数字

    if indx==a1.^3+a2.^3+a3.^3  %判断是否满足条件

        indx

    end

end

2.实验结果:Indx=153,indx=370,indx=371,indx=407。

(五)实验五:使用switch-case语句,根据不同的输入值,输出对应的输出值。

1.实验代码:分为语句代码和M文件代码两个部分。

%switch-case语句



function s=switchHS(x)



switch x

    case 1

        s=2;

    case 2

        s=3;

    case 3

        s=5;

    otherwise

        s=6;

end
%switch-case语句M文件



x=5;

s1=switchHS(x);

x=2;

s2=switchHS(x);

x=1;

s3=switchHS(x);

2.实验结果:s1=6,s2=3,d3=2。

五、实验收获

       通过本次实验,对函数调用和参数传递、局部变量和全局变量、matlab的程序结构有了一定的了解,学会了他们的用法以及一些新的函数的用法。

       总之,只要积极主动、细心、有耐心,注意理论联系实际、多做多学多问,就会有进步,就会学到更多知识。