Matlab讲义 - 图文 联系客服

发布时间 : 星期三 文章Matlab讲义 - 图文更新完毕开始阅读fb1ad585a0116c175f0e48cd

④统计函数 名称 min mean sum sort 四、矩阵与数组 1.定义矩阵

Matlab中数据的基本格式是矩阵.2维矩阵是一个以行和列排列的元素矩形表,如果有m行n列,这个矩阵的大小就是m?n.矩阵的元素,即数aij,指第i行第

含义 最小值 平均值 总和 排序 名称 max median diff length 含义 最大值 中位数 相邻元素的差 个数 j列的数.

矩阵仅由一行组成,就是一个行矢量.如果矩阵仅有一列,就是一个列矢量.矢量中元素的数量就是矢量的长度.如果矩阵的维数是1,它是一个标量,就是一个数.

二维矩阵的建立可有多种方法,最简单的方法是由方括号[ ]包围,逐行给定元素.相同行中的元素用空格“ ”或逗号“,”分隔;不同行由分号“;”或回车键分隔.如图10所示.如果定义一个标量,则方括号就不需要了.

2.矩阵元素的标识与修改 图10

一个矩阵A(或矢量A)的指定元素用A(i,j)来表示,例如A(2,3)就表示矩阵A的第二行第三列的元素,如图10所示.可以单独引用某个矩阵元素,并且对其直接赋值或建立表达式进行修改.

3.一些特殊矩阵的生成指令

建立1矩阵使用ones命令,这种矩阵的元素全部都是1.建立0矩阵使用zeros命令,这种矩阵的元素全部都是0.单位矩阵的对角线元素全部是1,而其他元素全部是0,建立它使用eye命令.如:(以ones为例,zeros和eye的用法是一样的)

ones(n)

建立一个n?n的1矩阵.

建立一个和矩阵A同样大小的1矩阵.

ones(size(A))

4.数组与数组运算

对于一个矩阵A,Matlab既可以进行矩阵运算,也可以进行数组运算.所谓矩阵运算,就是线性代数中规定的矩阵所特有的运算,如矩阵的乘法、求矩阵的逆、特征值等等.而数组运算,则是把参与运算的二维矩阵看作二维的数组,对矩阵中的对应元素进行相同的运算,运算结果到一个新的矩阵,新矩阵和原矩阵中的元素一一对应.这种数组运算使得对大量数据进行相同的运算变得十分方便快捷.

数组运算的一般运算符与单个数值运算的一般运算符相似,相应的有

?含义与数值运算的算符相同.

?.*./.^()

图11 图12 图13 图14 比较图11 和图12,可见“.*”和“*”的两种算符得出的结果是不一样的.写表达式时一定要分清要做的是哪

5

种运算.参与运算的矩阵的维数必须相同,否则就会报错,如图13所示.

在Matlab中预定义的数学函数是基于矩阵的数组运算.也就是说函数f对于矩阵A,有f (A)ij=f (Aij),矩阵的维数没有改变,如图14所示.

五、编程

Matlab输入命令的方式有两种,一种就是像前面所说的直接在命令窗口中输入简单的语句,这种方式适应于命令比较简单,处理的问题没有普遍应用性,差错处理比较简单的场合.但是在进行大量重复性的计算时,或者语句结构比较复杂需要进行流程控制时,这种方式就显得不好了,如果输入错误则很不好改正,因此就要用另一种工作方式,即M文件的编程工作方式了.M文件是一个简单的文本文件,语法比一般的高级语言都要简单,程序容易调试,交互性强;而且可以像一般文本文件那样在任何文本编辑器中进行编辑、存储、修改和读取.注意:输入时用英文,不可用中文标点,注意空格.

1.创建并编辑M文件

尽管M文件可以用任何文本编辑器(如记事本,写字板等程序)创建和编辑,Matlab还是提供了一个方便实用的M文件编辑器,利用这个编辑器可以完成程序的创建、编辑、调试、存储和运行等工作.

图15

在Matlab命令窗口中输入“edit”并回车,就调出了如图15所示的M文件编辑器(编辑窗口).在M文件编辑器的菜单栏里选择“File?New?M-file”命令,或单击工具栏上最左端的“File?Open”命令,或者单击工具栏上的

按钮,可以创建一个新的M文件;选择

按钮,可以打开工作路径上的已有的M文件;当编辑完M文件后,

按钮,可以保存文件.此外,在Matlab主窗口中的菜

在菜单栏里选择“File?Save”命令,或者单击工具栏上的

单栏和工具栏上,也有相应的命令和按钮来创建和编辑M文件.

例1 将二中的logistic叠代图的语句编辑成M文件并运行.

启动M文件编辑器,创建一个新的M文件,在编辑窗口中输入语句,如图16所示,输入完毕后保存文件为lg.m,放在当前的工作目录下.在Matlab的命令窗口中输入“lg”并回车,则运行此程序,显示的结果与前文相同.可以随时更改M文件内容并重新运行,例如将“lamda=0.8”改为“lamda=3.5”,保存文件,再次运行此程序,则所得结果如图17所示.

图16 图17

读者可以将前面所举示例改为以M文件的形式来完成. 2.脚本文件与函数文件

M文件有两种形式,即命令文件(也称脚本文件)和函数文件.脚本文件就是前面所举例中的M文件形式,是命令和语句的简单叠加,Matlab会自动按顺序执行文件中的命令.函数文件主要用以解决参量传递和函数调用的问题,它的第一句以function语句为引导.

