tceic.com
简单学习网 让学习变简单
当前位置:首页 >> 学科竞赛 >>

MYmatlab辅导2013b


MATLAB语言基础与应用

物理工程学院 秦文华

MATLAB语言介绍
一、MATLAB语言的发展 ? matlab语言是由美国的Clever Moler博士于1980 年开发的; ? 设计者的初衷是为解决“线性代数”课程的矩阵运 算问题; ? 取名MATLAB即Matrix Laboratory 矩阵实验室的 意思;

/>?

它将一个优秀软件的易用性与可靠性、通用性与
专业性 、一般目的的应用与高深的科学技术应用

有机地相结合起来

?

MATLAB是一种直译式的高级语言,比其它程 序设计语言容易。MATLAB语言与其它语言的 关系仿佛和C语言与汇编语言的关系一样

?

?

MATLAB已经不仅仅是一个“矩阵实验室” 了,它集科学计算、图象处理;声音处理于 一身,并提供了丰富的Windows图形界面 设计方法 MATLAB语言是功能强大的计算机高级语 言, 它以超群的风格与性能风靡全世界, 成 功地应用于各工程学科的研究领域

?
?
?

MATLAB最早在美国是作为大学工科学生必修 的计算机语言之一 MATLAB语言已在我国推广使用,现在已应用 于各学科研究部门和许多高等院校;
特别是MATLAB在我国大学生数学建模竞赛中的 应用,为参赛者在有限的时间内准确、有效的解 决问题提供了有力的保证。

?

MATLAB语言不受计算机硬件的影响,现有的 硬件条件下的计算机都可以使用。当然,随着 应用功能的增强,对硬件的要求也在提高。

二、matlab能在各领域做什么
? ? ? ? ?

工业研究与开发 数学教学,特别是线性代数 数值分析和科学计算方面的教学与研究 电子学、控制理论和物理学等工程和科学学科 方面的教学与研究 经济学、化学和生物学等计算问题的所有其他 领域中的教学与研究

http://www.mcm.edu.cn

二、MATLAB语言的功能
? ? ? ? ? ?

强大的数值(矩阵)运算功能 广泛的符号运算功能 高级与低级兼备的图形功能(计算结果的可视 化功能) 可靠的容错功能 应用灵活的兼容与接口功能 信息量丰富的联机检索功能

三、MATLAB语言的特点
语言简洁紧凑,语法限制不严,程序设计 自由度大,可移植性好 ? 运算符、库函数丰富 ? 图形功能强大 ? 界面友好、编程效率高 ? 扩展性强
?

丰富的MATLAB工具箱
? ? ? ? ? ? ? ? ? ?

?

MATLAB主工具箱 符号数学工具箱 SIMULINK仿真工具箱 控制系统工具箱 信号处理工具箱 图象处理工具箱 通讯工具箱 系统辨识工具箱 神经元网络工具箱 金融工具箱 …… ……

? MATLAB的工具箱大致可以分为两类:功 能型工具箱和领域型工具箱。许多学科, 在MATLAB中都有专用工具箱,但 MATLAB语言的扩展开发还远远没有结束,

各学科的相互促进,将使得MATLAB更加
强大

MATLAB的开放式可扩充结构
? ? ? ?

matlab 所有函数都是开放的(源程序开放) 用户可按自己意愿随意更改 正因为此功能,使得matlab的应用越来越广泛 强大的联机检索帮助系统



可随时检索matlab函数 可随时查询matlab函数的使用方法

四、MATLAB的工作环境
启动MATLAB ? 主窗口 ? MATLAB的命令窗口 (1)命令窗口的菜单栏 (2)命令窗口的工具栏 (3)命令窗口的命令编辑区 ? 历史命令窗口 ? 当前目录窗口、工作空间窗口 ? MATLAB帮助系统 ? MATLAB的演示功能 ? 退出MATLAB
?

1.启动MATLAB
?与常规的应用软件相同,MATLAB的启动也有多种

方式,首先常用的方法就是双击桌面的MATLAB图 标,也可以在开始菜单的程序选项中选择MATLAB 组件中的快捷方式,当然也可以在MATLAB的安装 路径的子目录中选择可执行文件“MATLAB.exe”。 启动MATLAB后, 将打开一个MATLAB的 欢迎界面,随后打开 MATLAB的桌面系统 (Desktop)如右图所 示。
?

2.MATLAB的桌面工作环境 菜单栏和工具栏

工作 空间 窗口

当前目 录窗口

命令 窗口

历史命 令窗口

3.命令窗口
? ?

?

命令窗口是MATLAB的主要交互窗口,用于 输入命令并显示除图形以外的所有执行结果。 MATLAB命令窗口中的“>>”为命令提示符, 表示MATLAB正在处于准备状态。在命令提 示符后键入命令并按下回车键后,MATLAB 就会解释执行所输入的命令,并在命令后面给 出计算结果。 一般来说,一个命令行输入一条命令,命令行 以回车结束。但一个命令行也可以输入若干条 命令,各命令之间以逗号分隔,若前一命令后 带有分号,则逗号可以省略。

?

?

如果一个命令行很长,一个物理行之内写不下, 可以在第一个物理行之后加上3个小黑点(…) 并按下回车键,然后接着下一个物理行继续写 命令的其他部分。3个小黑点称为续行符,即 把下面的物理行看作该行的逻辑继续。 在MATLAB里,有很多的控制键和方向键可 用于命令行的编辑。





使用方向键【↑】【↓】遍历前面输入过的命令 使用【←】【→】在命令行移动光标编辑命令 其他按键还有【Pageup】、【Pagedown】、【Delete】、 【Home】、【End】、【Esc】等等

?

编程时不适和在命令窗口直接输入,利用文件 编辑器输入文本

?

命令窗口常用控制命令
– – – – – – –

clf 清除图形窗口 clc 清除命令窗口的显示内容 clear 清除MATLAB工作空间中保存的变量 cd 设置当前目录 edit 打开M文件编辑器 exit 关闭/退出MATLAB quit 关闭/退出MATLAB

4.历史命令窗口
? ?

?

历史命令窗口保存用户输入过的历史命令,为 用户下次使用同一命令提供方便。 历史命令窗口中保存的历史命令记录:每次开 启MATLAB的时间及其每次开启MATLAB后 在命令窗口中运行过的所有指令 历史命令窗口中的简单操作:
– 用鼠标双击一条命令,即可在命令窗口中立即执行 – 选中命令,利用鼠标右键可以复制该指令 – 利用组合操作【Ctr+鼠标左键】可以选中多条命令

进行复制或操作(按鼠标右键出项的功能选项)
?

可以利用【Edit】菜单中的选项清除历史记录

5.当前目录窗口
? ? ?

显示当前工作目录下存在的资源(文件或文件 夹),是默认保存当前文件的目录; 建议用户为自己建立一个专门的工作目录,用 于存放自己创建的文件,并设为当前目录; 把用户目录设置成当前目录的方法
– 利用窗口的交互界面设置 – 利用命令设置:在命令窗口中输入命令

cd d:\mywork,即可讲自己的用户目录设置成当前目录

? ?

MATLAB的路径搜索器 MATLAB的路径搜索顺序:
– 在命令窗口输入一个字符串‘abcd’,MATLAB编辑

器做如下顺序的操作: – 1.把‘abcd’当成一个参数去检索; – 2.检查‘abcd’是否是一个内置的函数; – 3.在默认目录下搜索文件名为:abcd.m的文件 – 4.在搜索路径下的所有目录中搜索abcd.m – 如果存在相同的名称,第一个搜索到就停止
?

改变搜索路径


利用命令和File菜单选项可以修改编辑搜索路径

6.工作空间窗口
?

? ? ?

工作空间窗口显示当前内存中存在的变量及其 数值,也就是以前运行过的变量及其结果,内 存中存在的变量就是当前能使用的变量; 可以利用clear命令清除内存变量 可以利用who和whos两个指令查看内存变量 的信息 可以利用鼠标左键双击工作空间窗口中的变量 打开窗口查看该变量的详细数据 用户编写程序时一般首先清除当前内存中的变 量信息,以免对自己的程序数据造成影响。 (程序变量名输入错误或变量没有定义)

?

7.MATLAB帮助系统
?

完善的帮助系统是任何应用软件必要的组成部分。 MATLAB提供了相当丰富的帮助信息,同时也提供了 获得帮助的方法。首先,可以通过桌面平台的【Help】 菜单来获得帮助,也可以通过工具栏的帮助选项获得 帮助。此外,MATLAB也提供了在命令窗口中的获得 帮助的多种方法,在命令窗口中获得MATLAB帮助的 命令及说明列于下表中。其调用格式为:


命令+指定参数
命 令 doc help 说 明

在帮助浏览器中显示指定函数的参考信息 在命令窗口中显示M文件帮助

helpbrowser 打开帮助浏览器,无参数
helpwin lookfor 打开帮助浏览器,并且见初始界面置于MATLAB函数 的M文件帮助信息 在命令窗口中显示具有指定参数特征函数的M文件帮助

? ?

?

Demo演示系统 MATLAB主包和各个工具包都有很好的演示 程序,该组演示程序采用交互式界面引导,操 作方便。它有很好的演示示范作用,是其他书 籍不能替代的,对学习和掌握MATLAB都非 常重要。 通过【Help】菜单选项或通过命令【Demos】 都可以打开该演示系统

五、初识MATLAB
?

1. 绘制正弦曲线和余弦曲线。 x=[0:0.5:360]*pi/180; plot(x,sin(x),x,cos(x)); 2. 求方程 3x4+7x3 +9x2-23=0的全部根。 p=[3,7,9,0,-23]; %建立多项式系数向量 x=roots(p) %求根 3. 求解线性方程组。 a=[2,-3,1;8,3,2;45,1,-9]; b=[4;2;17]; x=inv(a)*b

?

?

第一章 MATLAB语言入门

1.1常量与变量 ? 1.2标量、矩阵和向量 ? 1.3各种运算符 ? 1.4常用数学函数 ? 1.5MATLAB语句
?

1.1常量与变量
?

常量
– – –



同其他计算机语言一样,MATLAB中使用的数据 也可分为常量和变量。 例如:3.1 120 0.12e+3 l.2e+2 5e+3 1+2i 它们都是合法的MATLAB常量,或者称为数值。 MATLAB中的复数类型常量可直接写成手写格式, 这是与其他计算机语言的明显不同之处。 在MATLAB内部,每一个数据元素都是用双精度 (Double, 8字节)来表示和存储的,大约有16位有 效数字。其数值有效范围约为10-308~10+308,这样 的取值范围对于绝大多数情况下的数值计算已经足 够。

?

变量
MATLAB中也是使用变量来保存信息。变量由变 量名表示,变量的命名应遵循如下规则: ★ 变量名必须以字母开头 ★ 变量名可以由字母、数字和下划线混和组成;但 不包含标点符号和空格 ★ 变量名区分字母大小写 ★ 变量名的字符长度不应超过31个,其后的字符被 忽略


?

固定变量


在MATLAB中还存在着一些系统默认的特殊变量, 即在MATLAB语句中若出现固定变量名,则系统就 将其赋予默认值。

MATLAB中的常用固定变量
变量名 i(或j) pi inf NaN(nan) eps ans realmax realmin 描述 虚实单位

?1

圆周率 表示无穷大,比如1/0 表示不定数,即结果不能确定,比如0/0 计算机的最小数,与1相加产生大于1 用作计算结果的默认变量名 系统所能表示的最大数值 系统所能表示的最小数值

