第一章第一章第一章第一章 MATLAB 概论概论概论概论
Matlab 俗称“矩阵实验室”,是 Matrix Laboratory 的缩写。1984 年由美国 MathWorks 公
司研制开发,以矩阵计算为基础的交互式的功能强大的科学及工程计算软件。首创者是在数
值线性代数领域颇有影响的 Cleve Moler 博士。他也是生产经营 Matlab 产品的 MathWorks
公司的创始人之一。 Matlab将高性能的数值计算和可视化集成在一块,并提供了大量的内
置函数,从而使其广泛应用于数学计算和分析、自动控制、系统仿真、数字信号处理、图形
图像分析、数理统计、人工智能、虚拟现实技术、通讯工程、金融系统等领域。
时至今日,经过 MathWorks 公司的不断完善,Matlab 已经发展成为适合多学科、多种
工作平台的功能强大的大型软件。在国外,Matlab 已经经受了多年考验。在欧美等高校,
Matlab 已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动
态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生,硕士生,博士生必须掌握
的基本技能。在设计研究单位和工业部门,Matlab 被广泛用于科学研究和解决各种具体问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
。在国内,特别是工程界,Matlab 一定会盛行起来。可以说,无论你从事工程方面的哪
个学科,都能在Matlab里找到合适的功能。因此,Matlab是面向 21世纪的计算机程序设计
及科学计算语言。
图 1 MATLAB6.5 的默认桌面
启动Matlab后,进入Matlab的默认桌面(如图 1)。第一行为菜单栏,第二行为工具栏,
下面是三个最常用的窗口。右边最大的是命令窗口(Command Window),左上方前台为工
作空间窗口(workspace),后台为当前目录窗口(Current Dircstory),左下方为命令历史窗口
(Command History)。左下角还有一个开始(Start)按钮,用于快速启动各类交互界面、桌面
工具和帮助等。
一、 命令窗口(Command Window)
是进行Matlab操作最主要的窗口,用于输入运算命令和数据、运行 Matlab函数和脚本
并显示结果。
调出命令窗口:view菜单->Command Window
“>>”为输入函数的提示符(Prompt) ,在提示符后面输入数据或运行函数;
类似的符号“%” ,其后面书写的是用于解释的文字,不参与运算。
在语句末尾添加分号“;”,可以防止输出结果显示到屏幕上,在创建大矩阵时非常有用。
ans是 answer的缩写,它是matlab默认的系统变量;
clear为清除工作空间中的变量命令;
clc为清屏命令;
命令行窗口中显示数值计算的结果有一定的格式,默认为短格式(format short),保留小
数点后 4位有效数字,对于大于 1000的数值,使用科学计数法表示。
例 1-1:输入 271.82显示为 271.8200,
而输入 2718.2则显示为 2.7182e+003(如图 2)
图 2 数据输入的显示差异
注注注注::::在命令在命令在命令在命令窗口中不执行命令地换行窗口中不执行命令地换行窗口中不执行命令地换行窗口中不执行命令地换行,,,,可同时按下可同时按下可同时按下可同时按下 Shift+Enter 键键键键。。。。
二、命令历史窗口(Command History),
用于显示记录 matlab启动时间和命令窗口中最近输入的所有 matlab指令,可再次执行。
调出命令历史窗口:view菜单-> Command History 或命令窗口中输入 CommandHistory
命令。
三、工作空间窗口(workspace)
由一系列变量组成,可通过使用函数、运行 m 文件或载入已存在的工作空间来添加变
量。用工作空间窗口可以显示每个变量的名称(name)、值(value)、数组大小(size)、字节大小
(bytes)和类型(class)。
调出工作空间窗口:view菜单->Workspace
Who 列出当前工作空间中的所有变量;
Whos 列出变量和它们的大小、类型;
可以将工作空间中的部分或全部变量保存到一个二进制文件(.mat)。
四、当前目录浏览器(Current Dircstory),
用于搜索、查看、打开、查找和改变 MATLAB路径和文件。
调出当前目录浏览器窗口:view菜单->CurrentDirectory或 filebrower命令。
五、菜单和工具栏
菜单和工具栏类似于 Word 等其他常用软件,表 1列出部分常用菜单和工具栏
菜单\工具栏 使用说明
File:New:Mfile 用于新建 M文件等
File:Import Data 导入数据 Mat 文件等
File:Save Workspace as 将工作空间所有变量和数据保存为数据 Mat 文件
File:Set Path 设置 Matlab 文件搜索路路径
File:Preference 设置 Matlab 选项,如数据显示格式、字体等
View:Desktop Layout 窗口布局选项,一般都使用默认(Default)
View:Dock\Undock 在组合窗口\分离窗口之间切换
Help:Demos Matlab 功能演示
Current Directory 按钮 设置当前工作目录
表 1 部分常用菜单、工具栏和使用说明
第二章第二章第二章第二章 数据类型数据类型数据类型数据类型
计算机语言用不同类型的变量来描述不同类型的对象。作为一门科学计算语言,Matlab
既有一般高级语言所具备的基本数据类型,又提供了适合矩阵计算的特殊数据类型。
一、 表达式
在命令窗口中作一些简单的运算,就如同使用一个功能强大的计算器,使用变量无须
预先定义类型。
例 2-1:
>>r=2;
>>V=4/3*pi*r^3
V= 33.5103
几个变量可以写在一行,用分号(;)或逗号(,)分割,用分号(;)使该表达式运算
结果不显示,而逗号(,)则显示结果。也可以将一个长表达式分几行写,用三点(…)续
行。若需要修改已执行的命令行,可以在命令历史窗口找到该命令行复制,在粘贴到命令窗
口修改。也可直接使用按键↑↓调出已执行过的命令行修改。
二、数据显示格式
Matlab 默认的数据显示格式为短格式(short):当结果为整数,就作为整数显示;当结
果为实数,以小数点后 4位的长度显示。若结果的有效数字超出一定范围,以科学计数法显
示(如 3.2000e-006表示 3.2×10-6)。数据显示格式可使用命令 format改变。
>>format long %长格式(long),16位
>>format short %短紧缩格式(short)
>>format rational %有理格式,近似分数
>>format %恢复默认的短格式
数据显示格式也可以通过菜单命令 File:Preference:Command:Numeric format改变。需要
指出的是,显示格式的改变不会影响数据的实际值,所以不会影响计数精度。其计数精度约
为 16位有效数字。
三、预定义变量
Matlab提供了一些预定义变量,定义了 Matlab应用和编程中常常用到的数据。如计算
精度、圆周率等(表 2)。
变量 返回值
ans 默然变量名,保留最近运算的结果(answer)
computer 计算机类型
eps 系统的浮点(Floating-point)相对精度
i或 j
基本虚数单位 1−
inf 无限大(∞ ) , 例如 1/0
nan或 NaN 非数值(不合法的数值),例如 0/0 ,∞/∞
nargin 函数的输入参数个数
nargout 函数的输出参数个数
pi 圆周率 (= 3.1415926...)
realmax 系统所能表示的最大数值
realmin 系统所能表示的最小数值
version Matlab 版本字符串
表 2 预定义变量和返回值
表中的常数可以不必声明,直接应用于 MATLAB 编程,
例 2-2:
>>a=abs(3+4i)
a=
5
例 2-3:编辑函数 testarg1()
function c = testarg1(a,b) %%%%检测函数的输入参数个数检测函数的输入参数个数检测函数的输入参数个数检测函数的输入参数个数!!!!
if (nargin == 1)
c = a.^2;
elseif (nargin == 2)
c = a + b;
end
设置当前工作目录为函数testarg1()所在目录,在命令窗口输入c=testarg1(4),显示c=16;
输入 c=testarg1(4,3),显示 c=7。
四、用户变量
Matlab变量名的第一个字符必须是字母字母字母字母,后面可以跟字母、数字和下划线的任何组合,
但不能含中文。变量名区分大小写。
创建变量时不必声明变量的数据类型,直接创建。但要防止它与系统的预定义变量名、
函数名、保留字(for,if,while,end等)冲突。
Matlab支持的基本变量数据类型:
例 2-4:
x=int8(5) %将 x的值设置为 5,数据类型为 int8型。
class(x) %用 class函数显示变量的数据类型。
第三章第三章第三章第三章 数组与矩阵数组与矩阵数组与矩阵数组与矩阵
Matlab 运算的基本数据对象是矩阵,数组(这里指向量)是矩阵的特殊类型,但创建
与运算又有区别。数组与矩阵属于数据结构的范畴,Matlab 中所有的数据都是用数组或矩
阵形式进行保存。
§§§§1 数组
一、数组的构造
1 ) 直接法:用空格或逗号间隔数组元素,然后用中括号括([ ])起来。
例 5: x=[0 2 4 6] 或 x=[0 ,2,4 ,6]
句尾用回车(显示)或分号加回车(不显示)结束
2 )增量法(冒号法):利用 matlab提供的冒号运算符“:”可生成 1×n 的矩阵。
格式:x=first:step:last %初值:增量:终值
例 3-1:x=10:15
x=1:6.3
x=10:5:30
结构数组
字符(串)型
元胞数组(单元数组)
函数句柄
Java对象
逻辑类型
基本数值类型
双精度类型 double float(64位)
单精度类型 single float(32位)
整数类型 integer
int8(-27~27-1),uint8(0~28-1)
int16(-215~215-1),uint16(0~216-1)
int32(-231~231-1),uint32(0~232-1)
int64(-263~263-1),uint64(0~264-1)
x=9:-1:1 (不能表示为 x=9:1 )
默认时,创建增量为 1的序列。
3)linspace函数法
格式:x=linspace(first:last:num) %初值:终值:元素个数
需指定首尾值和元素个数,步长 h=(last-first)/(num-1)
例 3-2:x=linspace(0:10:5)
二、数组的运算
运算 符号 说明
数组加与减 a+b 与 a-b 对应元素之间加减
数乘数组 k*a 或 a*k k乘 a 的每个元素
数与数组加减 k+a 或 a+k k加(减)a 的每个元素
数组乘数组 a.*b a 中的元素乘以 b中对应的元素 a(i)*b(i)
a.^k a 中各元素的 k次幂 数组乘方
k.^a 以 k为底,a 中各元素为幂
数除以数组 k./a 以 k为底,a 中各元素为分母
a.\b 左除 b 中的元素除以 a 中对应的元素 b(i)/a(i) 数组除法
a./b 右除 a 中的元素除以 b 中对应的元素 a(i)/b(i)
表 3 数组运算符
注:点运算只有点乘、点乘方、点除三个,表示对应元素之间的运算;(.*)是一个整体,
点( .)不能漏掉,( .)和(*)之间也不能有空格。
例 3-3:已知 a=[1 2 3],b=[2 4 6],c=3;分析下列执行结果:
a=[1 2 3];
b=[2 4 6];
c=3;
a+b=[3 6 9]
a-b =[-1 -2 -3]
a+c=[4 5 6]
a*c=[3 6 9]
a.*b=[2 8 16]
a.\b =[2 2 2]
a./b =[0.5 0.5 0.5]
a.^b=[1^2 2^4 3^6]
a.^c=[1^3 2^3 3^3]
c.^a=[3^1 3^2 3^3]
§§§§2 矩阵矩阵矩阵矩阵
一、矩阵的创建
a.在命令窗口中创建。
例 3-4:>>x=[1 2 3;4 5 6;7 8 9]
x=
1 2 3
4 5 6
7 8 9
b.通过函数创建。
例 3-5:>>x=0:pi/4:2*pi;
>>y=sin(x)
c.通过数据文件创建,在命令窗口或程序中调入。例如使用产生数据,保存为 c:\bdat.xls,
在Matlab的 Files菜单选 Import Data,找到文件 c:\bdat.xls,打开,就将表格中数据作为二
维数组赋予变量 bdat。
d.通过M文件创建,在命令窗口或程序中执行中。
e.特殊矩阵的生成
全零阵 zeros (m,n)
全 1阵 ones(m,n)
单位阵: eye(n)
对角矩阵:diag(a,n)
魔方矩阵:magic(n)
f.获取矩阵的元素 A(row,column)
例 3-6:H=magic(5)
H(3,2) 6
H(3,2)=0
H(:,3:5) %表示取 H 的第 3到第五列组成的矩阵
V=[1 3 5]
B=H(V,4) %表示取 H的第 4列的第 1,3,5个元素组成的矩阵
c=H(V,:) %表示取 H 的第 1,3,5行组成的矩阵
g.获取矩阵的信息
length(列数) size (行和列数)
ndims(维数) numel(元素个数)
例 3-7:a=[1 2 3;2 6 9]
length(a) 3
size(a) 2 3
ndims(a) 2
numel(a) 6
b=[1 2 3 6 9]
length(b) 5
size(b) 1 5
ndims(b) 2
numel(b) 5
二、矩阵的运算
运算 符号 说明
矩阵转置 A′ 复矩阵共轭转置,实转置用 A′
矩阵加与减 A+B 与 A-B 对应元素之间加减
数乘矩阵 k*A 或 A*k k乘 A 的每个元素
数与矩阵加减 k+A 或 A+k k加(减)A 的每个元素
A.*B A 中的元素乘以 B 中对应的元素 A(i,j)*B(i,j) 矩阵乘法
A*B A*B
A.^k A 中各元素的 k次幂
k.^A 以 k为底,A 中各元素为幂 矩阵乘方
A^k k个 A 相乘
数除以数组 k./a 以 k为底,a 中各元素为分母
A.\B 左除 B 中的元素除以 A 中对应的元素 B(i,j)/A(i,j)
A./B 右除 A 中的元素除以 B 中对应的元素
A\B 左除 AX=B的解 矩阵除法
A/B 右除 XB=A的解
表 4 矩阵运算符
例 3-8:已知 A=[1 2;3 4],B=[4 3;2 1],c=3;分析下列执行结果:
>>100+A
ans =
101 102
103 104
>>A*B
ans =
8 5
20 13
>>A.*B
ans =
4 6
6 4
>> A\B
ans =
-6.0000 -5.0000
5.0000 4.0000
>> B/A
ans =
-3.5000 2.5000
-2.5000 1.5000
>> A.\B
ans =
4.0000 1.5000
0.6667 0.2500
>> B./A
ans =
4.0000 1.5000
0.6667 0.2500
注:一些对矩阵的特殊运算函数
(1)det:求方阵的行列式;
(2)inv:求方阵的逆;
(3)rank:求矩阵的秩;
(4)norm求矩阵和向量的范数。 norm(A,p),p可取 1,2,inf。
norm(x,1) 1范数
norm(x,2) 2范数(欧几里德范数)
norm(x,inf) 无穷范数
(5)tril :提取矩阵 A的下三角部分;
(6)triu :提取矩阵 A的上三角部分;
(7)eig:返回方阵的特征值和特征向量;
[V,D]=eig(A)其中 D为特征值构成的对角阵,每个特征值对应 V的列为属于该特
征值的一个特征向量,如果只有一个返回值,则得到特征值构成的列向量。
(8)cond:求矩阵的的条件数。cond(A,p),p的含义同 norm。
注注注注::::访问访问访问访问数组或数组或数组或数组或矩阵的元素用小括号矩阵的元素用小括号矩阵的元素用小括号矩阵的元素用小括号 a(i),A(i,j)
三、聚合矩阵:
通过连接一个或多个矩阵来形成新的矩阵。[ ]既是矩阵构造符,又是矩阵运算符。
构造
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
:
A.直接法 C=[A B] 水平(相同行数)
C=[A;B] 垂直(相同列数)
B.函数法
cat 沿指定的维聚合
horzcat 水平聚合
vercat 垂直聚合
repmat 通过复制和叠置矩阵来创建新的矩阵
blkdiag 用已有的矩阵创建新的对角矩阵
例 3-9:
A=[1 2 3;4 5 5;7 8 9]
B=magic(3)
C=eye(2)*8
[A B] %horzcat(A,B)
[A;B] %vertcat(A,B)
cat(1,A,B)%沿 1维(列)聚合
repmat(A,2,4) %将 A垂直方向复制 2次,水平方向复制 4次
blkdiag(A,B,C)
§§§§3 字符串字符串字符串字符串(char)
一、创建
A.直接法:通过把字符放在单引号中来指点字符数据,每个字符占用 2个字节。使用函
数 class或 ischar测试数据类型。
country='china‘
class(country)
创建二维字符串时,确定每行具有相同的长度。
name=['liu ying';'hu xu'] % ×
name=['liu ying';'hu xu '] % √
根据不同长度的字符串创建字符串时,将短的那些字符串用空格补齐,使所有字符串的长度
相同。
B.函数法:用 char函数创建,自动以最长的输入字符串的长度为
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
,进行空格补齐工
作。
name=char('liu ying' ,'hu xu' )
二、字符转换
char 将单元数组转换为标准字符串数组。
str2double 将单元数组转换为字符串表示的双精度值
int2str 将整型数据转换为字符串型数据。setstr(num)
num2str(str,n) 将整型数据转换为字符串型数据,且设置输出的位数。 num2str(pi,20)
str2num 将字符串型数转换为据整型数据
mat2str 将数组转换为字符串。
一个数组的元素要么都是数值,要么都是字符串。数值转换后可以与字符串出现在同一
数组中。
例 3-10:
x=2006
size(x)
y=int2str(x)
size(y)
class(x) %double
class(y) %char
例 3-11:
x=[2 0 1;0 4 6]
size(x)
y=mat2str(x)
size(y)
class(x) %double
class(y) %char
Matlab命令可以定义成一个字符串,使用 eval可以使字符串所表达的Matlab命令得到
实现。
例 3-12:
fun=’x.^2.*sina(x)’
x=1:3;
eval(fun)
三、比较字符串
strcmp(str1,str2)
strncmp(str1,str2,n) 比较字符串的前 n+1个字符
关系运算符 == != > >= < <=
四、聚合字符串
1.聚合运算符([ ])
2.sprintf函数
3.strcat函数
例 3-13:
num_char=28;
['There are ' int2str(num_char) ' characters here']
等价于 sprintf('There are %d characters here\n' ,num_char)
等价于 strcat('There are ' , int2str(num_char), ' characters here')
§§§§4444 单元单元单元单元(cell) (cell) (cell) (cell) 数组数组数组数组
单元数组是一种特殊的数组,这种数组的元素是单元,能包含其他 matlab 数组。
一、单元数组的建立
建立单元数组和一般数组相似,只是数组元素用大括号括起来。
1.通过赋值语句创建(单元索引和内容索引)
例 3-14:单元索引
A(1,1)={[1 4 3;0 5 8;7 2 9]};
A(1,2)={ '宜春学院'};
A(2,1)={2+5i};
A(2,2)={-pi:pi/10:pi};
内容索引
A{1,1}=[1 4 3;0 5 8;7 2 9];
A{1,2}='宜春学院';
A{2,1}=2+5i;
A{2,2}=-pi:pi/10:pi;
>> disp(A)
[3x3 double] '宜春学院'
[2.0000+ 5.0000i] [1x21 double]
例 3-15:
>> Ac1={'first';1:3};Ac2={'second';[1 2;3 4]};
>> Ac=[Ac1,Ac2]
Ac =
'first' 'second'
[1x3 double] [2x2 double]
2.用 cell 函数预分配指定大小的空单元数组
B=cell(2,3)
用赋值语句填充 B单元:B(1,3)={1:3}
二、单元数组的引用
可以用带有大括号下标的形式引用单元数组元素。
例如 A{3,3}。
可以使用 disp 函数来显示单元数组,如 disp(A)。
可以使用 celldisp 函数来显示整个单元数组,如 celldisp(A)。
还可以删除单元矩阵中的某个元素。A(2)=[]
将在 switch 语句中用到。
>> A(2)=[]
>> disp(A)
[3x3 double] '宜春学院' [1x21 double]
§§§§5555 多项式计算多项式计算多项式计算多项式计算
5.1 多项式的建立
1.系数矢量的直接输入法
poly2sym([1,-4,3,2]) 3 24 3 2x x x− + +表示
2.由根矢量创建
poly([2,3]) 2 5 6x x− +表示
3.特征多项式输入法
5.2 多项式的四则运算
1.多项式的加减运算
即多项式系数向量的加减;多项式系数向量采取相对幂从高到低的顺序排列。
2.多项式乘法运算
函数 conv(P1,P2)用于求多项式 P1和 P2 的乘积。这里,P1、P2 是两个多项式系数向量。
例 3-16:求多项式
4 38 10x x+ − 与多项式
22 3x x− + 的乘积。
>> p1=[1 8 0 0 -10];
>> p2=[2 -1 3]
>> conv(p1,p2)
ans =
2 15 -5 24 -20 10 -30
3.多项式除法
函数[Q,r]=deconv(P1,P2)用于对多项式 P1 和 P2 作除法运算。其中 Q 返回多项式 P1
除以 P2 的商式,r返回 P1 除以 P2的余式。这里,Q和 r仍是多项式系数向量。
deconv 是 conv 的逆函数,即有 P1=conv(P2,Q)+r。
例 3-17:求多项式
4 38 10x x+ − 除以多项式
22 3x x− + 的结果。
5.3 多项式的导函数
对多项式求导数的函数是:
p=polyder(P):求多项式 P的导函数
p=polyder(P,Q):求 P·Q的导函数
[p,q]=polyder(P,Q):求 P/Q 的导函数,导函数的分子存入 p,分母存入 q。
上述函数中,参数 P,Q 是多项式的向量表示,结果 p,q 也是多项式的向量表示。
例 3-18:求有理分式的导数。
命令如下:
>>p1=[1 8 0 0 -10];
>>polyder(p1)
ans =
4 24 0 0
5.4 多项式的求值
Matlab 提供了两种求多项式值的函数:polyval 与 polyvalm,它们的输入参数均为多
项式系数向量 P和自变量 x。两者的区别在于前者是代数多项式求值,而后者是矩阵多项式
求值。
1.代数多项式求值
polyval 函数用来求代数多项式的值,其调用格式为:
Y=polyval(P,x)
若 x 为一数值,则求多项式在该点的值;若 x为向量或矩阵,则对向量或矩阵中的每个元素
求其多项式的值。
例 3-19:已知多项式
4 38 10x x+ − ,分别取 x=1.2 和一个 2×3矩阵为自变量计算该多项
式的值。
>> p1=[1 8 0 0 -10];
>> polyval(p1,1)
ans =
-1
>> polyval(p1,[1 2 3;3 4 5])
ans =
-1 70 287
287 758 1615
2.矩阵多项式求值
polyvalm 函数用来求矩阵多项式的值,其调用格式与 polyval 相同,但含义不同。polyvalm
函数要求 x 为方阵,它以方阵为自变量求多项式的值。设 A 为方阵,P 代表多项式
3 25 8x x− + ,那么
polyvalm(P,A)的含义是:A*A*A-5*A*A+8*eye(size(A))
而 polyval(P,A)的含义是:A.*A.*A-5*A.*A+8*ones(size(A))
例 3-20:仍以多项式
4 38 10x x+ − 为例,取一个 2×2 矩阵为自变量分别用 polyval 和
polyvalm 计算该多项式的值。
>> polyval(p1,[1 2;3 4])
ans =
-1 70
287 758
>> polyvalm(p1,[1 2;3 4])
ans =
485 722
1083 1568
5.5 多项式求根
n 次多项式具有 n个根,当然这些根可能是实根,也可能含有若干对共轭复根。
(A)Matlab 提供的 roots 函数用于求多项式的全部根,其调用格式为:
x=roots(P)
其中 P为多项式的系数向量,求得的根赋给向量 x,即 x(1),x(2),…,x(n)分别代表多项式
的 n个根。
例 3-21:求多项式
4 38 10x x+ − 的根。
命令如下:
>>A=[1,8,0,0,-10];
>>x=roots(A)
x =
-8.0194
1.0344
-0.5075 + 0.9736i
-0.5075 - 0.9736i
(B)若已知多项式的全部根,则可以用 poly 函数建立起该多项式,其调用格式为:
P=poly(x)
若 x 为具有 n个元素的向量,则 poly(x)建立以 x为其根的多项式,且将该多项式的系数赋
给向量 P。
例 3-22: 已知 f(x)
(1) 计算 f(x)=0 的全部根。
(2) 由方程 f(x)=0 的根构造一个多项式 g(x),并与 f(x)进行对比。
命令如下:
>>P=[3,0,4,-5,-7.2,5];
>>X=roots(P) %求方程 f(x)=0 的根
X =
-0.3046 + 1.6217i
-0.3046 - 1.6217i
-1.0066
1.0190
0.5967
>>G=poly(X) %求多项式 g(x)
G =
1.0000 0.0000 1.3333 -1.6667 -2.4000 1.6667
第四章第四章第四章第四章 MatlabMatlabMatlabMatlab 程序设计程序设计程序设计程序设计
4.1 M 文件
4.1.1 M 文件概述
用 MATLAB 语言编写的程序,称为 M文件。M文件可以根据调用方式的不同分为两类:命
令文件(Script File)和函数文件(Function File)。
1.脚本文件:在 Matlab 的工作空间内对数据进行操作。
2.函数文件:可接受输入参数并返回输出参数,其内的变量不占用 Matlab 工作空间,
第一行包含 function。
注: M 文件的调用以文件名为准。
%为 Matlab 的注释符,其后的语句不执行(只对当前行有效)。
例 4-1: 分别建立命令文件和函数文件,将华氏温度 f 转换为摄氏温度 c。转换公
式:c=5*(f-32)/9
程序 1:
首先建立命令文件并以文件名 f2c.m 存盘。
clear; %清除工作空间中的变量
f=input ('Input Fahrenheit temperature :');
c=5*(f-32)/9
然后在 MATLAB 的命令窗口中输入 f2c,将会执行该命令文件,执行情况为:
Input Fahrenheit temperature:73
c =
22.7778
程序 2:
首先建立函数文件 f2c.m。
function c=f2c(f)
c=5*(f-32)/9
然后在 MATLAB 的命令窗口调用该函数文件。
clear;
y=input('Input Fahrenheit temperature:');
x=f2c(y)
输出情况为:
Input Fahrenheit temperature:70
c =
21.1111
x =
21.1111
4.1.2 M 文件的建立与打开
M 文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用且最为方便
的是使用 MATLAB 提供的文本编辑器。
1.建立新的 M文件
为建立新的 M文件,启动 MATLAB 文本编辑器有 3种方法:
(1) 菜单操作。从 MATLAB 主窗口的 File 菜单中选择 New 菜单项,再选择 M-file 命令,
屏幕上将出现 MATLAB 文本编辑器窗口。
(2) 命令操作。在 MATLAB 命令窗口输入命令 edit,启动 MATLAB 文本编辑器后,输入 M
文件的内容并存盘。
(3) 命令按钮操作。单击 MATLAB 主窗口工具栏上的 New M-File 命令按钮,启动 MATLAB
文本编辑器后,输入 M文件的内容并存盘。
2.打开已有的 M文件
打开已有的 M文件,也有 3种方法:
(1) 菜单操作。从 MATLAB 主窗口的 File 菜单中选择 Open 命令,则屏幕出现 Open 对话
框,在 Open 对话框中选中所需打开的 M文件。在文档窗口可以对打开的 M文件进行编辑修
改,编辑完成后,将 M文件存盘。
(2) 命令操作。在 MATLAB 命令窗口输入命令:edit 文件名,则打开指定的 M文件。
(3) 命令按钮操作。单击 MATLAB 主窗口工具栏上的 Open File 命令按钮,再从
弹出的对话框中选择所需打开的 M文件。
MATLABMATLABMATLABMATLAB 常用的基本数学函数常用的基本数学函数常用的基本数学函数常用的基本数学函数
abs(x): 实数的绝对值,复数的模, x 为字符时,返回字符的 ASCII 值。
angle(z): 复数 z的相角(Phase angle)
sqrt(x): 开平方
real(z): 复数 z的实部
imag(z): 复数 z的虚部
conj(z): 复数 z的共轭复数
round(x): 四舍五入至最近整数
fix(x): 朝零方向取整
floor(x): 朝负无穷大方向取整
ceil(x): 朝正无穷大方向取整
rat(x): 将实数 x化为分数表示
rats(x): 将实数 x化为多项分数展开
sign(x): 符号函数 (Signum function)
当 x<0 时,sign(x)=-1;
当 x=0 时,sign(x)=0;
当 x>0 时,sign(x)=1。
rem(a,b): 除后取余(mod)
MATLABMATLABMATLABMATLAB 常用的三角函数常用的三角函数常用的三角函数常用的三角函数
sin(x): 正弦函数
cos(x): 余弦函数
tan(x): 正切函数
asin(x): 反正弦函数
acos(x): 反余弦函数
atan(x): 反正切函数
atan2(x,y):四象限的反正切函数
sinh(x): 双曲正弦函数
cosh(x): 双曲余弦函数
tanh(x): 双曲正切函数
asinh(x): 反双曲正弦函数
acosh(x): 反双曲余弦函数
atanh(x): 反双曲正切函数
适用於向量的常用函数适用於向量的常用函数适用於向量的常用函数适用於向量的常用函数
min(x): 向量 x的元素的最小值
max(x): 向量 x的元素的最大值
mean(x): 向量 x的元素的平均值
median(x): 向量 x的元素的中位数
std(x): 向量 x的元素的标准差
diff(x): 向量 x的相邻元素的差
sort(x): 对向量 x的元素进行排序(Sorting)
length(x): 向量 x的元素个数
norm(x): 向量 x的欧氏(Euclidean)长度
sum(x): 向量 x的元素总和
prod(x): 向量 x的元素总乘积
cumsum(x): 向量 x的累计元素总和
cumprod(x): 向量 x的累计元素总乘积
dot(x, y): 向量 x和 y的内积
cross(x, y): 向量 x和 y的外积
(大部份的向量函数也可适用於矩阵)
4.2 程序控制结构
4.2.1 顺序结构
1.数据的输入
从键盘输入数据,则可以使用 input 函数来进行,该函数的调用格式为:
A=input(提示信息,选项);
其中提示信息为一个字符串,用于提示用户输入什么样的数据。
x=input('x=');
如果在 input 函数调用时采用‘s’选项,则允许用户输入一个字符串。例如,想输入
一个人的姓名,可采用命令:
xm=input('What’s your name?','s');
2.数据的输出
MATLAB 提供的命令窗口输出函数主要有 disp 函数和 fprintf 函数,其调用格式为:
disp(输出项) %其中输出项既可以为字符串,也可以为矩阵。
fprintf(fid,format,) 与 c 语言类似。
例 4-2: 输入 x,y 的值,并将它们的值互换后输出。
程序如下:
x=input('Input x please.');
y=input('Input y please.');
z=x;
x=y;
y=z;
disp(x);
disp(y);
例 4-3: 求一元二次方程 2 0ax bx c+ + = 的根。
程序如下:
disp('求一元二次方程 2 0ax bx c+ + = 的根,请输入系数 abc:')
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))]);
3.程序的暂停
暂停程序的执行可以使用 pause 函数,其调用格式为:
pause(延迟秒数)
如果省略延迟时间,直接使用 pause,则将暂停程序,直到用户按任一键后程序继续执
行。
若要强行中止程序的运行可使用 Ctrl+C 命令。
4.2.2 选择结构
1.if 语句
在 MATLAB 中,if 语句有 3种格式。
(1) 单分支 if语句:
if 条件
语句组
end
当条件成立时,则执行语句组,执行完之后继续执行 if 语句的后继语句,若条件不成立,
则直接执行 if语句的后继语句。
(2) 双分支 if语句:
if 条件
语句组 1
else
语句组 2
end
当条件成立时,执行语句组 1,否则执行语句组 2,语句组 1或语句组 2执行后,再执行 if
语句的后继语句。
例 4-4: 计算分段函数
2
2
0
1
0
2
x
x
e
y
x x
x
pi
+
≤
=
+ +
>
的值。
程序如下:
x=input('请输入 x的值:');
if x<=0
y= (x+sqrt(pi))/exp(2);
else
y=log(x+sqrt(1+x*x))/2;
end
disp(y);
(3) 多分支 if语句:
if 条件 1
语句组 1
elseif 条件 2
语句组 2
……
elseif 条件 m
语句组 m
else
语句组 n
end
语句用于实现多分支选择结构。
例 4-5:输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出
其对应的大写字母;若为数字字符则输出其对应的数值;若为其他字符则原样输出。
程序如下:
c=input('请输入一个字符:','s');
if c>='A' & c<='Z'
disp(setstr(abs(c)+abs(‘a’)-abs(‘A’)));
%abs(‘a’)返回字符 a的 ASCII 值。
%setstr(num)将数值还原为字符。注意与 i nt2str 区分
elseif c>='a'& c<='z'
disp(setstr(abs(c)- abs('a')+abs('A')));
elseif c>='0'& c<='9'
disp(abs(c)-abs('0'));
else
disp(c);
end
2.switch 语句
switch 语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:
switch 表达式
case 表达式 1
语句组 1
case 表达式 2
语句组 2
……
case 表达式 m
语句组 m
otherwise
语句组 n
end
当表达式的值等于表达式 1的值时,执行语句组 1,
当表达式的值等于表达式 2的值时,执行语句组 2,
…,
当表达式的值等于表达式 m的值时,执行语句组 m,
当表达式的值不等于 case 所列的表达式的值时,执行语句组 n。当任意一个分支的语句执
行完后,直接执行 switch 语句的下一句。
例 4-6:某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用 price 来表示):
price<200 没有折扣
200≤price<500 3%折扣
500≤price<1000 5%折扣
1000≤price<2500 8%折扣
2500≤price<5000 10%折扣
5000≤price 14%折扣
输入所售商品的价格,求其实际销售价格。
程序如下:
price=input('请输入商品价格: ');
switch fix(price/100) %fix 取最近的整数。
case {0,1} %价格小于 200,元胞数组[0] [1]
rate=0;
case {2,3,4} %价格大于等于 200 但小于 500
rate=3/100;
case num2cell(5:9) %价格大于等于 500 但小于 1000
rate=5/100; %元胞数组[5] [6] [7] [8] [9]
case num2cell(10:24) %价格大于等于 1000 但小于 2500
rate=8/100;
case num2cell(25:49) %价格大于等于 2500 但小于 5000
rate=10/100;
otherwise %价格大于等于 5000
rate=14/100;
end
price=price*(1-rate) %输出商品实际销售价格
3.try 语句
语句格式为:
try
语句组 1
catch
语句组 2
end
try 语句先试探性执行语句组 1,如果语句组 1在执行过程中出现错误,则将错误信息赋给
保留的 lasterr 变量,并转去执行语句组 2。
例 4-7:矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,
则自动转去求两矩阵的点乘。
程序如下:
A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12];
try
C=A*B;
catch
C=A.*B;
end
C
lasterr %显示出错原因
4.2.3 循环结构
1.for 语句
for 语句的格式为:
for 循环变量=表达式 1:表达式 2:表达式 3
循环体语句
end
其中表达式 1的值为循环变量的初值,表达式 2的值为步长,表达式 3的值为循环变量的终
值。步长为 1时,表达式 2可以省略。
例 4-8:一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙
花数。
例如:数值 3 3 3abc a b c= + + , a,b,c={0,1,…,9}且 a≠0
程序如下:
for m=100:999
m1=fix(m/100); %求 m 的百位数字
%fix(x) 无论正负,舍去小数至最近整数
m2=rem(fix(m/10),10); %求 m的十位数字
%rem(a,b) 求余
m3=rem(m,10); %求 m 的个位数字
if m==m1*m1*m1+m2*m2*m2+m3*m3*m3
disp(m)
end
end
例 4-9:已知 1
1
2