MATLAB:编写一个实现n阶乘的函数?

西安电子科技大学网络与继续教育学院

《MATLAB与系统仿真》期末考试试题

1、大作业于2015年4月3日公布,2015年5月9日前在线提交;

2、考试必须独立完成,如发现抄袭、雷同、拷贝均按零分计。

3、程序设计题(三(8,10))要求写出完整的程序代码,并在matlab软件环境调试并运行通过,连同运行结果一并附上。

一、填空题(1’ ×25=25’)

2、在Matlab编辑器中运行程序的快捷键是:F5 。

4、在Matlab中inf表示:无穷大;clc表示:清除当前Command window区域内容;more表示:显示命令窗口输出一个整个萤幕的时间;who表示:返回当前工作空间中所有变量名;whos表示:返回当前工作空间中所有变量,以及它们的名字、尺寸、所占字节数、属性等信息。

6、求矩阵行列式的函数:det ;求矩阵特征值和特征向量的函数eig 。

7、Matlab预定义变量ans表示:当前未定义变量和变量名的答案;eps表示:

浮点相对精度(其值是从1.0到下一个最大浮点数之间的差值);nargin表示:函

9、建立结构数组或转换结构数组的函数为:struct

(1)是一个包含一系列命令的文件;

(2)非常像C或者C++程序;

(3)程式需要保存为<file>.m的格式才能运行。

如何新建一个程式?左上角有一个新建脚本(我的MATLAB是中文版),如下图

然后就会跳出一个编辑器,那么就可以在这个编辑器里面编写自己的script

输入完如何运行?一个是点击上面的“运行”按钮;另一个是按键盘上的'F5"按钮。运行后就跳出这样一个窗口,让你命名文件夹保存自己的文件(当然你自己如果能找到的话就无所谓),命名文件有几个规则:

(1)不可以用数字开头;(2)大小写是有差别的。

保存完运行就会出现下面的计算绘图窗口

上面就是举个例子让大家了解一下运行程式的一个步骤。下面会介绍一下界面上的各个命令的功能。

********如果我要使用某个函数来达到某个功能,但是因为函数不常用,我不记得函数名如何拼写了,那么MATLAB也提供了一个供你查询的函数库,如下图

点击fx,就会出现各个类别的函数或者语言,只需要去对应的类别里面寻找自己所需要的函数即可。举个栗子:我不知道sin函数怎么写了,我现在需要寻找sin函数,那么此时就可以点击fx按钮,在跳出来的类别框中选择“数学“这一类,再选择”初等数学“中的”三角学“,此刻我们就找到了所需要的sin函数,双击sin函数即可把这个函数引入到自己的程式中了。

**********如果不想执行程式中的某一条程序,如何操作?可以在这条程序前面加上一个%符号,那么这条程序就变成了注释性质的句子,就不再执行了。可以看到加了%符号,整条语句变绿了。

如果我想要对好几条语句同时注释,让其不再执行的话,可以先选中这几条语句,右键,找到“注释”(英文版应该叫comment吧貌似,可以上手多试一试),那么就可以对几条语句进行注释,而不需要我们手动一条一条注释了。注释快捷键“Ctrl+R",取消注释快捷键”Ctrl+T"

#####那么两个%号代表什么?,表示分区(分为两个section)

一个分区为黄色,另一个分区为白色。

如果只需要执行上面的分区块,可以点击菜单栏中的“运行节”命令,就会执行白色分区的程序。如果点击的是“运行”命令,那么执行的就是整个程序(就没有分区的说法了)。分区在检查程序中哪个地方存在错误的时候比较好用。

如果感觉那一句出现了问题,可以点击该条语句最前面的小横杠,设置断点,小横杠就会变成一个小圆点,点击“运行”按钮,就会变成下面第二张图这样。

此刻,命令行窗口就会变成下图的样子,多了一个“K”,可以在工作区检查参数的值是否正常。如果把鼠标移到参数x旁边,就可以看待这个参数的一些信息。

****如果语句不小心被调到前面了,如下图,没有正常的层次感了,可以选中所有程序,右键选择“智能缩进”功能,将其调整回正常格式。

(1)正常的程式是一行接着一行执行的;