注意:如果定义了与固定变量相同名字的变量,原始的特殊取值将会丢失, 直至使用清除命令【clear命令】或重新启动MATALB,所以在使用中应 避免重新定义这些固定变量。

变量和赋值语句
?

变量
– –

MATLAB的变量分为字符变量和数值变量两种, 字符变量必须用单引号括起来 MATLAB和其他高级语言不同的是,MATLAB使 用变量时不需要预先对变量类型进行说明, MATLAB会自动根据所输入的数据来决定变量的 数据类型和分配存储空间。 MATLAB赋值语句有两种形式: (1) 变量=表达式 (2) 表达式

?

变量的赋值

– –

?

MATLAB赋值语句有两种形式:
(1) 变量=表达式 – (2) 表达式 其中“表达式”是用运算符将有关运算量连接起来的 式子,其结果是一个矩阵。注:第二种语句形式下, 将表达式的值赋给MATLAB的永久变量ans。 – 数值变量

? ? ?

a=55.15 b=3.1415+a pi+a; a=’happy new year’



字符变量
?

– 如果在语句的最后加分号,那么,MATLAB

仅仅执行赋值操作,不再显示运算的结果。 – 在一条语句中,如果表达式太复杂,一行 写不下,可以加上三个小黑点(续行符)并 按下回车键,然后接下去再写。
? ?

例如下列语句: s=1-1/2+1/3-1/4+1/5-1/6+1/7-?

1/8+1/9-1/10+1/11-1/12;

?

MATLAB表达式


算术表达式。
? ?

运算符有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、 ^(乘方) 对于矩阵来说,左除和右除表示两种不同的除数矩阵和 被除数矩阵的关系。 运算符有:<(小于)、<=(小于或等于)、>(大于)、>=(大于 或等于)、==(等于)、~=(不等于) 运算符有:&(与)、|(或)和~(非)



关系表达式。
?



逻辑表达式。
?

1.2矩阵、向量和标量
矩阵是MATLAB进行数据处理和运算的基本单 元,MATLAB的大部分运算或命令都是在矩 阵运算的意义下执行的。 相量是指只含有一行或一列的矩阵。 标量是指通常意义上的一个数值,在MATLAB 中也可以作为1×1的矩阵来处理。

?

矩阵的创建与保存
– –

直接输入法创建矩阵 对于简单且维数较小的矩阵,创建矩阵的最佳方法 就是从键盘直接输入矩阵,即按矩阵行的顺序输入 矩阵各元素。在输入过程中必须遵循一下规则:
? ? ?

?

★矩阵的所有元素必须放在方括号“[ ]”内; ★矩阵各元素之间必须用逗号“,”或空格隔开; ★矩阵行与行之间用分号“;”或回车符号隔开; ★矩阵元素可以是任何不含未定义变量的表达式 。 ones()函数 和 zeros()函数 rand()函数 和 randn()函数 eye()函数



利用MATLAB函数创建矩阵
? ? ?



利用若干个小矩阵生成较大的矩阵

向量的生成
向量是MATLAB的重要概念之一,是指仅有一行或一列 的矩阵,是矩阵的一种特例,前面介绍的矩阵的创建及保存 办法完全适用于向量。对生成的行向量进行转置就可以得到 列向量。 在MATLAB中有多种方法可以生成向量,除利用前面介 绍过的创建矩阵的方法来生产向量外,还有下面两种常用的 方法。 ★利用冒号“:”运算生成行向量 其语句格式● a=m:n ● a=m:p:n
★利用函数linspace()生成行向量

其语句格式● linspace(m,n) ● linspace(m,n,s) 在构建信号时,通常都是通过定义向量的形式产生一 个自变量。

几个实例:
1)、在命令窗口中输入
》a=1; b=2; c=3; 》x=[5 b c; a*b a+c c/b] x= 5.000 2.000 3.000 2.000 4.000 1.500
? ?

》y=[2,4, 5 3 6 8] y= 245 368

矩阵生成不但可以使用纯数字(含复数),也可以 使用变量(或者说采用一个表达式)。 矩阵的元素直接排列在方括号内,行与行之间用分 号隔开,每行内的元素使用空格或逗号隔开。大的 矩阵可以用分行输入,回车键代表分号。

2)、语句生成
(1)用线性等间距生成向量矩阵(start:step:end) 》a=[1:2:10] 其中start为起始值,step为步长, a= end为终止值。当步长为1时可 省略step参数;另外step也可以 1 3 5 7 9
取负数。

(2)a=linspace(n1,n2,n) ?在线性空间上,行矢量的值从n1到n2,数据个 数为n,缺省n为100。 》a=linspace(1,10,10) a= 1 2 3 4 5 6 7 8 9 10

(3)a=logspace(n1,n2,n)
?在对数空间上,行矢量的值从10n1到10n2,数据个数为n, 缺省n为50。这个指令为建立对数频域轴坐标提供了方便。 》a=logspace(1,3,3) a= 10 100 1000

(4)一些常用的特殊矩阵
单位矩阵:eye(m,n); eye(m) 零矩阵:zeros(m,n); zeros(m) 一矩阵:ones(m,n); ones(m) 对角矩阵:对角元素向量 V=[a1,a2,…,an] A=diag(V) 随机矩阵:rand(m,n)产生一个m×n的均匀分布的随机矩阵

》eye(2,3) ans= 100 010 》zeros(2,3) ans= 000 000 》ones(2,3) ans= 111 111 》V=[5 7 2]; A=diag(V) A= 500 070 002

》eye(2) ans= 10 01 》zeros(2) ans= 00 00 》ones(2) ans= 11 11

注:如果已知A为方阵,则V=diag(A) 可以提取A的对角元素构成向量V。

保存矩阵等数据信息
利用外部数据文件(*.mat)保存和装载矩阵 ? 创建的矩阵或其他变量存在于MATLAB环境 中,只要不重新定义其数值就不改变,但是当 退出MATLAB环境,重新启动MATLAB时其 变量定义就不存在了。 ? 在MATLAB的运行过程中可以使用专用命令 save和load来对矩阵数据以MAT文件格式将 计算环境中的矩阵数据长期保留下来,以备以 后使用。MAT文件(即扩展名为mat的文件) 是MATLAB保存数据的一种标准格式的二进 制文件。
– –

save命令 :命令格式 save 路径\文件名 变量名 load命令: 命令格式 load 路径\文件名

矩阵的下标
?

?

在MATLAB系统中,矩阵的元素是通过其行、 列的标号来标示的,矩阵元素所处的行号和列 号称为该元素的下标。矩阵的元素可以通过其 下标来引用,A(k,l)即表示矩阵A第k行第l列的 元素, k和l的取值从1开始 。 利用矩阵的下标不但可以得到矩阵的元素值, 而且可以借助于矩阵的下标生成矩阵的子阵。 命令格式为:B=A(x,y) ,该命令由已定义的矩 阵A,根据向量x指定的行和相量y指定的列生 成一新的矩阵B。其中x是由A的行号组成的任 意排列的行向量,y是由A的列号组成的任意 排列的行向量。

矩阵的操作
1、矩阵下标:MATLAB通过确认矩阵下标,可以对矩阵进行 插入子块,提取子块和重排子块的操作。 ?A(m,n): 提取第m行,第n列元素 ?A(:,n): 提取第n列元素 ?A(m,:): 提取第m行元素 ?A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到 第n2列的所有元素(提取子块)。 ?A(:):得到一个长列矢量,该矢量的元素按矩阵的列进行 排列 ?矩阵扩展:如果在原矩阵中一个不存在的地址位置上设定 一个数(赋值),则该矩阵会自动扩展行列数,并在该位 置上添加这个数,而且在其他没有指定的位置补零。 ?消除子块:如果将矩阵的子块赋值为空矩阵[ ],则相当于 消除了相应的矩阵子块。

2、矩阵的大小 ? [m,n]=size(A,x):返回矩阵的行列数m与n,当x=1, 则只返回行数m,当x=2,则只返回列数n。 ? length(A)=max(size(A)):返回行数或列数的最大值。 ? rank(A):求矩阵的秩
》a=[1 2 3;3 4 5]; 》length(a) 》rank(a)

》[m,n]=size(a)
m= 2

ans =
3 》max(size(a))

ans =
2

n=
3

ans =
3

3、利用help命令可了解矩阵操作函数:>>help elmat

1.3各种运算符
MATLAB的算术运算符 运算符 + 加 名 称 指令 示例 A+B 说 明 若A、B为同维矩阵(包含是两个标量的情况),则表示A与B对应元素相加;若其 中一个矩阵为标量,则表示另一个矩阵的所有元素加上该标量 若A、B为同维矩阵(包含是两个标量的情况),则表示A与B对应元素相减;若其 中一个矩阵为标量,则表示另一个矩阵的所有元素减去该标量(或该标量减去 各元素) 矩阵A与B相乘,A和B到维数必须满足矩阵乘法的定义,A和B均可以是向量和标量 矩阵A与B对应元素相乘,A和B必须是同维矩阵或其中之一为标量 A、B均为标量时,表示A的B次方幂;A为方阵,B为正整数时,表示矩阵A的B次乘 积;A为方阵,B为负整数时,表示矩阵A逆矩阵的B次乘积;当A、B都为矩阵 时,没有定义



减 矩阵乘 数组乘 矩阵乘方

A-B

* .* ^

A*B A.*B A^B

.^ \ .\ / ./ ’

数组乘方 矩阵左除 数组左除 矩阵右除 数组右除 共轭转置

A.^B A\B A.\B B/A A./B A’

A、B必须为同维矩阵,表示矩阵A的各元素与矩阵B的对应元素的乘方运算,即 [A(i,j)^B(i,j)]
方程A*X=B的解X 矩阵B的元素除以矩阵A的对应元素,A、B必须为同维矩阵或其中之一为标量 方程X*A=B的解X 矩阵A的元素除以矩阵B的对应元素,A、B必须为同维矩阵或其中之一为标量 矩阵A的共轭转置

MATLAB的关系运算符

运算符
== ~= > < >= <=

名 称 等于
不等于

大于
小于 大于等于 小于等于

MATLAB的逻辑运算符 运算符 & | 逻辑与 逻辑或 名 称

~

逻辑非

MATLAB的特殊运算符 运算 符 : [] ; % , = ( ) 名 称 说 明

冒号 方括号 分号 百分号 逗号 等号 圆括号

用于产生向量 用于创建和表示矩阵 用于控制不显示中间结果 用于注释语句 用于分隔矩阵列 用于赋值 用于函数调用和指定运算顺序

1.4常用数学函数
?

MATLAB提供了几乎所有初等函数,包括三 角函数、对数函数、指数函数和复数运算函数 等。函数的调用格式为:


函数名(变量)

?

函数的变量即是MATLAB的矩阵变量,但函 数的运算却是按数组的运算规则进行的,即函 数运算的结果是将函数运算分别作用于函数变 量(矩阵)的每一个元素。

MATLAB的常用数学函数
函数 说 明 sin(x) 正弦函数 cos(x) 余弦函数 tan(x) asin(x) acos(x) atan(x) 正切函数 反正弦函数 反余弦函数 反正切函数 函数 abs(x) 说 明
求实数的绝对值或复 数的幅值(模)

angle(x) 四象限内求复数 的幅角 sqrt(x) 求平方根 real(x) 求复数的实部 imag(x) 求复数的虚部 conj(x) 求复数的共轭

可以利用帮助命令: Help elfun 列出常用的基本数学函数

sinh(x) 双曲正弦函数 cosh(x) 双曲余弦函数 tanh(x) 双曲正切函数