需要注意的是命令文件在运行过程中可以调用Matlab工作域内所有的数据,而且所产生的所有变量均为全局变

6

量.也就是说,这些变量一旦生成,就一直保存在内存空间中,直到用户执行“clear”命令或退出Matlab时才会被清除.而函数文件中所有变量除特殊声明外,均为局部变量,即只在调用函数时存在,一旦函数调用结束,这些变量立即被清除.

按下“F5”键或单击如图16工具栏上最右侧的件.

例2 将解logistic方程以函数文件形式完成.

在编辑窗口输入语句如图18所示,保存文件名为logistic.m,在命令窗口中输入logistic(3.5,150),所得结果与图17相同.

在本例中,第一行语句必须以function开头,f是函数的返回值(可以是空值),logistic是函数名,lamda和N是参量,在调用此函数文件时由用户键

入.之后的语句与前面例子相同,只是不再在程序中对lamda和循环次数N赋值了. 图18

调用函数文件的命令是logsitic(3.5,150),即向函数传递两个参量(?和N),表示当?况下的结果,十分方便.

3.流程控制语句

对于比较复杂的任务,需要设计一定的算法,运用流程控制语句才能完成.程序一般分为顺序结构,循环结构,分支结构3种.在理论上,只要有以上三种结构就可以构造功能强大的程序.下面只介绍顺序结构和for循环结构. (1)顺序结构

顺序结构就是依顺序执行程序的各条语句.语句在程序文件中的物理位置就反映了程序的执行顺序,例如图3和图5所示就是典型的顺序结构. (2)for循环结构

循环是数值计算解决问题的重要手段,许多问题都包含有规律性的重复计算和对某些语句的重复执行.for循环将循环体中的语句重复执行给定的次数,循环的次数一般情况下是已知的.在前面介绍logistic叠代的例子时就已经接触到for循环了,其结构为:

for i=表达式 可执行语句1 ?? 可执行语句n end

表达式是一个数组,可以为m:s:n,s为步长,数组中的元素被逐一赋值给i,对于每个i的不同取值都要执行一次循环体内的语句.表达式也可为m:n,此时默认的步长为1.

for循环的循环体中,可以多次嵌套for和其他的结构体. 例3 利用for循环求1!?2!???20!的值.

编写M文件如图19所示,当前工作路径下保存文件名为jc.m;在命令窗口键入jc并回车,则显示出计算结果

按钮,可以运行命令文

?3.5时叠代150次.写

成函数文件的好处是不需要对M文件本身进行修改,只需要在调用函数文件时键入参量的不同值,从而得到不同情

s?2.5613?1018,如图20所示.

图19 图20

7

循环的嵌套类似于时钟的运行,外层循环变量i是时针,内层循环变量k是分针,当分针k完成一轮循环时,时针i只完成了一步循环.

在前面的程序中,用omiga表示?,phi表示?,好处是意义比较明确;现在用s代表sum,好处是比较简单;笔者喜好简单的方式,读者可按自己喜好处理. (3)其他指令

还有其它一些用于流程控制的命令,它们的名称和功能如下表所示:

pause disp(‘…’) input 使程序运行暂停,按任意键恢复运行;而pause(n)则是暂停n秒. 在屏幕上显示引号中的内容. 将用户从键盘输入的数值,字符串或表达式赋予指定的变量. 六、Matlab的帮助系统

选择菜单栏中“Help?Matlab Help”命令;或在命令窗口键入Demo(Helpdesk)并回车,即可调出Help窗口(Demo演示窗口).然后,比如想了解二维作图指令,可在其左侧窗口选择Demos-MATLAB-Graphics-2D plots,就可以演示各种二维作图指令.

§2 常用的几种指令

一 、 解方程 1.解一元函数方程

f(x)?0

即利用指令fzero( )来求一元函数y?f(x)的零点. 语句格式及各项符号为: x=fzero(fun,x0) [x,fval]= fzero(fun,x0)

x=fzero(fun, x0,[ ],p1,p2,…) [x,fval]= fzero(fun, x0,[ ],p1,p2,…) x fval fun x0 p1,p2,… 找到的零点,函数值在此会改变符号,没有零点则返回NaN. 零点对应的函数值(往往零点对应的函数值不是恰好为零,而是一个小量). 用M文件建立的单变量函数,其函数值必须是实数. 猜测的初始值,也可是搜寻零点的区间[x0(1),x0(2)],必须是实数.如果是区间,要求函数值在x0(1)与x0(2)符号相反.如果寻找中遇到了Inf,NaN或复数,则寻找终止. 传递给函数的参量. 例4 求方程xsinx?cosx2?3sin2xcosx?0的根.

建立M函数文件,如图21,在当前工作路径下保存文件为fx.m.在命令窗口中输入“[x,y]=fzero('fx',-3)”并回车,则显示出计算结果,如图22.

这种方法只能在猜测值附近找到一个零点,如果函数有多个零点,则有可能遗漏.所以要想找到函数的所有零点,最好用函数绘图语句fplot( )画出图像以判断搜寻范围.在命令窗口中输入fplot('qx',[-9 9]),画出此函数在区间[-9 9]的图像,如图23,可见在此区间的-6、-3、3、6附近均存在零点,可分别以这几个值作为猜测值代入指令,求出较为精确的解.

图21 图22 图23

2.解线性方程组

Ax?B的线性方程组,这里A是m?m的矩阵,B是已知矢量,x是未知矢量.用Matlab求解时使用矩阵左除的方法,即x?A\\B.

对形式为

8