(2)通常会有一些结构程式(子程序、环形程序、条件程序等),这些结构式能够使得整体的程式显得更加整洁。同样,含有这些结构程式的时候,程序的执行在总体趋势上是一行接着一行的,但是在遇到结构程式的时候,会按照结构程式的规则执行程序。比如之前举例的for语句就属于结构程式。

3、关系(逻辑)运算符

稍微有点C语言学习经历的这个应该都懂得,部分有点区别

举个例子:a>10在程序中的结果只有两种:一个是1(TRUE),另一个是0(FALSE);如果等于1说明需要执行。在结构程式中经常会遇到这些运算符的嵌套,用来判断if,while等一些结构程式是否需要执行。

上面这个栗子!稍微解释一下(大部分人都懂得):rem函数是取余函数,if后面的rem(a,2)==0是condition,判断条件,如果a除以2的余数等于0的话,就输出“a is even";不等于0的话,就输出”a is odd".

上图右边程序的结果就是输出"positive 1“

当expression的条件成立时,就执行statement,否则就end。上图中1:n就是产生一个1为首项,n为尾项,公差为1的数组,prod(1:n)就等于n!(n的阶乘)。1e100表示1*10^100,prod函数的用法如下:

*****像上图中的栗子,每次执行2的n次方,a(n)都要到记忆体中重新找一个位置用来存储结果,如果说我们提前宣告给a(n)一个大空间的话,那么a(n)就不用再花时间找空间位置,而是直接将结果存储在我们提前规划的地盘中,这样一来,计算效率就有了很大的提高。

像上图中,A程序没有提前宣告空间,所有没执行完一次程序,A都要去找一个位置;而B程序提前规划好了空间,那么在后面的计算,只要将结果直接存在这个空间里面就好了,对于计算机而言,就节省了找空间的时间。

上图中tic 和tok是用来计时的,可以在matlab中分别输入上图中的两个程序,运行看一下计算时间。

break的作用就是当条件成立时,跳出整个循环。

(1)在开始写程序之前,可以使用命令"clear all“去移除之前产生的所有变量;可以使用命令”close all“去关闭所有的图片;可以使用”clc“清楚命令窗口中的所有程序。

(2)使用分号;,可以让一条程序不显示结果,有些时候有一些不想要的结果可以使用分号将其阻拦。

(3)使用省略号......(换行号),使得程序可读,尤其是一些比较长的程序,想要分成两行读取,就可以使用这个换行号。

(4)当计算量非常大时或者发现自己程序写错但计算机已经在执行的时候,计算机可能会宕机,按”CTRL+C“可以中断执行。计算量很大的时候,matlab左下角可能会出现”busy“的字样,这个时候如果不想继续进行下去的话,就可以使用此功能。下图为matlab左下角。

(1)在matlab中,两个都是以.m文件保存的

(2)functions文件可以在我们需要的时候呼叫。

现在调用这个function计算:

如果计算两组数据,可以在参数输入中以数组的形式输入两组参数,得到两个结果。下图就是(0,0,10)和(1,1,20)两组参数。

¥¥¥¥可以注意到在上面的函数定义中,乘法被写成了点乘”.*“的形式,如果去掉这个点,我们在计算两组参数的结果会发生什么?

可以看到系统报错!所以这里就提醒我们平时在定义公式的时候,一定不要忘记这里使用点乘或者点除的形式来代表乘积。数组之间的点乘规则可以见矩阵运算规则,就可以知道为啥这里要使用点乘了。

*******多输入和多输出的函数

MATLAB函数句柄 - 月了的文章 - 知乎 (转载一下方便理解,侵删)

题面是“编写一个能求出‘1!+2!+3!+4!+5!+…’的程序”:
本人思想是“main函数求阶乘相加、JC函数求阶乘”。
为了先判断阶乘函数是否编写正确,我先将main函数编成JC函数的结果输出(即如下程序仅求阶乘):

可是上面的程序运算结果完全不是求阶乘的结果。如输入‘5’,结果是‘-96’。到底是哪里出错了呢?请高人指点,不胜感谢!!!

我要回帖

更多关于 阶乘的matlab程序代码 的文章

 

随机推荐