sign(x) exp(x) log(x)

符号函数;返回自变量 (实数)的符号。 自然指数函数ex 自然对数函数 (以e为底)

asinh(x) 反双曲正弦函数
acosh( x) atanh( x) 反双曲余弦函数 反双曲正切函数

log10(x)

常用对数函数 (以10为底)

round(x) 四舍五入到最接近的整 数 rem(x,y) 除后余数,给出x/y的余 数

1.5MATLAB语句
?

?

MATLAB采用命令行式的表达式语言,每一 个命令行就是一条语句,其格式与书写的数学 表达式十分相近,非常容易掌握。 用户在命令窗口中输入语句并按下回车键后, 该语句就由MATLAB系统解释运行,并立即 给出结果。MATLAB的语句采用如下两种形 式之一:
– – –

★表达式 (表达式的结果赋值给ans变量) ★变量=表达式 表达式由变量名、常量、函数和运算符构成,其中 的变量名都应该是已经赋值过的变量。

注意:前面已经讲过分号“;”运算符在语句中 的作用,它可以控制结果的显示与否。

本节主要内容
MATLAB语言的特点和应用 ? MATLAB软件环境及功能介绍 ? MATLAB语言入门
?
–常量与变量 –标量、矩阵和向量 –各种运算符

–常用数学函数
–MATLAB语句形式

第二章 MATLAB语言的数值运算
?矩阵运算和数组运算 ?关系运算和逻辑运算

?多项式及其运算
?线性方程组的解 ?数值输出(显示)格式

一、矩阵运算和数组运算
? ?

MATLAB强大的数值运算是其突出的特点 四则运算与幂运算
+ - * / ------------矩阵加 矩阵减 矩阵乘 矩阵右除 .* ---- 点乘(数组乘)

./ ---- 点右除(数组右除)
.\ ---- 点左除(数组左除)

\
^

-------

矩阵左除

矩阵幂(乘方) .^ ---- 点幂(数组幂或乘方)

1.1 矩阵的加减和数组的加减
? 矩阵加减和数组加减的运算效果是一致的, 运算符也相同,没有区别 ? 参与运算的变量有两种情况:
1. 两个相同维数的矩阵相加减 2. 其中一个矩阵为标量 (它们都是按照实际矩阵的加减运算规则进行的)

? 举例

>> A=[1 2 3; 4 5 6; 7 8 9]; >> B=ones(3); >> C1=A+B; >> C2=1+A; >> C3=A+1; >> C2-C1; >> C3-C1; >> 1-C1+A

%产生一个三阶全1方阵 %矩阵加 % 标量和矩阵加 %矩阵减,结果应该为全零阵 %矩阵减,结果应该为全零阵

1.2 矩阵乘和数组乘

(一)矩阵乘
?
?

矩阵乘和数组乘(点乘)的运算是不同的,运算 符合也不同,一定要注意区分。 矩阵乘


条件:参与矩阵乘的两个矩阵必须满足矩阵乘法的规 则
? ?

即:Cm×n=Am×k×Bk×n 注:两个矩阵的顺序不能随意交换,否则不能满足维数关系 或结果不正确。



参与矩阵运算的两个矩阵其中一个可以是标量:标乘

?

举例:

>> a=[1 1 2 2;3 3 4 4]; >> b=[1 1 1;2 2 2;3 3 3;4 4 4]; >> a*b ans = 17 17 17 37 37 37 >> b*a %交换顺序后不满足矩阵乘 ??? Error using ==> mtimes Inner matrix dimensions must agree.

>> A=round(10*rand(3))+1; >> B=round(10*rand(3))+1; >> A*B-B*A %交换顺序后计算结果是不同的

ans =
20 61 51 -103 -33 -39 -40 17 13

1.2 矩阵乘和数组乘

(二)数组乘
?

数组乘也称为“点乘”
– – –

参与数组乘的两个矩阵的维数必须是相等的 其中一个矩阵可以是标量,和标乘的结果一致 点乘的顺序可以交换,不影响计算结果

? ?

数组乘的运算可以从向量的内积过程理解 举例:



(1)矩阵乘和数组乘的区别(方阵) (2)满足数组乘的矩阵不一定满足矩阵乘

>> a=[1 1 1;2 2 2;3 3 3]; >> b=eye(3); >> c=a*b c= 1 1 1 2 2 2 3 3 3 >> d=a.*b %可以看出结果的区别 d= 1 0 0 0 2 0 0 0 3 >> e=b.*a %交换顺序并不影响计算结果 e= 1 0 0 0 2 0 0 0 3

分析下面程序段: x=0:0.01*pi:2*pi; y1=sin(x); y2=sin(2*x); y3=x*sin(x);
? ?

程序是否能够得到希望的结果?

1.3矩阵除和数组除
(一)矩阵除
?
?

矩阵除和数组除的运算完全不一样 矩阵除分为矩阵左除和矩阵右除


矩阵右除
?
?

运算符 “/” 例如“B/A”,表示矩阵B右除A 条件:两个矩阵的列数相等,或者除数矩阵是标量 运算符 “\” 例如“A\B”,表示矩阵B左除A 条件:两个矩阵的行数相等,或者除数矩阵是标量



矩阵左除
?
?



显然:矩阵除不能交换矩阵的顺序





如果A是一个非奇异方阵,那么A \ B和B / A对 应A的逆与B的左乘和右乘; 即分别等价于: B / A =BA-1 和A \ B= A -1B 。
此时X = A \ B是矩阵方程A X=B的解 ? 这里的X具有与B相同的维数; ? 同理矩阵方程X A=B的解是X=B / A。
?





如果A是一个非奇异方阵,那么A \ B和B / A对 应A的逆与B的左乘和右乘; 即分别等价于: B / A =BA-1 和A \ B= A -1B 。
此时X = A \ B是矩阵方程A X=B的解 ? 这里的X具有与B相同的维数; ? 同理矩阵方程X A=B的解是X=B / A。
?





虽然非奇异矩阵的除法可以通过与矩阵的逆相 乘实现但是从运行时间和精度来说都不如使用 矩阵除法 B / A中A可以为标量,B中各元素除以A

?

示例

(二)数组除
?
?

数组除同样可以分为左除和右除 运算符: 右除 “./” 左除 “.\”

A. / B ? ?aij / bij ?
– –

B. \ A ? ?aij / bij ?




参与运算的两个矩阵必须是相同维数的矩阵 数组除是两个矩阵对应元素间进行除法运算 参与运算的矩阵可以是标量 左除和右除的计算结果一样

?

示例

思考下面程序: >> x=-4*pi:0.01*pi:4*pi; >> y1=sin(x); >> y2=y1/x; >> y3=y1./x;
?

可以画出y2和y3的波形验证分析的结论。

1.4矩阵乘方和数组乘方
(一)矩阵乘方
?
?

矩阵乘方可以看作是矩阵乘法的扩充,参与运 算的矩阵须是方阵 运算符“^”,使用格式“A^p”

– –

p为大于零的整数,表示p个矩阵A相乘,即 “A^p=AAA…..A”; p为小于零的整数,表示p个A的逆矩阵相乘,或者 是p个矩阵A相乘的逆; p等于零,“A^p”的运算结果是与A同维的单位阵

(二)数组乘方
? ? ? ?

数组乘方是矩阵对应元素之间的运算 运算符号:“.^” 使用格式:“A.^B” 其中A、B可以是两个同维的矩阵;也可以其中 一个为标量。 设p为标量,矩阵A、B分别记作:A=[ aij ] B=[ bij ],则各种情况下的解释如下:
– – –

A.^p=[ aijp ] A矩阵的p次方:A矩阵的每个元素的p 次方形成新的矩阵; p.^A=[ paij ] p的A次方:A矩阵的每个元素分别作 为幂指数,形成新的矩阵 A.^B=[ aijbij ] A的B次方:对应位置上的元素分别组 合进行幂运算,形成新的矩阵

?

分析下面程序段

是否能够完成:画出信号sinx、sin2x、sinx2的波形

x=0:0.01*pi:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(x^2); plot(x,y1,x,y2,x,y3) 应该为: y3=sin(x.^2);

1.5 矩阵的转置
? ?

运算符:“′” 运算规则:
– – –

若矩阵A的元素为实数,则与线性代数中矩阵的转 置相同。 若A为复数矩阵,则A转置后的元素由A对应元素 的共轭复数构成。即为共轭转置; 若仅希望转置,则用如下命令:“A.′”。

1.6 常用矩阵运算函数
?

det ( )函数
– –

det ( )函数用于求解方阵A行列式的值,其调用格 式为: d=det(A) %将方阵A的行列式的值赋值给d rank ( )函数用于求解矩阵的秩,使用格式为: r=rank(A) %将矩阵A的秩赋值给r inv ( )函数用于求解方阵的逆矩阵,使用格式为: d=inv(A) %将矩阵A的逆矩阵赋值给d,A为方阵

?

rank ( )函数
– –

?

inv ( )函数
– –

?

size( )函数
size( )函数用于计算矩阵的行数和列数 使用格式为: – d=size(A)

?

%将矩阵A的行数和列数组成的向量赋值给d %将矩阵A的行数赋值给m和列数赋值给n



[m,n]=size(A)
?

?

length ( )函数
length ( )函数用于计算矩阵的长度(函数和列数 的较大者,行向量取列数) 使用格式为: – b=length(A) %将矩阵A的长度赋值给b – b=max(size(A))


? ? ? ?

prod ( )函数


prod ( ) 函数用于实现矩阵元素的求积运算 sum ( )函数用于实现矩阵元素的求和运算 max ( )函数用于求出矩阵元素的最大值

sum ( )函数


max ( )函数


fliplr ( )函数
– – –

fliplr ( )函数用于实现矩阵矩阵的反折运算 用于产生对称信号(偶函数)时非常有用 举例:

二、关系运算和逻辑运算
除了数值运算以外MATLAB支持关系和逻辑运算

2.1关系运算
?

MATLAB的基本关系运算符为:
– –

>(大于) <(小于) ==(等于) >=(大于等于) <=(小于等于) ~=(不等于) 关系式成立为“1”,否则为“0”

? ?

关系运算的结果是“0”或“1”


两个矩阵必须是同维矩阵,或其中之一为标量:
– 两个维数相同的矩阵对应元素进行关系运算,形成一个同

维矩阵(元素为“0” 或 “1”) – 有一个矩阵为标量时,标量元素和矩阵每个元素进行关系 运算,得到和矩阵同维数的新矩阵(元素为“0” 或 “1”)

2.2 逻辑运算
? ?

MATLAB的逻辑运算符为:


&(与)

|(或) ~(非)

逻辑值
– –

非零元素的逻辑值为“1”(真) 零元素的逻辑值为“0”(假) 0&1=0;0&0=0; 1&1=1; 0|1=1;~0=1等等

?

运算规则:与数字逻辑的规则一致


?

?

参与运算的两个矩阵必须是同维矩阵:对应元 素进行逻辑运算;或者其中之一为标量:标量 和矩阵的每个元素进行逻辑运算。 运算结果是元素为“0”、“1”的矩阵

2.3 运算符的优先级
(1) 括号( )。 (2) 数组转置(.’),共轭转置(’),数组乘方(.^),矩阵 乘方(^)。 (3) 一元加(+),一元减(- ),逻辑非(~)。 (4) 数组乘法(.*),矩阵乘法(*),数组右除(./),数组 左除(.\),矩阵右除(/),矩阵左除(\)。 (5) 加法(+),减法(- )。 (6) 冒号运算符(:)。 (7) 小于(<),小于等于(<=),大于(>),大于等于(>=), 等于(= =),不等于(~=)。 (8) 逻辑与(&)。 (9) 逻辑或(| )。

