电子书_MATLAB程序设计与应用(第二版)

更新时间:2024-05-16 23:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

阅阅读读时时::请请选选择择““视视图图 || 文文档档结结构构图图””,,弹弹出出文文档档中中的的标标题题链链接接。。

数学软件

MATLAB 程序设计与应用

第1章 MATLAB系统环境

1.1 MATLAB概貌 1.2 MATLAB环境的准备 1.3 MATLAB操作界面 1.4 MATLAB帮助系统

自上世纪80年代以来,出现了科学计算语言,亦称数学软件。 MATLAB

Mathematica Mathcad Maple LINDO LINGO

1.1 MATLAB概貌 p3

MATLAB 是 MATrix LABoratory(矩阵实验室) 的缩写。

1984年由 Math Works 公司推出,现已成为国际公认的优秀的工程应用开发环境,是影响最大,流行最广的科学计算语言。

1.1.1 MATLAB的发展

版本编号 MATLAB 1.0 MATALB 2 MATLAB 3 MATLAB 3.5 MATLAB 4 MATLAB 4.2c MATLAB 5.0 MATLAB 5.1 MATLAB 5.1.1 MATLAB 5.2 MATLAB 5.2.1 MATLAB 5.3 MATLAB 5.3.1 MATLAB 6.0 MATLAB 6.1 MATLAB 6.5 R7 R8 R9 R9.1 R10 R10.1 R11 R11.1 R12 R12.1 R13 建造编号 发布时间 1984 1986 1987 1990 1992 1994 1996 1997 1997 1998 1998 1999 1999 2000 2001 2002 版本编号 MATLAB 6.5.1 MATLAB 6.5.2 MATLAB 7.0 MATLAB 7.0.1 MATLAB 7.0.4 MATLAB 7.1 MATLAB 7.2 MATLAB 7.3 MATLAB 7.4 MATLAB 7.5 MATLAB 7.6 MATLAB 7.7 MATLAB 7.8 MATLAB 7.9 MATLAB 7.10 MATLAB 7.11 建造编号 R13SP1 R13SP2 R14 R14SP1 R14SP2 R14SP3 R2006a R2006b R2007a R2007b R2008a R2008b R2009a R2009b R2010a R2010b 发布时间 2003 2003 2004 2004 2005 2005 2006 2006 2007 2007.10 2008.3 2008.10 2009.3 2009.10 2010.3 2010.10 1. 从MATLAB 4.2c开始,每个版本增加了一个建造编号; 2. 例如MATLAB7.6的建造编号是R2008a。说明MATLAB7.6与MATLAB2008a是等同的;

1

3. 对于建造编号,正规化以后,每年出两个版本。一般来说。a是测试版,b是正式版。a是前半年出,b是后半年出。

教材采用MATLAB7.0(R14,2004)

实验室采用MATLAB 7.8(R2009a,2009.3,汉化)

1.1.2 MATLAB的主要功能 p4

? 数值计算和符号计算功能 ? 绘图功能 ? 语言体系

? MATLAB工具箱

(1) 数值计算和符号计算功能

MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。

MATLAB先后和著名的符号计算语言Maple与MuPAD(从MATLAB 2008b开始使用MuPAD)相结合,使得MATLAB具有符号计算功能。

(2) 绘图功能

可以绘制二维和三维图形。

MATLAB提供了两个层次的绘图操作: ? 对图形句柄进行的低层绘图操作;

? 建立在低层绘图操作之上的高层绘图操作。 (3) 语言体系

MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。

MATLAB是解释性语言,不能脱离MATLAB环境而独立运行。 (4) MATLAB工具箱

MATLAB包含两部分内容:基本部分和各种可选的工具箱。 MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。 基本部分

构成MATLAB的核心内容,也是使用和构造工具箱的基础。 功能性工具箱

主要用来扩充其符号计算功能、可视建模仿真功能及文字处理功能等。 学科性工具箱

Control System Toolbox 控制系统工具箱 Signal Processing Toolbox 信号处理工具箱 Neural Network Toolbox 神经网络工具箱 Optimization Toolbox 最优化工具箱 Financial Toolbox 金融工具箱 Statistics Toolbox 统计学工具箱

