目录
一、实验名称
函数调用和参数传递
二、实验目的
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 end2.实验结果: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的程序结构有了一定的了解,学会了他们的用法以及一些新的函数的用法。
总之,只要积极主动、细心、有耐心,注意理论联系实际、多做多学多问,就会有进步,就会学到更多知识。