三、多项式及其运算
3.1多项式的表示与创建
? ?

多项式用多项式系数构成的向量来表示,给定一 个向量也就相当于建立了一个多项式。 表示多项式的向量中的元素是该多项式的系数并 按照多项式变量的幂次降序排列: 多项式

Pn ( x) ? an x ? an?1 x n?1 ? ? ? a1 x ? a0
n

对应于向量

P ? [an , an?1 ,?, a1 , a0 ]

注意:对于多项式中的缺项,对应向量中应该 在相应的系数位置上补零,即n次多项式对应的 向量元素的长度一定为n+1。

3.2 多项式的加减
?

多项式用向量表示,因此多项式的加减就是向 量的加减,所以非常简单。但是向量的加减要 求维数相同,因此两个不同幂次的多项式进行 加减时,低阶的多项式必须补零。
(1)和向量加法一样做
例 :( x 3 ? 2 x 2
3

? 3x ? 4) ? ( x ? 4 x ? 9 x ? 16)
3 2 2

用MATLAB语言实现: a=[1,2,3,4];

? 2 x ? 6 x ? 12 x ? 20

b=[1,4,9,16];
d=a+b %系统运行结果:d=2 6 12 20

?

当两个多项式次数不同时,要用0补足 4 3 3 2 例 ( x ? 5 x ? x ? 5) ? ( x ? 4 x ? 9 x ? 16)
c=[1,-5,0,1,-5]; %四次多项式 b=[1,4,9,16]; %三次多项式 e=c+[0,b] %将三次多项式b前面加一个0 %补足成四次多项式,再相加 运算结果 e=[1 -4 4 10 11]

( x ? 5 x ? x ? 5) ? ( x ? 4 x ? 9 x ? 16)
4 3 3 2

? x 4 ? 4 x 3 ? 4 x 2 ? 10 x ? 11

3.3 多项式的乘除
?

多项式的乘除运算就没有加减运算那么简单了, 需要通过编程来实现,MATLAB中有相应的函数 来实现
函数 格式 conv( ) R=conv(P1,P2)

(1)多项式的相乘

说明 计算多项式A和B的乘积,若A的长度为m,B的长度为n,则R 的长度为m+n-l (2)多项式的除法 函数 deconv()

格式

[div,rest]=deconv(A,B)

说明 计算多项式A除以多项式B,得到商多项式div,余数多项 式rest。如果rest的元素全部为0,则表示多项式A可以整除多 项式B。

?

?

例:计算多项式S3+2S2+3S+4与S3+4S2+9S+16的乘积。 >> a=[1 2 3 4]; >> b=[1 4 9 16]; >> c=conv(a,b) c= 1 6 20 50 75 84 64 结果为:c (S)=S6+6S5+20S4+50S3+75S2+84S+64 用除法验证结果 >> [div,rest]=deconv(d,a) div = 1 4 9 16 rest = 0 0 0 0 0 0 0 结果rest为零向量,表示能够整除。结果和前面的计算一致

多项式数学形式的显示函数
函数 poly2sym( ) ? 格式 p1=poly2sym(p,‘x’) ? 说明 显示数学多项式的形式
?

例如: >> p=[1,2,3,4]; >> p=poly2sym(p,'s') p= s^3+2*s^2+3*s+4

3.4 多项式的根
?

多项式根的求解
– – –

函数 roots( ) 格式 r=roots(p) 说明 返回一个向量赋值给r(或ans),该向量是 多 项式p的根 函数 poly() 格式 p=poly(a) 说明 若a为向量[r0 r1 r2 r3 r4],返回由向量元素 为根的多项式,即(S-r0)(S-r1)(S-r2)(S-r3)(S-r4); 若a为矩阵(方阵),则返回矩阵a的特征多项式。

?

通过多项式的根可以构建多项式
– – –

例子:
>> r=[1 2]; >> p=poly(r); >> poly2sym(p,'x') ans = x^2-3*x+2 >> roots(p) ans = 2 1 >> poly(ans) ans = 1 -3 2

多项式的根就是一元方程的解
?

例:求方程 x^4+7x^3 +9x-20=0的全部 根。
– – –

在MATLAB命令窗口输入: p=[1,7,0,9,-20]; %建立多项式系数向量 x=roots(p) %求根
得到的结果是: x= -7.2254 -0.4286 + 1.5405i -0.4286 - 1.5405i 1.0826

通过poly和roots两个函数可以很方便地求 出矩阵的特征多项式和特征根
>> a=zeros(2); >> a(1,1)=1;a(2,2)=2; >> a a= 1 0 0 2 >> poly(a) ans = 1 -3 2 >> roots(ans) ans = 2 1

3.5 导数和积分
? ?

对多项式的求导和积分运算通过函数 polyder( )和polyint( )实现 polyder( )函数
– –

格式 q=polyder(p) 说明 计算多项式的微分,返回多项式赋值给q 格式1 q=polyint(p,k) 说明 计算多项式p的积分。其中k为q中的常数项 值;为一个标量。 格式2 q=polyint(p) 说明 同上,但假设k=0。

?

polyint( ) 函数
– – – –

3.6 多项式的求值
? ? ?

?

函数 polyval( ) 格式 y=polyval(p,x) 说明 计算多项式p在x处的值,x可以是向量也 可以是矩阵,并且当x为向量或矩阵时,该命 令计算的是多项式在每个元素处的值 示例:计算多项式项x2+2x+1即 (x+1)2 的值
>> y2=polyval(p,v) y2 = %求向量的值 4 9 >> y3=polyval(p,A) y3 = %求矩阵的值 4 9 16 25

>> p=[1 2 1]; %p(x)=x^2+2x+1 >> v=[1 2]; >> A=[1 2;3 4]; >> y1=polyval(p,1) y1 = 4

四、线性方程组的解
?

线性方程解的存在性判据:唯一解、无穷解、无解


系数矩阵的秩、增广系数矩阵的秩、未知量个数

?

? ? ?

线性方程组的求解问题是一个非常复杂的问题,有多 种求解方法,这里我们作为对求解线性方程组的认识, 介绍其基本的求解问题和求解方法。 方程为:A*X=B,其中X为未知矩阵,A、B为系数矩阵


方程的解为:X = inv(A)*B = A\B 方程的解为:X = B*inv(A) = B/A

方程为:X*A = B


以上解法中方程的系数矩阵A是非奇异阵,得到的是 一个准确解。如果A不是非奇异阵,利用矩阵除法仍 然可以得到一个解,不过不是准确解,是满足一定误 差条件下的近似解(最小二乘解)。

例题:求解线性方程组
? 5x1 ? 6x 2 ?x1 ? 5x 2 ? 6x 3 ? x 2 ? 5x 3 ? 6x 4 ? ? x 3 ? 5x 4 ? 6x 5 ? x 4 ? 5x 5 ? ?1 ?0 ?0 ?0 ?1

? x1 ? x 2 ? 3x 3 ? x 4 ? 1 ? ?3x1 ? x 2 ? 3x 3 ? 4x 4 ? 4 ?x1 ? 5x 2 ? 9x 3 ? 8x 4 ? 0 ?
? x1 ? 2x 2 ? 3x 3 ? x 4 ? 1 ? ?3x1 ? x 2 ? 5x 3 ? 3x 4 ? 2 ?2x1 ? x 2 ? 2x 3 ? 2x 4 ? 3 ?

A=[5,6,0,0,0 1,5,6,0,0 0,1,5,6,0 0,0,1,5,6 0,0,0,1,5 ] B=[1,0,0,0,1].' r_A=rank(A) r_AB=rank([A,B]) X=A\B A*X-B

A= 5 r_AB = 5 X= 2.2662 -1.7218 1.0571 -0.5940 0.3188 ans = 1.0e-015 * -0.4441 -0.6661 -0.2220 0 0

A=[1,1,-3,-1 3,-1,-3,4 1,5,-9,8 ] B=[1,4,0].' r_A=rank(A) r_AB=rank([A,B]) X=A\B A*X-B

A=[1,-2,3,-1

3,-1,5,-3
2,1,2,-2 ] B=[1,2,3].'

r_A=rank(A)
r_AB=rank([A,B]) X=A\B

五、数值输出(显示)格式
?

? ?

在MATLAB内部,所有的数据存储都是相同,只 是显示格式的不同,带来不同的显示结果,每 一个元素都是用双精度来表示和存储的,大约 有16位有效数字。 其值有效范围约为10-308~10+308 数值显示格式
– 任何MATLAB语句的执行结果都可以在屏幕上显示,

同时赋值给指定的变量 – 没有指定变量时,赋值给一个特殊变量ans – 数据的显示格式由format命令控制 – MATLAB总是以双字长浮点数(双精度)来执行所有 的运算

数值显示格式 – Format命令 如果结果为整数,则显示没有小数;如果结果不是 整数,则输出形式有: format short: 短格式(5位定点数)99.1253 format long: 长格式(15位定点数) 99.12345678900000 format short e:短格式e方式 9.9123e+001 format long e: 长格式e方式 9.912345678900000e+001 format bank: 2位十进制(小数部分) 99.12 format hex: 十六进制格式 format rat: 有理数格式
?

MATLAB的符号运算
—— matlab 不仅具有数值运算 功能,还开发了在matlab环境下 实现符号计算的工具包Symbolic Math Toolbox

符号运算的功能
? 符号表达式、符号矩阵的创建

? 符号的算术运算
? 符号表达式的简化和格式化

? 符号微积分运算
? 符号函数中的变量

? 符号函数的可视化
? ……

一、符号运算的基本操作
什么是符号运算 ? 与数值运算的区别 ※ 数值运算中必须先对变量赋值,然 后才能参与运算。 ※ 符号运算无须事先对独立变量赋值, 运算结果以标准的符号形式表达。
1.

? 特点:

? 运算对象可以是没赋值的符号变量 ? 可以获得任意精度的解
? Symbolic

Math Toolbox——符号运 算工具包通过调用Maple软件实现 符号计算的。 算, 它占据符号软件的主导地位。

? maple软件——主要功能是符号运

2. 符号变量与符号表达式
?

符号变量的声明
– sym( )函数和syms( )函数 – 例如:x=sym(‘x’) – syms a b c x y x

?

符号表达式
– f=sym(‘a*x^2+b*x+c’)

?

符号方程和符号表达式类似只是定义中 带等号

?符号方程和符号表达式类似只是定义中带

等号

例: f1=sym('a?x^2+b?x+c‘) ——二次三项式 f2= sym('a?x^2+b?x+c=0‘) — 方程 ※符号表达式或符号方程可以赋给符 号变量,以后调用方便;也可以不赋 给符号变量直接参与运算

3.符号矩阵的创建
数值矩阵A=[1,2;3,4] A=[a,b;c,d] —— 不识别

?用matlab函数sym创建矩阵
(symbolic 的缩写)
命令格式:A=sym('[ ※ 需用sym指令定义
※ 需用' '标识

]')

※ 符号矩阵内容同数值矩阵

例如:A = sym('[a , 2*b ; 3*a , 0]') A=

[ a, 2*b]
[3*a, 0]

这就完成了一个符号矩阵的创建。
注意:符号矩阵的每一行的两端都有方括号, 这是与 matlab数值矩阵的一个重要区别。

⑵ 符号矩阵的修改
指令修改
? ?

用A(?,?)='new' 来修改。 用A1=subs(A, 'old', 'new')来修改