开始→工具箱

MATLAB具备很强的开放性

除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。

2

1.1.3 MATLAB功能演示 p5

例1.1 绘曲线图

绘制函数y=2-|x|和y=sin x的曲线。 在命令窗口逐条输入以下命令: x=-2*pi:pi/180:2*pi; plot(x,2.^(-abs(x)),':',x,sin(x)); 例1.2 求方程的根

求方程2x5-3x3+71x2-9x+13=0的全部根。 p=[2,0,-3,71,-9,13]; x=roots(p) 例1.3 解线性方程组

?2x?3y?z?2??8x?2y?3z?4?45x?3y?9z?23?

法1:调用求逆矩阵函数inv a=[2,3,-1;8,2,3;45,3,9]; %系数矩阵 b=[2;4;23]; %常数项列向量 x=inv(a)*b 法2:左除运算

a=[2,3,-1;8,2,3;45,3,9]; %系数矩阵 b=[2;4;23]; %常数项列向量 x=a\\b 法3:符号计算

syms x y z [x,y,z]=solve(2*x+3*y-z-2,8*x+2*y+3*z-4,45*x+3*y+9*z-23) 例1.4 求积分

?10xln(1?x)dx

法1:调用quad quad('x.*log(1+x)',0,1) 法2:符号计算 syms x int(x*log(1+x),0,1) 3

1.2 MATLAB环境的准备 p7

1.2.1 MATLAB的安装

安装MATLAB系统,需运行系统自带的安装程序setup.exe,可以按照安装提示依次操作。

1.2.2 MATLAB的启动与退出 p8

启动有3种常见方法:

(1) 使用Windows“开始”菜单。

(2) 运行MATLAB(文件夹)系统启动程序matlab.exe。 (3) 利用(桌面)快捷方式。

退出也有3种常见方法:

(1) 在主窗口File菜单中选择Exit MATLAB。 (2) 在命令窗口中键入Exit或Quit命令。 (3) 单击主窗口右上角的关闭按钮。

1.3 MATLAB操作界面 p9

1.3.1 主窗口

MATLAB主窗口是MATLAB的主要工作界面。主窗口除了嵌入一些子窗口外,还主要包括菜单栏和工具栏。

? MATLAB的菜单栏 包括6个菜单项: File 实现有关文件的操作 Edit 用于命令窗口的编辑操作 Debug 用于程序调试 Desktop 用于设置MATLAB集成环境的显示方式(桌面) Window 用于关闭所有打开的编辑器窗口或选择活动窗口 Help 用于提供帮助信息。 ? MATLAB的工具栏

提供了一些命令按钮和一个当前路径列表框。这些命令按钮有对应的菜单命令,但比菜单命令使用起来更快捷、方便。

1.3.2 命令窗口(Command Window)

命令窗口是MATLAB的主要交互窗口,用于输入命令并显示除图形以外的所有执行结果。 >> 为命令提示符

表示MATLAB正在处于准备状态。

在命令提示符后键入命令并回车后,MATLAB就会解释执行所输入的命令,并在命令后面给出计

4

利用MAT文件可以把当前工作空间中的一些有用变量长久地保留下来,扩展名是.mat。 MAT文件的生成和装入由save和load命令来完成。 常用格式为:

save 文件名[变量名表] [-append][-ascii] load 文件名[变量名表] [-ascii]

? 文件名可以带路径,但不需带扩展名.mat,命令默认对.mat文件进行操作。

? 变量名表中的变量个数不限,只要内存或文件中存在即可,变量名之间以空格分隔。当变量名表省略时,保存或装入全部变量。

? -ascii选项使文件以ASCII格式处理,省略该选项时文件将以二进制格式处理。 ? -append选项控制将变量追加到MAT文件中。

2.2.3 数据的输出格式 p20

用十进制数表示一个常数,具体可采用日常记数法和科学记数法两种表示方法。 在一般情况下,内部每一个数据元素都是用双精度数来表示和存储的。 数据输出时可用format命令设置或改变数据输出格式。 format命令的格式为:

format 格式符

其中格式符决定数据的输出格式

表2.2 控制数据输出格式格式符及其含义