例如:A =sym('[ a, 2*b; 3*a, 0] '); A(2,2)= '4*b' A =[ a, 2*b] [3*a, 4*b]
A1=subs (A, 'c', 'b') A1 =[ a, 2*c] [3*a, 4*c]

⑶ 符号矩阵与数值矩阵的转换
? 将数值矩阵转化为符号矩阵

函数调用格式:sym(A) A=[1/3,2.5;1/0.7,2/5] A= 0.3333 2.5000 1.4286 0.4000 sym(A) ans = [ 1/3, 5/2] [10/7, 2/5]

? 将符号常量矩阵转化为数值矩阵

函数调用格式:eval(A) >> A=[1/3,2.5;1/0.7,2/5]; >> A=sym(A) A= [ 1/3, 5/2] [ 10/7, 2/5] >> B=eval(A) B= 0.3333 2.5000 1.4286 0.4000 注:也可以使用double( )函数进行转换。

二、符合函数中的变量
? ?

变量替换
– subs(f,’old’,’new’ )

默认变量

三、符号运算
1.

符号表达式和符号矩阵的运算 定义了符号表达式和符号矩阵后,就 可以进行运算了,运算方法与数值计 算中的运算符和基本函数的使用方法 基本相同。 但要保证都是符号表达式或符号矩 阵,也就是利用sym()等命令创建的符 号表达式或矩阵

例1:f= 2*x^2+3*x-5; g= x^2+x-7; >> syms x >> f=2*x^2+3*x-5; g= x^2+x-7; >> h=f+g h = 3*x^2+4*x-12 例2:f=cos(x);g= sin(2*x); >> syms x >> f=cos(x);g=sin(2*x); >> f/g+f*g ans = cos(x)/sin(2*x)+cos(x)*sin(2*x)

?

符号矩阵的运算也类似 例3:
>> A =sym('[ a, 2*b; 3*a, 0] '); >> B =sym('[ 2*a, c; b, 2*c] '); >> C=A+B C= [ 3*a, 2*b+c] [ 3*a+b, 2*c] >> sin(A) ans = [ sin(a), sin(2*b)] [ sin(3*a), 0]

3. 符号微积分与积分变换
? ? ? ? ?

diff(f) — 对缺省变量求微分 diff(f,v) — 对指定变量v求微分 diff(f,v,n) —对指定变量v求n阶微分

int(f) — 对f表达式的缺省变量求积分
int(f,v) — 对f表达式的v变量求积分

?

int(f,v,a,b) — 对f表达式的v变量在(a,b)
区间求定积分

int('被积表达式','积分变量','积分上限', '积分下限')—— 定积分 ——缺省时为不定积分

例.计算二重不定积分?? xe dxdy
? xy

F=int(int('x*exp(-x*y)','x'),'y')

F=

1/y*exp(-x*y)

4.符号代数方程求解* matlab符号运算能够解一般的线性方 程、非线性方程及一般的代数方程、代 数方程组。当方程组不存在符号解时, 又无其他自由参数,则给出数值解。 命令格式:

solve(f) —— 求一个方程的解
Solve(f1,f2, …fn) —— 求n个方程的解

例1. ax2+bx+c =0求解 f=sym(a*x^2+b*x+c’);或 f=sym('a*x^2+b*x+c=0'); solve(f) —— 对缺省变量x求解 计算机 ans = 格式 [1/2/a*(-b+(b^2-4*a*c)^(1/2))] [1/2/a*(-b-(b^2-4*a*c)^(1/2))]

? b ? b ? 4ac 2a
2

一般格式

solve(f , 'b' ) —— 对指定变量b求解
ans =

-(a*x^2+c)/x

例2. 符号方程cos(x)=sin(x) 求解 f1=solve('cos(x)=sin(x)')
f1 = 1/4*pi

例3. 解方程组

x+y+z=1 x-y+z=2 2x-y-z=1

g1=‘x+y+z=1’,g2=‘x-y+z=2’,…

g3='2*x-y-z=1'
f=solve(g1,g2,g3)

f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')

f= x: [1x1 sym] y: [1x1 sym] z: [1x1 sym] f.x ans = 2/3 [x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1') x = 2/3 y =-1/2 z =5/6

5. 符号微分方程求解 —— 用一个函数可以方便地得到微 分方程的符号解 符号微分方程求解指令:dsolve 命令格式:dsolve(f,g) ? f — 微分方程,可多至12个微分方程的
求解;g为初始条件 ? 默认自变量为 'x',可任意指定自变量't', 'u' 等 ? 微分方程的各阶导数项以大写字母D表示

dy dy 或 y的一阶导数—— Dy dt dx
d y d y 2 或 2 y的二阶导数—— D2y dt dx d y d y y的 n 阶导数—— Dny n 或 n dt dx
n 2 2

n

[y1,y2…]=dsolve(x1,x2,…xn) —— 返 回微分方程的解

一阶微分方程
dsolve('Dx=y','Dy=-x','x(0)=0','y(0)=1')

ans :x(t) = sin(t), y(t) = cos(t)
[x,y]=dsolve('Dx=y','Dy=-x','x(0)=0','y(0)=1')

二阶微分方程 dsolve('D2y=-a^2*y','y(0)=1','Dy(pi/a)=0')

ans = cos(a*x)

d y dy 例3. 2 ? 2 ? 2 y ? 0 dx dx

2

dy y (0) ? 1 , (0) 0求该方程的解 ? dx
y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0') y=

exp(-x)*cos(x)+exp(-x)*sin(x)
ezplot(y) —— 方程解y(t)的时间曲线图

exp(-t) sin(t)+exp(-t) cos(t)

250

200

150

100

50

0

-6

-4

-2 t

0

2

4

四、符合表达式简化和格式化 simplify( )函数 ? simple( )函数 ? pretty( )函数
?

MATLAB的绘图功能

—— matlab 具有非常完善的绘 图功能,能够描绘二维、三维的 多种图形

二维曲线图形的绘制
?

单个向量画图
– x=[1,3,5,2,6,3,9,7,5,3,1];
– plot(x)
? 在这种情况下,当x是实向量时,以该向量元素 的下标为横坐标,元素值为纵坐标画出一条连续 曲线,这实际上是绘制折线图

?

两个向量画图
– X=1:5; – Y=[0.7,0.5,0.2,-0.4,0.6];

– plot(X,Y)
– plot(X,Y,'*')

%画连线图
%画散点图

?

绘制单根二维曲线
plot函数的基本调用格式为: plot(x,y) 其中x和y为长度相同的向量,分别用于存储x 坐标和y坐标数据。

?

例如:
– >> x=-3:0.1:3; – >> y=x.^3-x+1; – >> plot(x,y)

?

例: 在0≤x≤2?区间内,绘制曲线 y=2e-0.5xcos(4πx)

程序如下: x=0:pi/100:2*pi; y=2*exp(-0.5*x).*cos(4*pi*x); plot(x,y)

绘制多根二维曲线 ? 调用格式为:
?

– plot(x1,y1,x2,y2,…,xn,yn) – x1和y1,x2和y2,…,xn和yn分别组成一组 向量对,每一组向量对的长度可以不同。每 一向量对可以绘制出一条曲线,这样可以在 同一坐标内绘制出多条曲线。
?

例如:
– >> x=linspace(0,2*pi,30); – >> y=sin(x); – >> z=2*cos(x); – >> plot(x,y,x,z)

具有两个纵坐标标度的图形 ? 在MATLAB中,如果需要绘制出具有不 同纵坐标标度的两个图形,可以使用 plotyy绘图函数。调用格式为:
?

– plotyy(x1,y1,x2,y2) – 其中x1,y1对应一条曲线,x2,y2对应另一条 曲线。横坐标的标度相同,纵坐标有两个, 左纵坐标用于x1,y1数据对,右纵坐标用于 x2,y2数据对。
?

举例:

?

例: 用不同标度在同一坐标内绘制曲线 y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx)。

程序如下: x=0:pi/100:2*pi; y1=0.2*exp(-0.5*x).*cos(4*pi*x); y2=2*exp(-0.5*x).*cos(pi*x); plotyy(x,y1,x,y2);

二维曲线绘图的修饰
?

plot(x,y,’s’) ? plot(x1,y1,’s1’,x2,y2,’s2’)
– s、s1、s2为用来指定线型、色彩、数据点形的 选项字符串;可以缺省使用确认值 – 各参数选项取值见下表 –例如,’b-.’表示蓝色点划线,’y:d’表示黄 色虚线并用菱形符标记数据点。 –当选项省略时,MATLAB规定,线型一律用实线, 颜色将根据曲线的先后顺序依次。

绘图参数表 色彩字 符 b g r c m y k 所定额 色 蓝色 绿色 红色 青色 洋红 黄色 黑色 白色 线型字 符 : -. -线型格 式 实线 点线 点划线 虚线 标记符 号 . o x + * v ^ 数据点形 式 点 圆圈 叉号 加号 星号 三角形 (向下) 三角形 (向上) 方形 标记符 号 d > < h p 数据点形式 菱形 大于号 小于号 六角星 五角星

w

s

示例 >> x=0:pi/20:2*pi; >> y1=sin(x); >> y2=cos(x); >> plot(x,y1) >> plot(x,y2) >> plot(x,y1,x,y2) >> plot(x,y1,x,y2) %不加option选项,函
?

数会自动分配颜色 出曲线

>> plot(x,y1,'r:',x,y2,'md') %按设定格式输

?

例 在同一坐标内,分别用不同线型和颜色 绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e0.5xcos(πx),标记两曲线交叉点。

程序如下: x=linspace(0,2*pi,1000); y1=0.2*exp(-0.5*x).*cos(4*pi*x); y2=2*exp(-0.5*x).*cos(pi*x); k=find(abs(y1-y2)<1e-2); %查找y1与y2相等点(近似相等)的下


x1=x(k); %取y1与y2相等点的x坐标 y3=0.2*exp(-0.5*x1).*cos(4*pi*x1); %求y1与y2值相等点
的y坐标

2

1.5

1

0.5

0

-0.5

-1

-1.5 0

1

2

3

4

5

6

7

离散序列图的绘制 ? stem函数 ? stem( y )
– 以x=1,2,3…为各个数据点的x坐标,以y向 量的各个对应元素为y坐标,在(x,y)坐 标点画一个空心小圆圈,并连接一条线段到 X轴。
?

stem(x,y,’option’)
– 以x向量的各个元素为x坐标,以y向量的各 个对应元素为y坐标,在(x,y)坐标点画 一个空心小圆圈,并连接一条线段到X轴。 可以用option选项控制线型和颜色。

?

stem(x,y,’filled’)
– 以x向量的各个元素为x坐标,以y向量的各

示例:作出
程序:

y (n) ? e ?0.3nT sin 2nT 的图形,T取0.2

>> x=0:0.2:10; >> y=exp(-0.3*x).*sin(2*x); >> stem(x,y)
输出图形:
1

0.5

0

-0.5

0

2

4

6

8

10

二维图形的修饰 ? 坐标轴范围的调整
– axis( [xmin,xmax,ymin,ymax] )

坐标控制 ? axis函数的调用格式为:
?

– – – – – – –

axis([xmin xmax ymin ymax zmin zmax]) axis函数功能丰富,常用的格式还有: axis equal:纵、横坐标轴采用等长刻度。 axis square:产生正方形坐标系(缺省为矩形)。 axis auto:使用缺省设置。 axis off:取消坐标轴。 axis on:显示坐标轴。

?

图形标注
– 有关图形标注函数的调用格式为:

title(图形名称) xlabel(x轴说明) ylabel(y轴说明) text(x,y,图形说明) legend(string1,string2,…)添加图例 gtext(’string’)说明:在鼠标给定的位置上写 出由string给出的字符串。这种标注对不同曲线 标注时非常有效。

? ?

给坐标加网格线用grid命令来控制。
– grid on/off命令控制是画还是不画网格线,不带参数的grid命 令在两种状态之间进行切换。

给坐标加边框用box命令来控制。
– box on/off命令控制是加还是不加边框线,不带参数的box命 令在两种状态之间进行切换。

图形窗口的控制
?

(1)创建或打开图形窗口
– figure 命令:每调用一次就打开一个新的 图形窗口,作为当前窗口 – figure(n)命令:创建或打开第n个图形窗 口,使之成为当前窗口 – clf 命令:清除当前图形窗口中的所有内容 – cla 命令:清除当前图形窗口中的图形,保 留其坐标 – 这样利用figure命令可以将不同函数的曲线 显示在不同的窗口上同时观察。

?

(2)图形重叠
– ★ hold on 命令:保留当前窗口的图形 – ★ hold off 命令:解除hold on 命令 – 默认情况下,plot命令在执行时首先将当前 图形窗口清屏,看到的是最后一条plot命令 绘出的图形,若执行了hold on命令则可以 在保留原来图形的基础上绘制图形,实现了 多个图形绘制在一个图形窗口上,不同于打 开新图形窗口的办法。

?

(3)图形窗口分割

– ★subplot(m,n,p) 将当前窗口分割成m 行、n列,并且现在在其中的第p个区域绘 图。各个绘图区域以“从左到右,先上后下”

?例:在图形窗口中,以子图形式同时绘制 多根曲线。
程序如下: clear; x=0:0.1:2*pi; subplot(2,2,1) plot(x,sin(x)); pause; subplot(2,2,2) plot(x,cos(x)); pause; subplot(2,2,4) plot(x,cos(x).*sin(x)); pause; subplot(2,2,3) plot(x,sin(x),x,cos(x),x,cos(x).*sin(x))
?

1 0.5 0 -0.5 -1

1 0.5 0 -0.5 -1

0

2

4

6

8

0

2

4

6

8

0.5

1 0.5

0

0 -0.5

-0.5

0

2

4

6

8

-1

0

2

4

6

8

特殊二维图形绘制
?

条形图
– 绘图函数:bar();barh();bar3();bar3h(); – bar(X,Y,width) 竖直条形图
? X:横坐标向量,Y纵坐标向量(或矩阵:按行画出) ? width:竖条宽度,默认为0.8 (0~1,大于1重叠)

– barh( ) 水平条形图 – bar3( ) 三维竖直条形图 – bar3h( ) 三维水平条形图
? 使用方法与函数 bar( ) 类似

?

例:绘制一年12个月份的平均气温变化 情况,12个月份平均气温数据:(-9,6,4,11,23,26,36,30,21,17,10,3)
– x=1:12; – y=[-9,-6,4,11,23,26,36,30,21,17,10,3] – bar(x,y)
40 35 30 25 20 15 10 5 0 -5 -10

1

2

3

4

5

6

7

8

9

10

11

12

x=1:12; ? y=[-9,-6,4,11,23,26,36,30,21,17,10,3 ? -10,-4,2,6,18,20,26,24,18,15,8,2]; ? y=y'; ? bar(x,y,'grouped')
?
40 35 30 25 20 15 10 5 0 -5 -10

1

2

3

4

5

6

7

8

9

10

11

12

特殊二维图形绘制
?

直方图
– 直方图主要用于显示数据的分布规律:根据给 出的数据分布进行统计处理,并显示每个区间 上含有数据的个数 – 绘图函数:hist();rose();
? hist(Y):使用10个等距离分布的区间对向量Y的分 布进行统计,返回每个区间上含有元素的个数 ? hist(Y,m):使用m个区间进行统计

– rose( )函数在极坐标系中建立直方图

Y=randn(1500,1); ? subplot(2,1,1) ? hist(Y); ? subplot(2,1,2) ? hist(Y,30); ? % N=hist(Y,30)
?

500 400 300 200 100 0 -4 -3 -2 -1 0 1 2 3 4

200 150 100 50 0 -4

-3

-2

-1

0

1

2

3

4

特殊二维图形绘制
?

扇形图
– 扇形图用于显示向量中的元素所占向量元素总 和的百分比。 – 绘图函数:pie();pie3(); – pie(x,explode ) 绘制向量x中数据的二维扇形 图,explode可选参量,用于指定从扇形图中 抽出一部分的块,长度与x相同,向量中非零 元素向量对应的块将被抽出。 – pie3( ) 绘制三维扇形图

例: x = [1 3 0.5 2.5 2]; ? subplot(211) ? pie(x) ? explode = [0 1 0 0 0]; ? subplot(212) ? pie(x,explode)
?

11%

22%

33% 28% 6%

11%

22%

33% 28% 6%

三维图形的绘制(具体内容略) ? 三维曲线的绘制 ? plot3(x,y,z,’option’ ) ? 三维曲面的绘制
– 网格曲面
? mesh(x,y,z,’option’) 绘制网格图 ? meshc() 绘制网格图和基本的等值线图 ? meshz() 绘制包含零平面的网格图

– 阴影曲面
? surf() surfc() surfl()

?

图形的视角(观察点)的改变

例子: t = 0:pi/50:10*pi; ? plot3(sin(t),cos(t),t) ? grid on ? axis square
?

35 30 25 20 15 10 5 0 1 0.5 0 0 -0.5 -1 -1 -0.5 0.5 1

例子 [x,y]=meshgrid(-8:0.5:8); ? z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+e ps); ? plot3(x,y,z)
?

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 10 5 0 -5 -10 -8 -6 -4 -2 0 2 4 6 8

例程:绘制网格或阴影曲面图
[x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2,2,1); mesh(x,y,z); title('mesh(x,y,z)') subplot(2,2,2); meshc(x,y,z); title('meshc(x,y,z)') subplot(2,2,3); meshz(x,y,z) title('meshz(x,y,z)') subplot(2,2,4); surf(x,y,z); title('surf(x,y,z)')

程序运行结果:
mesh(x,y,z) 1 0 -1 10 0 -10 -10 meshz(x,y,z) 1 0 -1 10 0 -10 -10 0 1 0 -1 10 0 -10 -10 0 0 1 0 -1 10 0 -10 -10 surf(x,y,z) 0 meshc(x,y,z)

10

10

10

10

轻松绘图函数:绘制函数表达式的图
?

ezplot()
– 绘制符号表达式的二维图形 – ezplot(‘sin(x)*cos(2*x)’) – 符号表达式 – syms x; – f=sin(x)*cos(2*x); – ezplot(f)

ezmesh() ? ezsurf()
?

– 绘制三维曲面图形

举例:
?

绘制二元函数的三维表面图
sin( xy ) z? xy

[x,y]=meshgrid([-3:0.1:3]); ? z=(sin(x.*y)+eps)./(x.*y+eps); ? surf(x,y,z)
?

1

0.5

0

-0.5 4 2 0 -2 -4 -4 -2 2 0 4

轻松绘图
?

使用符号函数
– ezsurf(‘sin(x*y)/(x*y)’)
– z=@(x,y)sin(x*y+eps)/(x*y+eps); – ezsurf(z)

sin(x y+eps)/(x y+eps)

1

0.5

0

-0.5 5 5 0 -5 y -5 x 0

?

绘出椭圆柱面
? x ? 3cos ? ? ? y ? 2*sin ? ?z ? t ?

x2 y2 ? ? 1 的图形 9 4

x=@(alpha,t)3*cos(alpha); ? y=@(alpha,t)2*sin(alpha); ? z=@(alpha,t)t; ? ezmesh(x,y,z)
?

x = 3 cos(? ), y = 2 sin(? ), z = t

5

z

0

-5

2 1 0 -1 -2 y -4 -2 x 0 2

4

第五章 MATLAB程序设计 1 M文件 2 程序控制结构 3 函数文件

一、M文件
? M文件概述 ? 用MATLAB语言编写的程序,称为M 文件。M文件可以根据调用方式的不 同分为两类:命令文件(Script File)和 函数文件(Function File)。

M文件的建立与打开
M文件是一个文本文件,它可以用任何编 辑程序来建立和编辑,而一般常用且最为 方便的是使用MATLAB提供的文本编辑器。 1.建立新的M文件 2.打开已有的M文件

二、程序控制结构
1. 顺序结构 按命令行的排列顺序执行 2. 选择结构 if语句 switch语句 3. 循环结构 for语句 while语句

2.选择结构 (1)if语句 在MATLAB中,if语句有3种格式。 (a) 单分支if语句: if 条件 语句组 end

(b) 双分支if语句: if 条件 语句组1 else 语句组2 end 当条件成立时,执行语句组1,否则执行语 句组2,语句组1或语句组2执行后,再执行 if语句的后继语句。

(c) 多分支if语句: if 条件1 语句组1 elseif 条件2 语句组2 …… elseif 条件m 语句组m else 语句组n end 语句用于实现多分支选择结构。

(2)switch语句 switch语句根据表达式的取值不同,分别执行 不同的语句,其语句格式为:
switch 表达式 case 表达式1 语句组1 case 表达式2 语句组2 …… case 表达式m 语句组m otherwise 语句组n end

3. 循环结构 (1)for语句 for语句的格式为:
for 循环变量=表达式1:表达式2:表达式3 循环体语句 end

(2)while语句 while语句的一般格式为:
while (条件) 循环体语句 end

while语句举例 例:从键盘输入若干个数,当输入0时结束输入,求这些 数的平均值和它们之和。 解:程序如下: Sum=0;Cnt=0; Val=input('Enter a number (end in 0):'); while (Val~=0) Sum=Sum+Val; Cnt=Cnt+1; Val=input('Enter a number (end in 0):'); end if (Cnt > 0) Sum Mean=Sum/Cnt end disp(‘end’)

break语句和continue语句
与循环结构相关的语句还有break语句和 continue语句。它们一般与if语句配合使用。 break语句用于终止循环的执行。当在循环体 内执行到该语句时,程序将跳出循环,继 续执行循环语句的下一语句。 continue语句控制跳过循环体中的某些语句。 当在循环体内执行到该语句时,程序将跳 过循环体中所有剩下的语句,继续下一次 循环。

三、函数文件 函数文件的基本结构 ? 函数文件由function语句引导,其基本结构 为:
– – – function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句

? 其中以function开头的一行为引导行,表示该 M文件是一个函数文件。函数名的命名规则 与变量名相同。输入形参为函数的输入参数, 输出形参为函数的输出参数。当输出形参多 于一个时,则应该用方括号括起来。

例 编写函数文件求半径为r的圆的面积和周长。

函数文件如下: function [s,p]=fcircle(r) %CIRCLE calculate the area and perimeter of a circle of radii r %r 圆半径 %s 圆面积 %p 圆周长 %2005年10月9日编 s=pi*r*r; p=2*pi*r;

函数调用 函数调用的一般格式是:
[输出实参表]=函数名(输入实参表)
要注意的是,函数调用时各实参出现的顺 序、个数,应与函数定义时形参的顺序、个 数一致,否则会出错。函数调用时,先将实 参传递给相应的形参,从而实现参数传递, 然后再执行函数的功能。

匿名函数(Anonymous Funtion)
? 匿名函数使用函数句柄表述匿名函数
– 定义形式为: – 函数句柄=@(变量名)函数表达式 – 例如: – f=@(x)x.^2; – 定义了函数f(x)=x^2 – f(2)计算在x=2处的值

匿名函数(Anonymous Funtion)
? 匿名函数可以调用Matlab函数,也可以使 用工作区内存在的变量,
– 例如: – a=2; – f=@(x)x.^2+a; – f(2) %计算时引用了变量a; – a=0; – f(2) % 并不改变f(2)结果

匿名函数(Anonymous Funtion)
? 匿名函数使用函数句柄表述匿名函数
– 定义形式为: – 函数句柄=@(变量名)函数表达式 – 例如: – f=@(x)x.^2; – 定义了函数f(x)=x^2 – f(2)计算在x=2处的值

? 匿名函数也可以由Matlab的内置函数或M文 件函数创建
– 例如: – f=@sin; %创建了匿名函数f(x)=sin(x);

? functions() 查看函数信息
– functions(f)

? 主程序文件的格式特征
(1) 用clear、close all等语句开始,清除掉工作空 间中原有的变量和图形,以避免其他己执行的程序 残留数据对本程序的影响。 前几行通常是对此程序用途的说明,特别是在 运行时对用户输入数据的要求,更要叙述清楚。 这些注释行必须以%号开始,以便计算机执行 时不予理会。MATLAB规定,在键入“help文件名” 时,屏幕上会将该文件中以%起头的最前面几行的 内容显示出来,使用户知道如何使用。这些注释是 可以用汉字的。%号也可以放在程序行的后面做注 释,MATLAB将不执行该字符后的任何内容。

? (2)程序的主体。如果文件中有全局变量, 即在子程序中与主程序共用的变量,应在 程序的起始部分注明。其语句是
– ★global 变量名1 变量名2 … …

? (3) 程序按MATLAB标识符的要求起文件名, 并加上后缀m。文件名中不允许用汉字。将 文件应该存入自己确定的子目录中,该子 目录应置于MATLAB的搜索路径下。所以 还应避免出现汉字路径名。 特别要注意英文和汉字的有些标点符号 (如句号、冒号、逗号、分号、引号乃至%、 =、()等

? 人机交互命令
?echo on(off) 控制M文件中的命令是否在命令窗口显示 ?pause(n) 程序执行到此处暂停n秒,再继续执行。 ?如果没有括号参数,则等持用户键入任意键后才继续执行。 ?keyboard 程序暂停,用户可以像在普通MATLAB命令窗中那 样进行任何操作(例如检查中间结果等)。键入字符串return, 系统恢复运行程序,在M文件中设置该命令,有利于进行程序 调试以及临时修改变量内容。 ?input(‘提示符’) 程序执行到此处暂停,用户输入数据。数据 输入后,程序继续执行。 ?disp(‘显示信息’) 可以显示提示信息或运算结果等,可用于程 序运行结果的显示,有利于判断程序运行的状态; ?^C 强行停止程序运行的命令。^C念做(Control-C),即先按 下Ctrl键,不抬起再按C键。在发现程序运行有错,运行时间 太长时,可用此方法中途终止它。

例:求一元二次方程ax2 +bx+c=0的根。

程序如下
a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]; disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

Matlab程序设计应用

曲阜师范大学物理工程学院 秦文华

MATLAB的应用
? ? ? ? ? ? 数据的输入 数据简单统计分析 数据插值 曲线拟合 方程求根 函数极值

MATLAB的应用---数据的输入

? 利用键盘输入变量的方式建立数据 内容 ? 程序中利用input命令输入参数
-data1=input(‘提示信息’)

? 利用load命令加载数据文件
-与save命令配合使用 -load filename

? Excel数据文件的加载
-直接打开Excel文件,加载到工作空间 -利用函数xlsread读入: -data2=xlsread(‘文件名’)

? 数据文件的操作:打开、关闭、 读、写等操作

MATLAB的应用---数据统计分析

?数据的查取
? 最大值、最小值、中值、固定值的查找

?数据的简单计算
? 和、积、均值、累计和、累计积等

?简单统计分析
? 相关系数、协方差矩阵、标准差、差分等

1.查取最大值
? max( )函数 ? 命令格式
? [Y,I]=max(X) - 返回矩阵X的各列中的最大元素及其该元素的位置 赋予行向量Y与I; - 当X为向量时,则Y与I为单变量。 ? [Y,I]=max(X,[],DIM) - DIM=1或2控制命令按列或按行操作 ? Z=max(X,Y) - 比较两个矩阵,取对应两个元素较大者形成新的 矩阵

2.查取最小值
? min( )函数 ? 命令格式
? ? ? ? [Y,I]=min(X) [Y,I]=min(X,[],DIM) Z=min(X,Y) 使用方法同max函数

3.求中值
? 所谓中值,是指在数据序列中其值的大小恰 好在中间;如果数据为偶数个时,则中值等 于中间的两项之平均值。 ? 函数:median( ) ? Y=median(X)
? 返回矩阵X各列元素的中值赋予行向量Y。若X 为向量,则Y为单变量

? Y=median(X,DIM)

4.数据查询与查找
? ? ? ? ? 函数 find( ) [m,n]=find(A==K) [m,n]=find(A>K) [m,n]=find(A<K) ……

5.和、平均值和积
? 求和
? Y=sum(X); ? Y=sum(X,DIM);

? 求平均值
? Y=mean(X); ? Y=mean(X,DIM);

? 求积
? Y=prod(X); ? Y=prod(X,DIM);

6.其他
? ? ? ? ? ? corrcoef(x) cov(x) cumprod(x) cumsum(x) diff(x) dot (x,y) 求相关系数 协方差矩阵 求列的累计积 求列的累计和 求向量组的差分 求向量x与y的点积

? std(x) 列的标准差 ? dradient(Z,dx,dy) 求矩阵的数值偏 导数

? 12个同学的英语、数学、物理、化学、生物 各科的成绩存放在score中,求:各科平均 成绩、各科最高分和最低分、及各学生平均 分等

MATLAB的应用---数据插值
? 插值:由已知数据计算区间内其他数据点的值 ? 一维数据插值、二维数据差值 ? 不同的插值方法
? 拉格朗日插值 ? 分段线性插值 ? 三次样条插值

函数interp1( )
? 调用格式:Y1=interp1(X,Y,X1,'method')
1. 函数根据X,Y的值,计算函数在X1处的值。X,Y是 两个等长的已知向量,分别描述采样点和样本值, X1是一个向量或标量,描述欲插值的点,Y1是一 个与X1等长的插值结果。 method是插值方法,允许的取值有:’linear’ 线性插值、’nearest’最接近点插值、’cubic’立 方插值、’spline’三次样条插值。

注意: (1)X1的取值范围不能超出X的给定范围, 否则,会给出“NaN”错误。(2)MATLAB中 有一个专门的3次样条插值函数: Y1=spline(X,Y,X1)

三次样条插值:
? 三次样条插值函数 ? YY=spline(X,Y,X1)

例:用不同的插值方法计算在π/2点的值。 >>x=[0,0.5,0.8,1.5,1.9,2.3] y=[4,5,8,9,6,3] >> y1=spline(x,y,pi/2) y1 = 8.5931e+000 >>y2=interp1(x,y,pi/2,'linear') y2 = 8.4690e+000

例: 某观测站测得某日6:00时至18:00时之间每隔2 小时的室内外温度(℃),用3次样条插值分别求 得该日室内外6:30至17:30时之间每隔2小时各点 的近似温度(℃)。
解:设时间变量h为一行向量,温度变量t为一个两 列矩阵,其中第一列存放室内温度,第二列储 存室外温度。命令如下: h =6:2:18; t=[18,20,22,25,30,28,24;15,19,24,28,34,32,30]'; XI =6.5:2:17.5 YI=interp1(h,t,XI,’spline’) %用3次样条插值 计算

不同插值结果的简单比较:
? ? ? ? ? ? ? x=0:0.3:2*pi; y=sin(x); x1=[pi/2,pi/2*3]; d1=interp1(x,y,x1,'linear'); d2=interp1(x,y,x1,'spline'); d3=interp1(x,y,x1,'nearest'); d4=interp1(x,y,x1,'cubic');

MATLAB的应用---二维数据插值
在MATLAB中,提供了解决二维插值问题的 函数interp2,其调用格式为: Z1=interp2(X,Y,Z,X1,Y1,'method')
X,Y是两个向量,分别描述两个参数的采样点, Z是与参数采样点对应的函数值, X1,Y1是两个向量或标量,描述欲插值的点。 Z1是根据相应的插值方法得到的插值结果。 method的取值

’linear’、’nearest’、’cubic’、’spline’
X,Y,Z也可以是矩阵形式。 同样,X1,Y1的取值范围不能超出X,Y的给定范围,否则,会 给出“NaN”错误。

例:某实验对一根长10米的钢轨进行热源的温度传播测试。 用x表示测量点0:2.5:10(米),用h表示测量时间 0:30:60(秒),用T表示测试所得各点的温度(℃)。试用 线性插值求出在一分钟内每隔20秒、钢轨每隔1米处的 温度TI。
命令如下: x=0:2.5:10; h=[0:30:60]'; T=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41]; xi=[0:10]; hi=[0:20:60]'; TI=interp2(x,h,T,xi,hi)

MATLAB的应用---曲线拟合
? 多项式拟合函数:ployfit:求最小二乘拟合多项式 的系数 ? 应用:可以利用polyval函数按所得的多项式计算 所给出的点上的函数近似值。
polyfit函数的调用格式为: [P,S]=polyfit(X,Y,m) 函数根据采样点X和采样点函数值Y,产生一个m次多项 式P及其在采样点的误差向量S。 其中X,Y是两个等长的向量,P是一个长度为m+1的向量, P的元素为多项式系数。 polyval(P,x) 按多项式的系数计算x点多项式的值.

例 已知数据表[t,y], t={0,1.7,2.9,3.5,4.8,6.9,7.3,8.6,9.4,10.2]} y={5.6,7.8,14,18,19.6,18.6,17.6,15.4,12.5,14} 试求2次拟合多项式p(t),然后求ti=1,1.5,2,2.5,…,9.5,10各点的函数近似 值。 解:源程序如下 T=[0,1.7,2.9,3.5,4.8,6.9,7.3,8.6,9.4,10.2] Y=[5.6,7.8,14,18,19.6,18.6,17.6,15.4,12.5,14] P=polyfit(T,Y,2) ti=1:0.5:10 yi=polyval(P,ti) plot(T,Y,'r',ti,yi,'b')

? 多变量的拟合(已知函数表达式形式)。
? 例:假定有x1,x2 及因变量y的一组观察数据, 设他们有关系 y ? a0 ? a1 x1 ? a2 x2 ? 求系数a0,a1,a2
>> >> >> >> >> x1=[0.6,1.5,1.8,2.4,3.0,3.3]; x2=[0.3,0.9,1.2,2.7,3.3,4.2]; y=[0.51,0.78,0.84,0.69,0.81,0.72]; X=[ones(size(x1));x1;x2]; a=X'\y‘ % a=[a0,a1,a2]' 实质:线性方程组的求解

用确定函数表达式拟合
? MATLAB提供了两个求非线性最小二乘拟 合的函数:lsqcurvefit和lsqnonlin.两 个命令都要先建立M文件fun.m,在其中定 义函数f(x),但两者定义f(x)的方式是不 同的