格式符 short(默认) long short e long e short g long g rat hex + bank compact loose 含义 小数点后4位,不超过7位有效数字。 大于1000的实数用5位有效数字的科学记数法 15位有效数字 5位有效数字科学记数法 15位有效数字科学记数法 从short和short e选择最佳方式 从long和long e选择最佳方式 近似有理数表示 十六进制表示 正数、负数、零分别用+、-、空格表示 银行格式,元、角、分表示 输出变量之间无空行 输出变量之间有空行 例

4/3 format long 4/3 format rat 4/3 format compact %当前输出格式 位有效数字形式输出 %近似有理数表示 %输出变量之间没有空行 10

4/3 format loose 4/3 format short %输出变量之间有空行 %short为默认输出格式 2.3 矩阵的表示 p21

表 矩阵操作函数及其含义

函数名 eye ones linspace sub2ind ind2sub size length reshape end [ ] 单位矩阵 全1矩阵 生成行向量 下标转换成序号 序号转换成下标 给出矩阵的行数和列数 给出矩阵行数和列数中较大者 矩阵重排 预定义变量,某一维末尾下标 空矩阵 含义 2.3.1 矩阵的建立

1. 直接输入法

最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:

将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。(可用回车代替分号)

A=[1,2,3;4 5 6;7,8 9] 2. 利用M文件建立矩阵 对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。

例2.2 利用M文件建立矩阵

(1) 启动MATLAB文本编辑器,输入: MYMAT=[101,102,103,104,105; 201,202,203,204,205; 301,302,303,304,305] (2) 存盘(文件名为mymatrix.m)。

(3) 在命令窗口中输入mymatrix,即运行该M文件,就建立一个名为MYMAT的矩阵。 3. 建立大矩阵(矩阵拼接)

大矩阵可由方括号中的小矩阵或向量建立。 A=[1,2,3;4,5,6;7,8,9]; 11

C=[A,eye(3),ones(3),A] eye(3) ones(3)

为3阶单位矩阵 为3阶全1矩阵

2.3.2 冒号表达式

用冒号表达式产生行向量,一般格式:

e1:e2:e3

其中e1为初始值,e2为步长,e3为终止值。 用linspace函数产生行向量。调用格式:

linspace(a,b,n)

其中a和b是生成向量的第一个和最后一个元素,n是元素总数。

2.3.3 矩阵的拆分

1.矩阵元素

通过下标引用矩阵的元素,例如 A=[1,2,3;4,5,6] A(2,3) A(2,2)=22; A A(4,5)=10; A 采用矩阵元素的序号来引用矩阵元素。

矩阵元素的序号是相应元素在内存中的排列顺序。在MATLAB中,矩阵元素按列存储,先第一列,再第二列,依次类推。 A=[1,2,3;4,5,6]; A(3) 序号(Index)与下标(Subscript )是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。其相互转换关系也可利用sub2ind和ind2sub函数求得 clc A=ones(3,4) size(A) sub2ind(size(A),1,2) [i,j]=ind2sub(size(A),3) length(A) %给出矩阵的行数和列数 %给出矩阵行数和列数中较大者 reshape(A,m,n) 在矩阵总元素保持不变的前提下,将矩阵重新排成m×n矩阵。 x=[1,2,3,4,5,6,7,8,9,10,11,12] y=reshape(x,3,4) z=reshape(y,2,7) %出错 2. 矩阵拆分 (1) 利用冒号表达式获得子矩阵

A(:,j)表示取A矩阵的第j列全部元素; A(i,:)表示A矩阵第i行的全部元素;

A(i,j)表示取A矩阵第i行、第j列的元素;

12

A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素; A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素;

A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素; A(:)将矩阵A每一列元素堆叠起来,成为一个列向量。 end表示某一维的末尾元素下标。 A(end,:) A(:,end)

(2) 利用空矩阵删除矩阵的元素 给变量X赋空矩阵的语句: X=[ ]

注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。

2.4 MATLAB数据的运算 p26

2.4.1 算术运算

1.基本算术运算

MATLAB的基本算术运算有: + 加 - 减 * 乘 / 右除 \\ 左除 ^ 乘方

注意,运算是在矩阵意义下进行的。 (1) 矩阵加减运算