matlab曲线拟合工具
? ? ? ? 在命令窗口输入:cftool 运行该命令可以打开曲线拟合工具箱 该工具箱可以完成单变量拟合 工具箱可以完成多种形式的单变量拟合,具 体拟合的类型有:用户自定义的函数类型、 指数逼近、傅立叶逼近、高斯逼近、插值逼 近、多形式逼近、幂逼近、有理数逼近、正 弦曲线逼近,以及Weibull Smoothing、

Spline等逼近方式。

工具箱提供的拟合类型有
? ? ? ? ? ? ? ? ? ? ? Custom Equations:用户自定义的函数类型 Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x) Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w) Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((xb1)/c1)^2) Interpolant:插值逼近,有4种类型,linear、nearest neighbor、 cubic spline、shape-preserving Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、 cubic ~、4-9th degree ~ Power:幂逼近,有2种类型,a*x^b 、a*x^b + c Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型 Smoothing Spline: Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1) Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)

数值积分函数
? 单变量积分函数
? quadl()

? 二重积分函数
? dblquad()

? 三重积分函数
? triplequad()

函数数值积分
? [q,fcnt] = quadl(fun,a,b) ? 自适应Lobatto 数值积分,适用于精度要求 高,被积函数曲线比较平滑的数值积分 ? 注意事项:
? 1.被积函数fun 必须是函数句柄 ? 2.积分限[a,b]必须是有限的,因此不能为inf

例子
? 求数值积分

2x ? 3 ?0 1 ? x2 dx
1

? f=@(x)(2*x+3)./(1+x.^2) ? I=quadl(f,0,1)

二重积分举例
? 计算二重积分 ? 其中
2

? (4 ? x
D

2

? y )dxdy
2

D:x ? y ? 4
2

? f=@(x,y)(4-x.^2-y^2).*(x.^2+y^2<=4) ? I=dblquad(f,-2,2,-2,2)

三重积分举例
I ? ??? ( x ? y ? z ) dxdydz
2 ?

?: z ? x ? y
2

2

x2 ? y 2 ? z 2 ? 2

? f=@(x,y,z)(x+y+z).^2.*(z>=x.^2+y .^2& x.^2+y.^2+z.^2<=2); ? I=triplequad(f,-sqrt(2),sqrt(2),sqrt(2),sqrt(2),0, sqrt(2))

MATLAB的应用---线性方程组求解
? 直接解法
? (1)利用左除运算符的直接解法 ? 对于线性方程组Ax=b,可以利用左除运算符“\” 求解: ? x=A\b ? (2)利用逆矩阵求解 ? x=inv(A)*b

例 用直接解法求解下列线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; x=A\b x1=inv(A)*b

? 利用矩阵的分解求解线性方程组 ? 矩阵分解是指根据一定的原理用某种算法将 一个矩阵分解成若干个矩阵的乘积。
? 常见的矩阵分解有
? ? ? ? ? ? LU分解 QR分解 Cholesky分解 Schur分解 Hessenberg分解 奇异分解

(1)LU分解 矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵 和一个上三角矩阵的乘积形式。线性代数中已经证明,只 要方阵A是非奇异的,LU分解总是可以进行的。 MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式 为: [L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角 阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须 是方阵。 [L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一 个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是 方阵。 实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或 x=U\(L\Pb),这样可以大大提高运算速度。

例 用LU分解求解例7-1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [L,U]=lu(A); x=U\(L\b) 或采用LU分解的第2种格式,命令如下: [L,U ,P]=lu(A); x=U\(L\P*b)

(2)QR分解 对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q 和一个上三角矩阵R的乘积形式。QR分解只能对方 阵进行。MATLAB的函数qr可用于对矩阵进行QR 分解,其调用格式为: [Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩 阵R,使之满足X=QR。 [Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角 矩阵R以及一个置换矩阵E,使之满足XE=QR。 实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或 x=E(R\(Q\b))。

例 用QR分解求解例7-1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [Q,R]=qr(A); x=R\(Q\b) 或采用QR分解的第2种格式,命令如下: [Q,R,E]=qr(A); x=E*(R\(Q\b))

(3)Cholesky分解 如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角 矩阵和上三角矩阵的乘积。设上三角矩阵为R,则下三角矩阵为其转 置,即X=R'R。MATLAB函数chol(X)用于对矩阵X进行Cholesky分解, 其调用格式为: R=chol(X):产生一个上三角阵R,使R'R=X。若X为非对称正定,则输出 一个出错信息。 [R,p]=chol(X):这个命令格式将不输出出错信息。当X为对称正定的,则 p=0,R与上述格式得到的结果相同;否则p为一个正整数。如果X为 满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足 R'R=X(1:q,1:q)。 实现Cholesky分解后,线性方程组Ax=b变成R’Rx=b,所以x=R\(R’\b)。

例 用Cholesky分解求解例7-1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; R=chol(A) ??? Error using ==> chol Matrix must be positive definite 命令执行时,出现错误信息,说明A为非正定矩阵。

? 迭代解法 ? 迭代解法非常适合求解大型系数矩阵的 方程组。在数值分析中,迭代解法主要 包括 Jacobi迭代法、Gauss-Serdel迭代 法、超松弛迭代法和两步迭代法。
(1)Jacobi迭代法 对于线性方程组Ax=b,如果A为非奇异方阵,即aii≠0(i=1,2,…,n), 则可将A分解为A=D-L-U,其中D为对角阵,其元素为A的对 角元素,L与U为A的下三角阵和上三角阵,于是Ax=b化为: x=D-1(L+U)x+D-1b 与之对应的迭代公式为: x(k+1)=D-1(L+U)x(k)+D-1b 这就是Jacobi迭代公式。如果序列{x(k+1)}收敛于x,则x必是方 程Ax=b的解。

Jacobi迭代法的MATLAB函数文件Jacobi.m如下: function [y,n]=jacobi(A,b,x0,eps) if nargin==3 eps=1.0e-6; elseif nargin<3 error return end D=diag(diag(A)); %求A的对角矩阵 L=-tril(A,-1); %求A的下三角阵 U=-triu(A,1); %求A的上三角阵 B=D\(L+U); f=D\b; y=B*x0+f; n=1; %迭代次数 while norm(y-x0)>=eps x0=y; y=B*x0+f; n=n+1; end

例 用Jacobi迭代法求解下列线性方程组。设迭代初值为0,迭代 精度为10-6。 在命令中调用函数文件Jacobi.m,命令如下: A=[10,-1,0;-1,10,-2;0,-2,10]; b=[9,7,6]'; [x,n]=jacobi(A,b,[0,0,0]',1.0e-6)

(2)Gauss-Serdel迭代法 在Jacobi迭代过程中,计算时,已经得到,不必再用,即原来的迭代公 式Dx(k+1)=(L+U)x(k)+b可以改进为Dx(k+1)=Lx(k+1)+Ux(k)+b,于是得到: x(k+1)=(D-L)-1Ux(k)+(D-L)-1b 该式即为Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭 代用新分量代替旧分量,精度会高些。

Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m如下: function [y,n]=gauseidel(A,b,x0,eps) if nargin==3 eps=1.0e-6; elseif nargin<3 error return end D=diag(diag(A)); %求A的对角矩阵 L=-tril(A,-1); %求A的下三角阵 U=-triu(A,1); %求A的上三角阵 G=(D-L)\U; f=(D-L)\b; y=G*x0+f; n=1; %迭代次数 while norm(y-x0)>=eps x0=y; y=G*x0+f; n=n+1; end

例 用Gauss-Serdel迭代法求解下列线性方程组。设迭代初值为0,迭代 精度为10-6。 在命令中调用函数文件gauseidel.m,命令如下: A=[10,-1,0;-1,10,-2;0,-2,10]; b=[9,7,6]'; [x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)

例 分别用Jacobi迭代和Gauss-Serdel迭代法求解下列线性方程组,看是 否收敛。 命令如下: a=[1,2,-2;1,1,1;2,2,1]; b=[9;7;6]; [x,n]=jacobi(a,b,[0;0;0]) [x,n]=gauseidel(a,b,[0;0;0])

函数极值(局域极值)
? MATLAB提供了求解函数极值的函数fminbnd、 fminsearch和fminnunc,? 们分别用于单变 它 量函数和多变量函数的最小值,其调用格式为: ? x=fminbnd(fun,x1,x2) ? x=fminsearch(fun,x0) ? x=fminunc(fun,x0) ? 函数的调用格式相似。其中fminbnd函数用于 求单变量函数的最小值点。fun是函数名,可 以是用字符串表示的函数表达式;x1和x2限定 自变量的取值范围。fminsearch和fminunc 函数用于求多变量函数的最小值点,x0是求解 的初始值向量。函数返回取最小值时的x解

? MATLAB没有专门提供求函数最大值的函 数,但只要注意到-f(x)在区间(a,b)上的最小 值就是f(x)在(a,b)的最大值,所以 fminbnd(f,x1,x2)返回函数f(x)在区间(x1,x2) 上的最大值时的x值。

? 例 求f(x)=x3-2x-5在[0,5]内的最小值点。
? fun='x.^3-2*x-5'; ? x=fminbnd(fun,0,5)
? ? ? ? ? ? ? %结果是 x= 0.8165 %函数最小值 fmin=eval(fun) fmin = -6.0887


推荐相关:

2013 Matlab考试题及答案

( A 3, 4 B.3, 5 C.4,4 班级: 6. str1=’matlab’, str2=’...function y=MyCurve(x,CurId) %函数功能:求曲线 1,2 的函数值 ; % 计算...


2013 Matlab考试卷A

( A 3, 4 B.3, 5 C.4,4 班级: 6. str1=’matlab’, str2=’...function y=MyCurve(x,CurId) %函数功能:求曲线 1,2 的函数值 ; % 计算...


matlab实验指导答案详解(非常详细正确)

[b;c'] >>r5=t * d 2、用 MATLAB 求下面的...function 例如:>>v=myvander([2 得 v= 1 ? ?...文档贡献者 十二分超神 贡献于2013-11-07 ...


《 Matlab及其应用》答题纸2013-12

15 . ; X<=80&x>60 Polyint(P,K) hold on save my_data v1 v2 v3...(-1/4)*x) 的从 a—b 的精度为 1/10 的积分 六、使用 MATLAB 编写 m...


2013第一章matlab攻略

理由是: (A ) 为使本书简洁; (B) 本书用 MATLAB 的 M-book 写成,而在...如变量名 my_var_201 是合法的, 且读起来更方便。 而 my,var201 由于逗号...


MATLAB2010b安装详细过程(大全)

MATLAB2010b安装详细过程(大全)_计算机软件及应用_IT/计算机_专业资料。matlab...“I have the File Installation Key for my license: ”,在编辑框中输入文件...


Matlab2012教程

Matlab2012教程_电脑基础知识_IT/计算机_专业资料。MATLAB2012最新教程第1章 1.1 基础准备及入门 最 简单的计算器使用法 为易于学习,本节以算例方式叙述,并通过...


2013-第三章matlab

3 (4) 以后只要在 MATLAB 指令窗中,运行 MyMatrix.m 文件 ,数组 AM 就会...-5] A = 1 3 5 -1 4 -3 B=A([1,2,2,2],[1,3,5] ) B = ...


matlab 选修课考试复习

[1,3]) ans = 13 46 79 4)MATLAB 中允许对...A+B---矩阵的加运算, ? A-B---矩阵的减运算...+100 的值。程序为: mysum=0; for i=1:100 ...


Matlab编程与应用习题和一些参考答案

(j+1,1);a(j+1,1)=b; end end end disp('排列后:') a Matlab ...function f=myzy31(n) k=sqrt(n); flag=1; for i=2:k; if mod(n,...

网站首页 | 网站地图
All rights reserved Powered by 简单学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com