假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。 运算规则是:

? 若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。 ? 若A与B的维数不相同,将给出错误信息,提示用户两个矩阵的维数不匹配。 (2) 矩阵乘法

若A为m×n矩阵,B为n×p矩阵,则 C=A*B

为m×p矩阵。 (3) 矩阵除法

有两种矩阵除法运算: \\ 左除 / 右除

如果A矩阵是非奇异方阵,则A\\B和B/A运算可以实现。 A\\B等效于inv(A)*B B/A等效于B*inv(A)

对于含有标量的运算,两种除法运算的结果相同。 如 3/4和4\\3有相同的值,都等于0.75。

又如 设a=[10.5,25],则a/5=5\\a=[2.1000 5.0000]。

13

对于矩阵运算,一般A\\B≠B/A。 (4) 矩阵的乘方

一个矩阵的乘方运算可以表示成 A^x

要求A为方阵,x为标量。 2.点运算

有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。 点运算符有 .* 点乘 ./ 点右除 .\\ 点左除 .^ 点乘方

两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维数相同。 3. MATLAB常用数学函数 p29 ? 函数的自变量规定为矩阵变量。

? 运算法则是将函数逐项作用于矩阵的元素上。 ? 结果是一个与自变量同维数的矩阵。

表2.3 常用数学函数及其含义 p29

函数名 三角函数 sqrt log log10 log2 exp pow2 abs angle real imag conj rem mod fix floor ceil round sign gcd lcm 略 平方根函数 自然对数函数 常用对数函数 以2为底的对数函数 自然指数函数 2的幂 绝对值函数 复数的幅角 复数的实部 复数的虚部 复数共轭运算 求余数或模运算 模运算 向零方向取整 不大于自变量的最大整数 不小于自变量的最小整数 四舍五入到最邻近的整数 符号函数 最大公因子 最小公倍数 含义 函数使用说明:

(1) 三角函数以弧度为单位计算。

(2) abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。 abs(-10) 14

abs(2+3i) abs('abc') (3) 用于取整的函数有

fix 向0方向取整 floor 向-∞方向取整 ceil 向+∞方向取整 round 四舍五入到最邻近的整数

(4) rem(x,y)和mod(x,y)要求x,y必须为相同大小的实矩阵或为标量。

rem 求余数或模运算 mod 模运算 ? 当y≠0时

rem(x,y)=x-y.*fix(x./y) mod(x,y)=x-y.*floor(x./y) ? 当y=0时

rem(x,0)=NaN(非数) mod(x,0)=x

2.4.2 关系运算 p30

6种关系运算符:

< 小于 <= 小于或等于 > 大于 >= 大于或等于 == 等于 ~= 不等于 运算法则:

(1) 两个标量的比较

若关系成立,结果为1,否则为0。 (2) 两个同维数矩阵的比较 对相同位置的元素比较。 (3) 标量与矩阵的比较

标量与矩阵的每一个元素比较。

例2.3 建立5阶方阵,判断A的元素是否能被3整除。

A=[24,35,13,22,63;23,39,47,80,80;... 90,41,80,29,10;45,57,85,62,21;... 37,19,31,88,76] P=rem(A,3)==0 %判断元素是否被3整除 2.4.3 逻辑运算 p31

逻辑运算符: & 与

15

| 或 ~ 非 运算法则:

(1) 在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。 (2) a和b是两个标量

? a&b a,b全为非零时,结果为1,否则为0。

? a|b a,b中只要有一个非零,结果为1,否则为0。 ? ~a 当a是零时,结果为1;当a非零时,结果为0。 (3) 两个运算量是同维矩阵

相同位置上的元素按标量规则逐个进行。 (4) 一个是标量,另一个是矩阵

标量与矩阵中的每个元素之间按标量规则逐个进行。 (5) 逻辑非是单目运算符,也服从矩阵运算规则。

(6) 在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。

例2.4 在[0, 3π]区间,求y=sinx的值。

要求:

① 消去负半波,即(π, 2π)内的函数值置0。 ② ???2?,?33???7?8??sin和内取均值为。 ,???3??33?%方法1 x=0:pi/100:3*pi; y=sin(x); y1=(x2*pi).*y; %①消去负半波 q= (x>pi/3 & x<2*pi/3) | ... (x>7*pi/3 & x<8*pi/3); qn=~q; y2=q*sin(pi/3)+qn.*y1; %处理② plot(x,[y;y1;y2]); %方法2 x=0:pi/100:3*pi; y=sin(x); y1=(y>=0).*y; p=sin(pi/3); y2=(y>=p)*p+(y

函数名 all any exist 向量的所有元素非0,结果为1 向量中任何一个非0,结果为1 变量在工作空间,结果为1 含义 16

find isempty isglobal isinf isnan isfinite issparse isstr xor 找出矩阵中非0元素的位置 变量是空矩阵,结果为1 变量是全局变量,结果为1 元素是±∞,对应位置取1 元素不是一个数,对应位置取1 元素值有限,对应位置取1 变量是稀疏矩阵,结果为1 变量是字符串,结果为1 两矩阵对应元素同为0或非0,对应位置取0 例2.5 建立矩阵A,然后找出在[10,20]区间的元素的位置。

A=[4,15,-45,10,6;56,0,17,-45,0] find(A>=10 & A<=20) 2.5 字符串 p33

字符串是用单撇号括起来的字符序列。

将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。 可以建立多行字符串矩阵。

字符串是以ASCII码形式存储的。

abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。 相反,char函数可以把ASCII码矩阵转换为字符串矩阵。

例2.6 建立一个字符串向量,然后对该向量做如下处理:

(1) 取第1~5个字符组成的子字符串。 (2) 将字符串倒过来重新排列。

(3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。 (4) 统计字符串中小写字母的个数。 clc; ch='ABc123d4e56Fg9' ; subch=ch(1:5) %取子字符串 revch=ch(end:-1:1) %将字符串倒排 k=find(ch>='a' & ch<='z') %找小写字母的位置 ch(k)= 'A'+(ch(k)-'a') %小写字母变成大写 ch char(ch) %ASCII码矩阵转换为字符矩阵 length(k) %统计小写字母的个数 char([0:29;30:59;60:89;90:119;120:149]) 函数eval,其调用格式为: eval(t)

其中t为字符串。

作用:把字符串的内容作为对应的MATLAB语句来执行。

17

表2.5 字符串处理函数及其含义

函数名 setstr char mat2str num2str int2str str2num strcat strcmp abs 将ASCII码值转换成字符 同上,将代替setstr 将矩阵转换成字符串 将数值转换成字符串 将整数转换成字符串 将字符串转换成数值 用于字符串的连接 用于字符串的比较 将字符转换成ASCII码 含义 (1) 若字符串中含有单撇号,则该撇号用两个单撇号表示。 (2) 某些情况下用字符串向量表示,即用[ ]括起来。 disp('I''m a teacher.') f=70; c=(f-32)/1.8; disp(['Room temperature is ',... num2str(c),'degrees C.']) 2.6 结构数据和单元数据 p34

2.6.1 结构数据

1.结构矩阵的建立与引用

结构矩阵的元素可以是不同的数据类型,它能将一组具有不同属性的数据纳入到一个统一的变量名下进行管理。

建立一个结构矩阵可采用给结构成员赋值的办法。 格式为:

结构矩阵名.成员名=表达式

其中表达式应理解为矩阵表达式。

例 建立含有3个元素的结构矩阵

a(1).x1=10; a(1).x2='liu'; a(1).x3=[11,21;34,78]; a(2).x1=12; a(2).x2='wang'; a(2).x3=[34,191;27,578]; a(3).x1=14; a(3).x2='cai'; a(3).x3=[13,890;67,231]; a(2).x3 %引用矩阵元素a(2)的成员x3 a(2) %引用矩阵元素a(2) a %引用结构矩阵a 2.结构成员的修改 p35

可以根据需要增加或删除结构的成员。 给a中任意一个元素增加成员x4: a(1).x4='410075';

18

但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。 用rmfield函数删除结构的成员。 a=rmfield(a,'x4'); 3.关于结构的函数

表2.6 结构的函数及其含义 p36

函数名 struct getfield rmfield isstruct fieldnames setfield isfield 建立或转换为结构矩阵 获取结构成员的内容 删除结构成员 是结构时,值为真 获取结构成员名 设定结构成员的内容 成员在结构中时,值为真 含义 2.6.2 单元数据 p36

单元矩阵的各个元素是不同类型的数据,用带有大括号下标的形式引用单元矩阵元素。 1.单元矩阵的建立与引用

建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来。

例 建立单元矩阵。

b={10,'liu', [11,21;34,78];... 12,'wang',[34,191;27,578];... 14,'cai',[13,890;67,231]}; b b{3,3} b{3,3}=10; b{3,3} b b(4) %第4个元素 b{4} 2.关于单元的函数

表2.7 单元的函数及其含义 p37

函数名 celldisp num2cell cell2struct iscell cellplot 显示单元矩阵内容 把数字矩阵转换为单元矩阵 把单元矩阵转换为结构矩阵 是单元矩阵时,值为真 显示单元矩阵的图形描述 含义 19

? diag(A) ? diag(A,k) clc; A=[0,1,2; diag(A,0) diag(A,1) diag(A,2) diag(A,-1) diag(A,-2) 提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。 提取第k条对角线的元素。 -1,0,1; -2,-1,0] (2) 构造对角矩阵

设V为具有m个元素的向量。 ? diag(V) 产生一个m×m对角矩阵,其主对角线元素即为向量V的元素。 ? diag(V,k) 产生一个n×n(n=m+|k|)对角阵,其第k条对角线的元素即为向量V的元素。

例3.6 先建立5×5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,?,第五行乘以5。

clc; A=[17,0,1,0,15; 23,5,7,14,16;... 4,0,13,0,22; 10,12,19,21,3;... 11,18,25,2,19]; D=diag(1:5); D*A 2.三角阵 p44

三角阵分为上三角阵和下三角阵。

? 上三角阵 矩阵的对角线以下的元素全为0的一种矩阵。 ? 下三角阵 对角线以上的元素全为0的一种矩阵。 (1) 上三角矩阵

? triu(A) 求矩阵A的上三角阵。

? triu(A,k) 求矩阵A的第k条对角线以上的元素。 triu(A,0)功能同triu(A)。 clc; A=[7,13,-28;2,-9,8;0,34,5] B=triu(A) C=[1,32,1,0,5; 3,5,17,4,16;... 4,0,-13,0,42; 70,11,9,21,3;... 11,63,5,2,99] D=triu(C,2) (2) 下三角矩阵

? tril(A) 求矩阵A的下三角阵。

? tril(A,k) 求矩阵A的第k条对角线以下的元素。 tril(A,0)功能同tril(A)。 clc; A=[7,13,-28;2,-9,8;0,34,5] B=tril(A) 25

C=[1,32,1,0,5; 3,5,17,4,16;... 4,0,-13,0,42; 70,11,9,21,3;... 11,63,5,2,99] D=tril(C,-2) 3.2.2 矩阵的转置与旋转

1.矩阵的转置

转置运算符是单撇号: '。 clc; A=[71,3,-8;2,-9,8;0,4,5] B= A? 2.矩阵的旋转

rot90(A,k) 将矩阵A旋转90o的k倍,按逆时针方向。 当k为1时可省略。 clc; A=[57,19,38;-2,31,8;0,84,5] B=rot90(A) B1=rot90(A,1) B2=rot90(A,2) B0=rot90(A,0) B_1=rot90(A,-1) 3.矩阵的左右翻转

对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依次类推。

fliplr(A) 对矩阵A实施左右翻转。 clc; A=[57,19,38;-2,31,8;0,84,5] B=fliplr(A) C=1:5 fliplr(C) %逆序 4.矩阵的上下翻转 flipud(A) 对矩阵A实施上下翻转。 clc; A=[57,19,38;-2,31,8;0,84,5] B=flipud(A) C=(1:5)' flipud(C) %逆序 26

3.3 矩阵求逆与线性方程组求解p46

3.3.1 矩阵的逆与伪逆

表 求矩阵的逆与伪逆函数及其含义

函数名 inv(A) pinv(A) 求方阵A的逆矩阵 求A的伪逆矩阵 含义 1.矩阵的逆 对于一个方阵A,如果存在一个与其同阶的方阵B,使得: A·B=B·A=I (I为单位矩阵)

则称B为A的逆矩阵,A也是B的逆矩阵。 inv(A) 求方阵A的逆矩阵。

例3.7 求方阵A的逆矩阵

clc; A=[1,-1,1; 5,-4,3; 2,1,1] B=inv(A) B*A 矩阵的伪逆

若A不是一个方阵,或A是一个非满秩的方阵时,A没有逆矩阵。 但可找到一个与A的转置矩阵A'同型的矩阵B,使得: A·B·A=A B·A·B=B

称B为矩阵A的伪逆,也称为广义逆矩阵。 pinv(A):求A的伪逆矩阵。 clc A=[3,1,1,1;1,3,1,1;1,1,3,1] B=pinv(A) A*B*A B*A*B C=[0,0,0;0,1,0;0,0,1] %奇异矩阵 pinv(C) 3.3.2 用矩阵求逆方法求解线性方程组

Ax=b

-1

其解为:x=Ab

27

例3.8 解线性方程组

?x?2y?3z?5??x?4y?9z??2 ?x?8y?27z?6?clc; A=[1,2,3;1,4,9;1,8,27] b=[5,-2,6] ' x=inv(A)*b x=A\\b %左除 3.4 矩阵求值 p48

表 矩阵求值函数及其含义

函数名 det(A) rank(A) trace(A) norm(A)或norm(A,2) norm(A,1) norm(A,inf) cond(A,1) cond(A)或cond(A,2) cond(A,inf) 求方阵A的行列式的值 求矩阵秩 求矩阵的迹 计算2—范数 计算1—范数 计算∞—范数 计算1—范数下的条件数 计算2—范数下的条件数 计算∞—范数下的条件数 含义 3.4.1 方阵的行列式值

把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。 det(A) 求方阵A所对应的行列式的值。 clc; A=rand(5) B=det(A) 3.4.2 矩阵的秩与迹

1.矩阵的秩

矩阵线性无关的行数与列数称为矩阵的秩。rank(A) clc; A=[2,2,-1,1;4,3,-1,2;8,5,-3,4;3,3,-2,2] r=rank(A) 2.矩阵的迹

求矩阵秩。

28

矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。 trace(A) 求矩阵的迹。 clc; A=[2,2,3;4,5,-6;7,8,9] trace(A) 3.4.3 向量和矩阵的范数

矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。 范数有多种方法定义,其定义不同,范数值也就不同。 1.向量的3种常用范数及其计算函数 V为n维向量

(1) norm(V)或norm(V,2):计算2—范数。

V2??vi?1n2i (2) norm(V,1):计算1—范数。

V1??|vi|

i?1n(3) norm(V,inf):计算∞—范数。

V??max{|vi|}

1?i?nclc; V=[-1,1/2,1] v1=morm(V,1) v2=norm(V) vinf=norm(V,inf) 2.矩阵的范数及其计算函数 A为m×n矩阵,V为n维向量

(1) norm(A)或norm(A,2):计算2—范数。

A2?max{A?V2}??1V2?1 ?1为A'A最大特征值(2) norm(A,1):计算1—范数。

A1?max{A?V1}?max{?|aij|}

V1?11?j?ni?1m(3) norm(A,inf):计算∞—范数。

A??max{A?V?}?max{?|aij|}

V?n?11?i?mj?1clc; A=[17,0,1,0,15;23,5,7,14,16;... 4,0,13,0,22; 10,12,19,21,3;... 29

11,18,25,2,19] a1=morm(A,1) a2=norm(A) ainf=norm(A,inf) 3.4.4 矩阵A的条件数 p51

(1) cond(A,1):计算1—范数下的条件数。

cond(A,1)?A1?A?1

1(2) cond(A)或cond(A,2):计算2—范数下的条件数。

cond(A)?A2?A?1

2(3) cond(A,inf):计算∞—范数下的条件数。

cond(A,inf)?A??A?1clc; A=[2,2,3;4,5,-6;7,8,9] C1=cond(A,1) C2=cond(A) Cinf=cond(A,inf) B=[2,-5,4;1,5,-2;-1,2,4] C1=cond(B,1) C2=cond(B) Cinf=cond(B,inf) ?

3.5 矩阵的特征值与特征向量 p52

表 求特征值与特征向量函数及其含义

函数名 E=eig(A) [V,D]=eig(A) [V,D]=eig(A,?nobalance?) 求全部特征值,构成向量E 求全部特征值,构成对角阵D,并求特征向量构成V的列向量 与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量 含义 例3.9 用求特征值的方法解方程。

3x5-7x4+5x2+2x-18=0

30

clc; p=[3,-7,0,5,2,-18]; A=compan(p); %A的伴随矩阵 x1=eig(A) %求A的特征值 x2=roots(p) %直接求多项式p的零点 3.6 矩阵的超越函数 p53

直接作用于矩阵(方阵)的超越函数。

表 矩阵的超越函数及其含义

函数名 sqrtm(A) logm(A) expm(A) funm(A,'fun') clc; A=[4,2;3,6] B=sqrtm(A) B*B A=[4,9;1,5] L=logm(A) B=expm(L) 计算矩阵A的平方根 计算矩阵A的自然对数 求矩阵指数eA 计算直接作用于矩阵A的由'fun'指定的超越函数值 含义 31

第4章 MATLAB程序设计

4.1 M文件

4.2 程序控制结构 4.3 函数文件 4.4程序调试

32

4.1 M文件 p56

4.1.1 M文件的分类

用MATLAB语言编写的程序,称为M文件,文件的扩展名为m。 M文件可以根据调用方式的不同分为两类:命令文件(Script File) 函数文件(Function File)。 两种文件的主要区别:

(1) 命令文件没有输入参数,也不返回输出参数;而函数文件可以带输入参数,也可返回输出参数。 (2) 命令文件对工作空间中的变量进行操作;而函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除。

(3) 命令文件可以直接执行;而函数文件要以函数调用的方式来调用它。

例4.1 建立一个m文件将变量a,b的值互换。

%程序1:建立命令文件,文件名exch.m clc; clear; a=1:10; b=[11,12,13,14;15,16,17,18]; c=a; a=b; b=c; a b %程序2:建立函数文件,文件名fexch.m function [a,b]=fexch(a,b) c=a; a=b; b=c; %a,b,c为局部变量 %调用函数文件 clc; clear; x=1:10; y=[11,12,13,14;15,16,17,18]; [x,y]=fexch(x,y) 4.1.2 M文件的建立与打开 p57

1.建立新的M文件

为建立新的M文件,启动MATLAB文本编辑器有3种方法: (1) 菜单操作

从主窗口的File菜单中选择New菜单项,再选择M-file命令。 (2) 命令操作

在命令窗口输入命令edit。 (3) 命令按钮操作

单击主窗口工具栏上的New M-File命令按钮。

33

2.打开已有的M文件

打开已有的M文件,有4种方法: (1) 菜单操作

从File菜单中选择Open命令,则屏幕出现Open对话框,在Open对话框中选中所需打开的M文件。

(2) 命令操作

在命令窗口输入命令:edit 文件名,则打开指定的M文件。 (3) 命令按钮操作

单击工具栏上的Open File命令按钮,再从弹出的对话框中选择所需打开的M文件。 (4) 在当前目录窗口操作

在当前目录窗口双击要打开的文件名。

4.2 程序控制结构 p58

顺序结构 选择结构 循环结构

4.2.1 顺序结构

按照程序中语句的排列顺序依次执行,直到程序的最后一个语句。 1.数据的输入

从键盘输入数据,可用input函数,调用格式为: A=input(提示信息,选项);

若在input函数调用时采用's'选项,则允许用户输入一个字符串。 A=input('输入矩阵A:'); xm=input('What''s your name?','s'); A xm 2.数据的输出

命令窗口输出函数disp函数,其调用格式为 disp(输出项)

其中输出项既可以为字符串,也可以为矩阵。

例4.2 (顺序结构)求一元二次方程ax2+bx+c=0的根 p59

%p59 clc; a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[-b+sqrt(d),-b-sqrt(d)]/(2*a); disp(['x1=',num2str(x(1)),... 34

本文来源:https://www.bwwdw.com/article/2el7.html

Top