MATLAB实用教程电子教案 1.0
下载更新,http://www.graphall.com/matlab/index.html
本书的主要内容和结构第 1章 MATLAB简介
MATLAB的主要特点
MATLAB的桌面环境
MATLAB的帮助系统
MATLAB的主要特点
简单易学
代码短小高效
计算功能强大
绘图功能强大
可扩展性能
MATLAB的桌面环境
启动按钮
命令窗口
命令历史窗口
工作空间窗口
当前目录浏览器主界面当前目录浏览工具命令窗口启动按钮 命令历史窗口工作空间窗口
MATLAB的帮助系统
帮助浏览工具
help函数和 doc函数第 2章 数据类型常数和变量数组和矩阵字符串多维数组结构单元数组函数句柄常数常数 返回值
ans 默认变量名,保存最近的结果。如果不给表达式指定一个输出变量,
MATLAB会自动将结果保存到 ans变量中
eps 浮点相对精度。是 MATLAB用于计算的容限
realmax 计算机可以表示的最大浮点数
realmin 计算机可以表示的最小浮点数
pi 圆周率
i,j 虚数单位
inf 无限值。类似 n/0的表达式生成的结果为 inf,其中 n为非 0实数
NaN 表示不合法的数值值,非数值。类似 0/0和 inf/inf的表达式生成的结果,与 NaN有关的算术运算结果,以及 n/0,n为复数时的计算结果都是 NaN
computer 计算机类型
version MATLAB版本字符串下表列出了 MATLAB提供的一些内部函数。
变量
变量名
MATLAB变量名的第 1个字符必须是字母,后面可以跟字母、数字和下划线的任何组合。
注意,MATLAB中变量名有大小写区分,所以 A和
a是不同的变量。
创建变量在 MATLAB中创建变量很简单,不必声明变量的数据类型 。 例如在命令窗口键入下面的命令行就可以创建一个 A变量 。
A=9
A =
9
变量的数据类型数 组逻辑型 字符型 数值型 单元数组 结构数组 函数句柄
Java类定制类
int8,uint8
int16,uint16
int32,uint32
Single Double
数组和矩阵
MATLAB中,所有数据都用数组或矩阵形式进行保存。
数组
矩阵数组构造数组的方法:
直接构造法
增量法
linspace函数法直接构造数组在 MATLAB中构造数组,只需要用空格或逗号间隔数组元素,然后用方括号括起来就行了 。 如
x=[0 2 3 6 7 8]

x=[0,2,3,6,7,8]
就构造了一个有 6个元素的数组 x。
用增量法构造数组利用 MATLAB提供的冒号运算符
(first:step:last)可以生成数组。数组中的元素按顺序从 first一直到 last,增量为 step。
如果不指定增量 step,则按升序生成数组,后面的数比它前面第一个数大 1。
如果要求生成降序排列的数组,指定一个负的增量。
增量可以是整数,也可以是小数。
用 linspace函数构造数组用 linspace函数构造数组,需要指定首尾值和元素总个数 。 基本形式是:
x=linspace(first,last,num)
其中,first,last和 num分别为 x数组的首尾元素和元素个数 。 如
x=linspace(0,10,5)
x =
0 2.5000 5.0000 7.5000 10.0000
矩阵构造矩阵的方法:
简单的创建方法
构造特殊矩阵
聚合矩阵
组合不同类型的数据用简单方法构造矩阵
MATLAB中创建矩阵最简单的方法是使用符号
[]。 在方括号内输入多个元素可以创建矩阵的一个行 。 用逗号或空格把每个元素间隔开 。 如果想开始一个新行,用分号终止当前行:
A = [row1; row2;,..; rown]
下面创建一个 3行 5列的数值矩阵 。
A = [12 62 93 -8 22; 16 2 87 43 91; -4 17 -72 95 6]
A =
12 62 93 -8 22
16 2 87 43 91
-4 17 -72 95 6
构造特殊矩阵
MATLAB提供了多个创建不同矩阵的函数,如下表所示。
函 数 功 能
ones 创建一个所有元素都为 1的矩阵
zeros 创建一个所有元素都为 0的矩阵
eye 创建对角线元素为 1,其他元素为 0的矩阵
accumarray 将输入矩阵的元素分配到输出矩阵中的指定位置
diag 根据矢量创建对角矩阵
magic 创建一个方形矩阵,其中行、列和对角线上元素的和相等
rand 创建一个矩阵或数组,其中的元素为服从均匀分布的随机数
randn 创建一个矩阵或数组,其中的元素为服从正态分布的随机数
randperm 创建一个矢量 (1× n的矩阵 )
聚合矩阵矩阵聚合是通过连接一个或多个矩阵来形成新的矩阵。符号 [ ]不仅是矩阵构造符,它还是
MATLAB聚合运算符。表达式 C=[A B]在水平方向上聚合矩阵 A和 B,表达式 C=[A;B]在垂向上聚合它们。
本例通过在垂向上聚合矩阵 A和 B来构造新矩阵 C:
A = ones(2,5) * 6; % 2× 5的矩阵,元素为 6
B = rand(3,5); % 3× 5的矩阵,元素为随机数
C = [A; B] % 垂向聚合 A和 B
组合不同类型的数据构造矩阵时,如果矩阵的数据类型不同,则
MATLAB会自动对某些元素进行类型转换,然后生成的矩阵具有相同的类型 。
用一个高精度的矩阵和一个低精度的矩阵构造新矩阵时,新矩阵是低精度型的。例如,聚合 double型和 single型的矩阵时,总是生成
single型的矩阵。 MATLAB会先将 double型元素转换为 single型。
聚合矩阵的特殊函数下表列出了聚合矩阵的一些特殊函数。
函 数 描 述
cat 沿指定的维聚合矩阵
horzcat 水平聚合矩阵
vertcat 垂向聚合矩阵
repmat 通过复制和叠置矩阵来创建新矩阵
blkdiag 用已有矩阵创建块对角矩阵获取矩阵的元素
使用编号索引
使用线性索引
使用冒号
使用 end关键字使用编号索引获取矩阵的元素利用编号和索引,可以获取 MATLAB矩阵的元素 。
要引用矩阵中的特殊元素,用下面的语法指定它的行号和列号,其中 A是矩阵变量 。 按先行后列的顺序指定 。
A(row,column)
使用线性索引获取矩阵的元素
MATLAB保存矩阵中的数据时是作为一个元素列保存 。 这个元素列又是由矩阵中的所有列组成的,后一列元素按先后顺序添加到前一列元素的最后 。 所以,矩阵 A
A = [2 6 9; 4 2 8; 3 0 1]
A =
2 6 9
4 2 8
3 5 1
在内存中是按下面的序列保存的:
2,4,3,6,2,5,9,8,1
矩阵 A第 3行第 2列的元素可以看作实际保存序列中的第 6个元素 。 要获取这个元素,可以使用标准语法 A(3,2)或使用 A(6)。
使用冒号获取矩阵的元素利用冒号本身可以引用矩阵某行或列的所有元素 。 使用下面的语法,可以计算
4× 4的魔方矩阵 A中所有元素的和 。
sum(A(:,2))
ans =
34
将冒号进行索引,可以引用整个矩阵中的所有元素。 本例显示矩阵 A中的所有元素,按列序返回它们:
A(:)
使用 end关键字获取矩阵的元素利用 end关键字可以指定矩阵某维的最后一个元素 。 它适用于不知道矩阵有多少行或多少列的情况 。 例如,可以用下面的语句进行值的替换:
B(1:3:end) = -10
字符串
字符串的创建
类型转换
字符串的比较
字符串的聚合
字符串的搜索和替换创建字符串
通过把字符放到单引号中来指定字符数据。如,下面创建一个 1× 5的字符串 country。
country = 'China';
创建一个二维字符串时,确定每行具有相同的长度,
例如,下面两个字符串都有 5个字符,用它们组合起来的二维字符串是合法的。
name = ['Li Yi' ; 'Hu Xu ']
name =
Li Yi
Hu Xu
根据不同长度的字符串创建字符串时,将短的那些字符串后面用空格补齐,使所有字符串的长度相同。
类型转换
用 char函数把单元数组转换为标准字符串数组。
str2double函数把一个字符串单元数组转换为字符串表示的双精度值。
int2str函数将整型数据转换为字符串型数据。
num2str函数对输出字符串的格式提供了更多控制,该函数的第 2个变量是可选的,它设置输出字符串的位数,或指定一个实际的格式。
mat2str函数将数组转换为字符串。
mat2str函数将返回一个包含文本的字符串,该文本在命令行中输入,用于创建矩阵。
字符串的比较
用 strcmp函数比较字符串,字符串不相等时,返回 false。
可以使用 MATLAB的关系运算符,如,可以用(==)确定两个字符串中的相同字符。所有关系运算符 (>,>=,<,<=,
==,!=)比较对应字符的值。
字符串的聚合
字符串通常可以由更小的元素聚合而成。
两个通用的聚合方法是使用 MATLAB聚合运算符( [])或 sprintf函数。
用 strcat函数也可以把两个或更多字符串组合在一起。
字符串的搜索和替换
strrep函数进行标准的搜索和替代操作 。
findstr函数把子字符串的起始位置返回到一个更长的字符串中。
strtok函数在输入字符串中第一次发现间隔符时返回间隔符前面的字符,可用该函数把句子分离成单词。
strmatch函数在字符串或字符串单元数组的整个行中进行查找,看有没有以给定字符序列打头的字符串,它返回以该字符串打头的行的行号。
多维数组
用索引生成多维数组
用特殊函数生成多维数组
用 cat函数生成多维数组用索引生成多维数组创建多维数组的方法之一是先创建一个二维数组,然后扩展它 。 如:
A = [5 7 8; 0 1 9; 4 3 6];
A是一个 3× 3的数值,即它的行维和列维都是 3。 给 A添加第三维 。
A(:,:,2) = [1 0 4; 3 5 6; 9 8 7]
用特殊函数生成多维数组可以使用与生成二维数组相同的方式,
用 randn,ones和 zeros函数等生成多维数组 。 提供的每个变量表示生成的数组中对应维的大小 。 如:要创建一个正态分布随机数的 4× 3× 2的数组,可以输入:
B = randn(4,3,2)
要生成一个元素均为同一常数的数组,
使用 repmat函数 。 如:
B = repmat(5,[3 4 2])
用 cat函数生成多维数组
cat函数是创建多维数组的一种简单方式,
它按指定的维数将多个数组聚合到一起,
其调用格式为:
B = cat(dim,A1,A2...)
其中 A1,A2等是进行聚合的数组,dim
是维数。
结构
创建结构数组
获取结构数组中的数据
数组的大小
操作字段
结构的嵌套创建结构数组
使用赋值语句可以通过将数据赋给单独的字段来生成一个简单的 1× 1结构数组。
使用 struct函数可以用 struct函数预分配一个结构数组 。
其基本形式为:
str_array = struct('field1',val1,'field2',val2,...)
其中,变量为字段名和它们的对应值。
单元数组
创建单元数组
获取单元数组的数据
删除单元和重塑单元数组创建单元数组
用赋值语句创建单元数组可以使用单元索引和内容索引两种方式创建单元数组。
用 cell函数创建单元数组使用 cell函数,可以预分配指定大小的空单元数组,如,下面的语句创建一个空的单元数组:
B = cell(2,3);
然后可以用赋值语句填充 B单元。
函数句柄函数句柄是一种 MATLAB数据类型,
它包含用于引用函数的信息。创建函数句柄时,MATLAB在句柄中保存所有与要运行的函数有关的信息。
第 3章将对函数句柄进行比较详细的介绍。
第 3章 M文件设计变量表达式流程控制函数
M文件程序调试与错误处理编程技巧变量
变量的作用范围局部变量,局部变量的作用范围仅限于本函数。
全局变量,全局变量用 global关键字进行声明,其作用范围为整个 M文件。
变量的存活期变量的存活期代表变量保持其值的能力。
用 persistent关键字声明固定变量,可以保持变量的值 。
表达式
数值表示
运算符
处理字符串表达式数值表示
MATLAB使用传统的数值表示方法 。 对于比较长的数,使用科学计数法,用字母 e指定以 10为底的幂次 。 虚数用 i或 j作为后缀 。 下面是一些合法的数值表示:
3 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
运算符
算术运算符
比较运算符
逻辑运算符
运算符的优先级运算符的优先级按照优先级别,各种运算符有下面的先后次序 。
小括号 ()
转置 (.'),幂 (.^),复数共轭转置 ('),矩阵的幂 (^)
一元的加 (+),一元的减 (-),逻辑否 (~)
乘 (.*),右除 (./),左除 (.\),矩阵乘 (*),矩阵右除 (/),矩阵左除 (\)
加 (+),减 (-)
冒号操作符 (:)
小于 (<),小于或等于 (<=),大于 (>),大于或等于 (>=),等于 (==)、
不等于 (~=)
逐元素 AND(&)
逐元素 OR(|)
&&
||
处理字符串表达式处理字符串表达式需要使用 eval函数和
feval函数。
eval函数可以处理包含 MATLAB表达式、
语句或函数调用的字符串。
feval函数与 eval函数的区别在于,该函数执行函数而不是 MATLAB表达式。
注意,尽量少用 eval函数,因为使用 eval函数的代码通常不好读,不易调试。
流程控制
条件控制
循环控制
错误控制
程序终止控制条件控制
if/elseif语句
switch/case语句比较上面两种语句,switch/case语句的可读性更强,并且可以比较不同长度的字符串。
循环控制
for循环
while循环
continue命令
break命令错误控制
try…catch 语句进行错误捕获,它把有可能引起异常的语句放在 try控制块中,这样当 try控制块中 statement语句引起异常时,
catch控制块就可以捕获它,并针对不同的错误类型,进行不同的处理。
程序终止控制
return命令能使当前正在运行的函数正常退出,并返回调用它的函数,继续运行。
下表比较 break,continue和 return命令。
命令 用在何处 描 述
break for 或 while循环 它出现时,退出循环,在嵌套的循环中,进入相邻的外层循环
continue for 或 while循环 在本循环中跳过剩余的语句,进入本循环的下一次迭代
return 任意位置 它出现时,立即退出函数,进入函数的调用函数中函数
主函数
子函数
匿名函数
嵌套函数
私有函数
重载函数主函数任何 M文件中的第 1个函数称为主函数。
注意,一般使主函数的名称与 M文件的相同。如果函数名与文件名不同,必须用文件名调用函数。
子函数
M文件中可以包含一个以上的函数。文件中除主函数以外的其他函数称为子函数,
并且它们只对主函数或同一文件中的其他子函数可见。
匿名函数使用匿名函数,可以在不必创建 M文件的情况下快速创建简单函数 。 可以在
MATLAB命令行或任何 M文件函数或脚本中创建匿名函数 。
创建匿名函数的语法格式为:
fhandle=@(arglist) expr
其中,expr表示函数体,即函数要完成主要工作的代码; arglist为要传递给函数的逗号间隔的输入参数列表。
嵌套函数可以在一个函数中嵌套定义一个或多个函数 。 嵌套函数具有类似下面的形式:
function x=A(p1,p2)

function y=B(p3)

end

end
私有函数私有函数是 private子目录中的函数。
它们只对父目录中的函数可见。
重载函数有时候同一个函数可以用于多种情况,
对应地有不同的输入参数,此时要用到重载函数 。 比如绘制二维线形图的 plot函数就有多种重载形式,下面是其中两种 。
plot(Y)
plot(X1,Y1,...)
这两个函数具有相同的函数名,不同的参数。调用 plot函数时 MATLAB会根据函数的参数自动选择使用。
M文件
脚本式 M文件和函数式 M文件
M文件的基本结构
函数的参数
函数句柄脚本式 M文件和函数式 M文件脚本式 M文件和函数式 M文件的区别如下表所示。
脚本式 M文件 函数式 M文件不接受输入参数,没有返回值可以接受输入参数,可以有返回值基于工作空间中的数据进行操作默认时,文件中参数的作用范围只限于函数内部自动完成需要花费很多时间的多步操作时使用扩展 MATLAB语言功能时使用
M文件的基本结构一个完整的函数式 M文件应该包括函数定义行、
H1行、帮助文本、函数体、注释和函数代码等方面的内容,其中函数定义行和函数代码是必需的。 如
function [x,y] = myfun(a,b,c) 函数定义行
% H1行 – 用一行文字来综述函数的功能
% 帮助文本 –用一行或多行文本解释如何使用函数,
% 在命令行中键入 "help <functionname>"时可以使用它
% 函数体 一般从第一个空白行后开始
% 注释 –描述函数的行为,输入输出的类型等,
% 在命令行中键入 "help <functionname>"时不会显示这些文本
x = prod(a,b); % 开始编写 函数代码函数的参数
检查输入参数的个数
传递参数
解包 varargin中的内容
打包 varargout
参数列表中的 varargin和 varargout
返回输出参数检查输入参数的个数利用 nargin和 nargout函数可以确定函数输入参数和输出参数的个数 。 然后可以根据参数个数用条件语句完成不同的任务,例如
function c = testarg1(a,b)
if (nargin == 1)
c = a,^ 2;
elseif (nargin == 2)
c = a + b;
end
给定一个输入参数时,函数计算输入值的平方;给定两个输入参数时,求它们的和。
传递参数使用 varargin和 varargout函数可以传递任意个数的输入参数或者返回任意个数的输出参数给函数 。
MATLAB把所有指定的输入参数指定到一个单元数组中。每个单元可以包含任意大小或类型的数据。对于输出参数,
函数代码必须把它们打包到一个单元数组中,这样,MATLAB就可以把参数返回给调用函数。
解包 varargin中的内容因为 varargin将所有输入参数包含在一个单元数组中,所以有必要使用单元数组索引来提取数据 。 例如
y(n) = varargin{n}(2);
其中,索引表达式 {n}获取 varargin的第 n个单元。表达式 (2)表示单元内容的第二个元素。
打包 varargout
当允许有任意多个输出参数时,必须将所有输出打包到 varargout单元数组中。使用 nargout确定输出参数的个数。
参数列表中的 varargin和 varargout
varargin或 varargout必须出现在参数列表的最后,即函数调用必须首先指定必要的参数。
返回输出参数放在函数定义行中等号左侧的任何参数都是调用函数的返回值。如果传递任何函数可以修改的输入参数,需要把相同的参数作为输出参数,这样,调用函数可以获得更新后的值。
函数句柄在 MATLAB中,在函数名前用 @符号创建一个函数句柄 。 下面的例子为 humps函数创建一个函数句柄并将它指定给变量
fhandle。
fhandle = @humps;
可以像传递其它变量一样将句柄传递给另一个函数。
用 MATLAB的 feval命令运行函数句柄的目标函数 。 用函数句柄使用本命令的语法为:
feval(fhandle,arg1,arg2,...,argn)
程序调试和错误处理
用 try-catch语句检查错误
错误和警告信息
用 Debug菜单进行调试编程技巧
矢量化
预分配内存空间
程序运行情况监测 --Profiler
第 4章 图形绘制创建二维图形创建三维图形创建二维图形
线形图、条形图和面积图
饼图
误差条图
散点图
直方图
对数坐标图和半对数坐标图
多轴图
极坐标图
帕累托图
火柴杆图
阶梯图
玫瑰花图
函数的图形
动画函数的图形可以用 fplot函数在指定范围内绘函数的图形。函数必须是 y = f(x)形式的,其中,x是矢量,为自变量; y为矢量,为因变量。
创建一个 M文件 myfun,它返回一个两列矩阵 。
function Y = myfun(x)
Y(:,1) = 200*sin(x(:))./x(:);
Y(:,2) = x(:).^2;
创建一个指向 myfun的函数句柄 。
fh = @myfun;
用下面的语句绘图 。
fplot(fh,[-20 20])
生成右图。
创建动画在 MATLAB中,可以用两种方法创建动画序列:
· 保存很多不同的图片,然后以电影的形式进行显示;
· 在屏幕上连续擦除和重画对象 。 每次重画都作递增式的改变 。
绘制三维图形
用给定数据绘三维线形图
用给定数据绘三维表面图
表面图绘制的数据格式问题
函数的曲线和曲面
二次曲面
样条曲线和曲面
多边形对象模型
消隐控制
三维图形的场景效果设置用给定数据绘三维线形图利用 plot3函数可以绘制三维线形图 。 用
plot3函数绘图时,需要指定线条穿过的点的坐标 。 假设 X,Y和 Z是 3个矢量,分别表示一系列点的 x坐标,y坐标和 z坐标,
则下面的命令创建一条经过这些点的三维曲线 。
plot3(X,Y,Z)
用给定数据绘三维表面图当绘图数据已知时,可以用 mesh,surf和
surfl等函数直接绘制网格图、刻面图和曲面图。 网格图和刻面图又分三角形和四边形两种。
表面图绘制的数据格式问题
MATLAB绘制表面图时数据格式是矩阵格式的,
而我们通常得到的采样数据或数值计算数据是点坐标格式的。所以,用 MATLAB函数绘表面图以前,需要先转换数据格式。
x y z
x(1,1) y(1,1) z(1,1)
x(1,2) y(1,2) z(1,2)
……
x(1,n) y(1,n) z(1,n)
x(2,1) y(2,1) z(2,1)
……
x(m,n) y(m,n) z(m,n)
X矩阵
x(1,1) x(1,2) … x(1,n)
x(2,1) x(2,2) … x(2,n)
……
x(m,1) x(m,2) … x(m,n)
同上构造 Y矩阵和 Z矩阵函数的曲线和曲面
使用 ezplot函数和 ezplot3函数,可以很方便地绘制二维和三维参数曲线;使用
ezpolar函数,可以在极坐标中绘制参数曲线。
用 ezmesh函数绘制函数表示的网格。函数形式可以是一般形式,也可以是参数形式。用 ezsurf函数绘制函数表示的曲面。
二次曲面
用 cylinder函数生成柱面。
用 sphere函数生成球面。
样条曲线和曲面
利用 MATLAB的样条工具箱,可以绘制多种样条曲线和曲面。
利用 MATLAB样条工具箱,可以绘制样条曲面,包括三次样条曲面,B样条曲面和有理样条曲面等。
多边形对象模型由一个或多个相连或不相连的多边形组成的对象称为面片图形对象,也常称为多边形对象模型。
创建多边形对象,需要定义面片 。 只需要指定顶点坐标和某种形式的颜色数据就可以定义面片了 。 面片支持多种着色方式,这一点对于用几何形体进行数据可视化很有用 。
定义面片主要有两种方式:
指定每个多边形的顶点坐标,MATLAB按顺序连接这些顶点,形成面片 。
指定每个顶点的坐标值和一个指定如何把这些点连成面的矩阵 。
消隐处理默认时,MATLAB绘制三维图形时会进行消隐处理 。 利用下面的命令,可以取消消隐:
hidden off
三维图形的场景效果设置绘制三维图以后,可以对它进行着色,
添加光照,设置材质、纹理、透明性并进行交互操作。
第 5章 图形编程句柄图形对象基本图形元素的绘制图形的着色图形变换定制图形交互绘图句柄图形对象
句柄图形对象简介
Figure对象
Root对象
对象的属性句柄图形对象的组织结构句柄图形对象的层次体系如下图所示。
Root
Figure
UI对象 Axes 隐藏的 Annotation
Axes对象核心对象 绘图对象 组对象 Annotation对象
Figure对象
Figure对象是 MATLAB显示图形的窗口。
图形窗口包括菜单、工具条、用户界面对象、上下文菜单、坐标系和坐标系的子对象等。
Root对象
Root对象是 Figure对象的父对象。不能实例化 Root对象,因为它的作用只是保存信息,它保存 MATLAB状态、计算机系统和 MATLAB默认设置等信息。
对象的属性图形对象的属性控制它外观和行为的很多方面 。 属性包括了诸如对象类型,父对象,子对象,可见性之类的一般信息,
也包括该对象类型的独有信息 。
例如,在任何给定的 Figure对象上,可以知道最后按下的是哪个键、鼠标光标的位置或者最近选择的菜单的句柄等。
基本图形元素的绘制
绘制直线段、多义线和曲线 —line函数
绘制矩形、圆角矩形、椭圆、圆及对应的区域图形 —rectangle函数
绘制多边形 —patch函数
绘制文本 —text函数绘制直线段和多义线
MATLAB中的直线段和多义线用 Line对象表示。用 line函数创建直线段对象。按照直线逼近的思路,还可以用该函数创建曲线。
下面利用 line函数生成多义线:
X2=[1 9 20 28];
Y2=[1 25 10 32];
line(X2,Y2,'LineWidth',2,'Marker','+')
绘制曲线按照直线逼近的思路,可以用 line函数创建曲线。
下面用多条直线段逼近余弦曲线,左图用 10条直线段逼近,右图用 20条直线段逼近。
绘制矩形、圆角矩形、椭圆、
圆及对应的区域图形
MATLAB中,矩形、圆角矩形、椭圆、圆及对应的区域图形都用 Rectangle对象表示。用
rectangle函数可以创建 Rectangle对象。
在同一个坐标系中创建矩形,圆角矩形,椭圆和圆各一个,使用了不同的线型和线宽 。
rectangle('Position',[1,1,20,10],'LineWidth',3);
rectangle('Position',[5,3,10,15],'Curvature',[1 1]);
rectangle('Position',[5,3,10,10],'Curvature',[1 1],'LineWidth',3);
rectangle('Position',[4,5,12,8],'Curvature',.4,'LineStyle','--');
axis equal
绘制多边形任意多边形及多边形区域是用 Patch对象表示的,该对象由 patch函数创建。
使用 patch函数生成面片,有两种方法,一种是顶点 /颜色法,通过指定每个小面的顶点坐标和颜色来创建;另一种是顶点 /
小面法,通过指定所有顶点的坐标和各小面的顶点和颜色来创建。
绘制文本文本用 Text对象表示,该对象由 text函数创建,
text函数是创建文本图形对象的低级函数。使用它将文本字符串放在指定的位置上。
下面创建多种形式的文本:
text(10,30,'添加文本 1');
text(10,25,'添加文本 2','FontSize',20,'FontAngle','Italic');
text(10,20,'添加文本 3','FontName','黑体 ','FontWeight','bold');
text(10,10,'添加文本 4','Rotation',45);
axis([5 20 8 35])
图形的着色
多边形的单色填充
多边形的插值着色对同一个多边形,左图为单色填充效果,右图为插值着色效果。
图形变换
在 MATLAB中实现图形变换,需要用到
hgtransform对象,使用该对象的 Matrix
属性可以给 hgtransform对象的所有子对象应用一个变换。典型的变换包括旋转、
平移和缩放。
用 hgtransform函数创建 hgtransform图形对象。
使用 makehgtform函数创建 4× 4的变换矩阵。
定制图形前面介绍了在 MATLAB中创建基本图形元素的方法。有了基本图形元素,就可以灵活运用它们,形成更复杂的图形。
第 6章 高等数学计算函数和极限导数极限和导数的应用不定积分和定积分空间解析几何与向量代数多元函数的极限和求导级数微分方程函数
复合函数运算符号表达式的复合函数运算主要是通过函数 compose来实现的。
反函数符号表达式的反函数运算主要是通过函数
finverse来实现的。
函数的图形极限符号极限由函数 limit来实现。
例:求数列 的极限。
解:在命令窗口键入下面的命令行:
syms n;
limit((n+(-1)^(n-1))/n,n,inf)

ans =
1
导数
求函数的导数
求隐函数的导数
求参数方程确定的函数的导数求函数的导数用 diff函数进行函数求导。
例:求函数 的导数。
解:在命令窗口键入下面的命令行:
syms x;
f=sym('(x-1)^3/(x+1)');
B=diff(f)

B =
3*(x-1)^2/(x+1)-(x-1)^3/(x+1)^2
求隐函数的导数对于隐函数 F(x,y)=0,导数求参数方程确定的函数的导数对于参数方程导数极限和导数的应用
渐近线
极值
拐点不定积分和定积分
不定积分
求定积分
定积分的近似计算
定积分的应用
多重积分不定积分
MATLAB中,用符号工具箱中的 int函数求函数的不定积分和定积分。用 int函数的前两种调用格式求不定积分。
例:求不定积分 。
解:在命令窗口键入
syms x n
int(x^n)

syms x n
int(x^n,x)

ans=
x^(n+1)/(n+1)
求定积分用 int函数的后两种调用格式求定积分。
例:求定积分 。
解:在命令窗口键入
syms x
int(x^7,0,1)

ans=
1/8
定积分的近似计算用 MATLAB提供的 trapz函数可以用梯形法近似求取定积分的值。
例:积分 的精确值为 2,下面用 trapz函数在均匀间隔的网格上求该积分的数值近似。
X=0:pi/100:pi;
Y=sin(X);
Z=trapz(X,Y)
Z=
1.9998
定积分的应用使用定积分,可以解决几何和物理中的很多实际问题,比如求平面图形的面积、
求曲面围成的体积、求曲线的弧长、求功等。
多重积分可以用 int函数求函数的多重积分。
例:求二重积分 。
解:在命令窗口键入
syms x y;
int(int(x*y,y,2),y,1,2)

ans =
9/8
空间解析几何与向量代数
空间向量运算
曲面及其方程空间向量运算已知向量 a={2,1,-1},b={1,-1,2},计算 a+b,a-b,
2a,a·b,a× b。
解:在命令窗口键入下面的命令行:
a=[2 1 -1];
b=[1 -1 2];
c=a+b
d=a-b
e=2*a
f=dot(a,b)
g=cross(a,b)

c =
3 0 1
d =
1 2 -3
e =
4 2 -2
f =
-1
g =
1 -5 -3
上面分别用 dot和
cross函数计算向量的点积和叉积曲面及其方程利用 MATLAB提供的绘图函数,可以绘制给定函数的曲面和二次曲面。相关内容,
请参见 6.2.4和 6.2.5小节的介绍。
多元函数的极限和求导
求多元函数的极限
求多元函数的导数
求二元隐函数的导数求多元函数的极限例:求极限 。
解:在命令行键入
syms x y;
limit((sin(x+y)-sin(x))/y,y,0)
ans =
cos(x)
求多元函数的导数用 diff函数计算多元函数的偏导数,需要指定相对于哪个变量求偏导数。
例:求函数 f=sin(st)的偏导数 。
解:在命令窗口键入下面的命令行
syms s t
f=sin(s*t)
diff(f,t)
ans=
cos(s*t)*s
求二元隐函数的导数对于隐函数 F(x,y,z)=0,导数级数
级数求和
泰勒级数展开
傅立叶级数展开级数求和可以用 symsum函数求级数的和。
例:求级数 和 。
解:在命令窗口键入
syms x k
s1=symsum(1/k^2,1,inf)
s2=symsum(x^k,k,0,inf)
s1=
1/6*pi^2
s2=
-1/(x-1)
泰勒级数展开用 taylor函数进行泰勒级数展开。
例,求函数 的泰勒级数展开,取前 7
项。
解:在命令窗口键入下面的代码
syms x
f=1/(5+4*cos(x))
T=taylor(f,8)
返回
T=
1/9+2/81*x^2+5/1458*x^4+49/131220*x^6
傅立叶级数展开通过编写程序,可以实现函数的傅立叶级数展开。
微分方程微分方程可以通过函数 dsolve求解。
例:求微分方程 的通解,y为应变量,t为默认的自变量。
解:输入下面的命令行
dsolve('Dy=1+y^2')
返回
ans =
tan(t+C1)
即为所求的通解 。 下面指定初始条件 y|x=0=1。
y = dsolve('Dy=1+y^2','y(0)=1')
生成
y =
tan(t+1/4*pi)
第 7章 线性代数矩阵分析矩阵的分解线性方程组的求解矩阵的特征值和特征向量符号矩阵稀疏矩阵矩阵分析
矩阵的行列式
矩阵的四则运算
矩阵的幂和平方根
矩阵的指数和对数
矩阵的翻转
矩阵的逆运算
矩阵的迹
矩阵的范数
矩阵的条件数
矩阵的重塑
矩阵的逻辑运算
矩阵的初等变换
矩阵的秩矩阵的行列式可用函数 det求矩阵的行列式大小。
例:
a=[1 2 0;2 5 -1;4 10 -1];
b=det(a)
b =
1
矩阵的四则运算
数组和矩阵的加减运算使用加号和减号,即
,+‖和,-‖。
矩阵相乘使用,*” 运算符 。
如果只是将两个矩阵中相同位置的元素相乘,
使用,,*‖运算符。
矩阵除法有左除和右除的区别,分别使用,\‖
和,/‖运算符。
与,\‖和,/‖运算符相对应,也有,,\‖和,,/‖运算符,分别用于将两个矩阵中的对应元素相除。
矩阵与常数的代数运算,可以直接使用上面的各种运算符。
矩阵的幂和平方根
矩阵的幂运算使用运算符,^‖,幂运算具有类似 X^p的形式。如果 p是整数,则幂通过重复求平方来计算;如果该整数为负值,则首先计算 X的逆;如果 p取其他值,则计算需要用到特征值和特征矢量,即如果 [V,D]=eig(X),则
X^p=V*D.^p/V。
用 sqrtm函数求矩阵的平方根。
矩阵的指数和对数
矩阵的指数运算用 expm函数实现。
矩阵的对数运算用 logm函数实现。
矩阵的翻转
用 fliplr函数左右翻转矩阵;
用 flipud函数上下翻转矩阵;
用 flipdim函数沿指定方向翻转矩阵;
用 transpose函数沿主对角线翻转矩阵。
矩阵的逆运算
用函数 inv实现矩阵的逆运算。
由函数 pinv实现 矩阵的伪逆运算。。
矩阵的迹矩阵的迹是指矩阵所有对角线元素的和。
在 MATLAB中,矩阵的迹可由函数 trace
计算得到。
矩阵的范数矩阵的范数运算可由函数 norm来实现,具有 norm(A),norm(A,1),norm(A,2),
norm(A,inf),norm(A,’fro’)等形式,分别代表矩阵的范数运算,1-范数运算,7-范数运算、无穷大范数运算和 F-范数运算。
矩阵的条件数条件数的值代表矩阵,病态,程度的大小。
在 MATLAB中,矩阵的条件数可分别由函数 cond(A),condest(A)或 rcond(A)计算得到,它们分别计算矩阵的条件数值、
1-范数矩阵条件数值和矩阵的逆条件数值。
矩阵的重塑用 reshape函数进行矩阵重塑 。 下面将一个 3× 4
的矩阵重塑为 2× 6的 。
例:
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
A =
1 4 7 10
2 5 8 11
3 6 9 12
B = reshape(A,2,6)
B =
1 3 5 7 9 11
2 4 6 8 10 12
矩阵的逻辑运算使用逻辑运算符,可以直接对数组或矩阵进行逻辑运算,包括逻辑非、逻辑或、
逻辑与和逻辑异或运算。
矩阵的初等变换用 rref函数进行矩阵的初等行变换 。
例:
A=[1 2 1 8;1 2 3 10;2 3 1 13;1 2 2 9]
A =
1 2 1 8
1 2 3 10
2 3 1 13
1 2 2 9
B=rref(A)
B =
1 0 0 3
0 1 0 2
0 0 1 1
0 0 0 0
矩阵的秩用函数 rank求矩阵的秩。
例:
a=[1 2 0;2 5 -1;4 10 -1];
b=rank(a)
b =
3
矩阵的分解
矩阵的 LU分解
矩阵的 QR分解
矩阵的 QZ分解
矩阵的乔累斯基分解
矩阵的奇异值分解
矩阵的特征值分解
矩阵的 Schur分解矩阵的 LU分解矩阵的 LU分解是线性方程组求解方法中高斯消去法的基础,在 MATLAB中由函数
lu来实现。
矩阵的 QR分解在 MATLAB中,QR分解可由函数 qr实现 。
常用的调用格式如下:
[B,C]=qr(A) 返回的矩阵 C为上三角矩阵,
矩阵 B为满秩矩阵 。
[Q,R,E] = qr(A) 返回的矩阵 E是置换矩阵,矩阵 R是上三角矩阵,矩阵 Q是满秩矩阵 。 上述矩阵满足关系 A*E = Q*R。
矩阵的 QZ分解在 MATLAB中,QZ分解可由函数 qz来实现 。 qz
函数常用的调用格式如下:
[AA,BB,Q,Z,V] = qz(A,B) 要求矩阵 A,B是方阵 。
产生的矩阵 AA,BB是上三角矩阵,Q,Z是正交矩阵,矩阵 V是特征矢量矩阵 。 其中,满足
Q*A*Z = AA与 Q*B*Z = BB。
[AA,BB,Q,Z,V] = qz(A,B,flag) 对于方阵 A,B的
QZ 分 解 取 决 于 参 数 flag 。 参数 flag 可取
'complex'与 'real'。
矩阵的乔累斯基分解设矩阵 A为 n阶对称正定矩阵,则 A矩阵可分解为 LL?,即 A= LL?。其中,矩阵 L是上三角矩阵。此时,这种分解就称为乔累斯基分解。在 MATLAB中,乔累斯基分解由函数 chol实现。
矩阵的奇异值分解在 MATLAB中,矩阵的奇异值分解由函数
svd来实现,其调用格式为
[b,c,d]=svd(A)
矩阵的特征值分解在线性代数中,很多情况下需要求矩阵的特征值。 MATLAB中求矩阵特征值的函数是 eig和 eigs。其中函数 eigs主要应用于稀疏矩阵。
矩阵的 Schur分解在 MATLAB中,矩阵的 Schur分解由 Schur
函数来实现,其调用格式为
[b,c]=schur(A)
其中 c矩阵为 Schur矩阵。
线性方程组的求解
方形系统
超定系统
不定系统矩阵的特征值和特征向量在 MATLAB中,矩阵的特征值运算用函数
eig或 eigs实现。其中,eigs函数主要针对矩阵为稀疏矩阵的情况。
符号矩阵
符号矩阵的四则运算
符号矩阵的转置运算
符号矩阵的行列式运算
符号矩阵的求逆运算
符号矩阵的求秩运算
符号矩阵的常用函数运算
符号矩阵常用线性方程 (组 )的求解稀疏矩阵
MATLAB中,创建稀疏矩阵一般用函数
sparse或 spdiags来实现。
稀疏矩阵由于存储空间变小,而且
MATLAB专门开发了针对它的算法,因此对稀疏矩阵的运算速度也非常快。
第 8章 概率论与数理统计的 MATLAB实现随机变量及其分布多维随机变量及其分布随机变量的数字特征样本描述参数估计假设检验方差分析一元线性回归随机变量及其分布
离散型随机变量及其分布律
连续型随机变量及其概率密度
分布函数
逆累加分布函数离散型随机变量及其分布
二项分布
泊松分布
离散均匀分布
几何分布
超几何分布连续型随机变量及其概率密度
连续型均匀分布
指数分布
正态分布分布函数对于离散型随机变量 X,设 x为任意实数,X
的分布函数为对于连续型随机变量 X,假设其概率密度为
f(x),则其分布函数为逆累加分布函数逆累加分布函数是累加分布函数的逆函数。
利用逆累加分布函数,可以求得满足给定概率时随机变量对应的置信区间的最小值和最大值。
多维随机变量及其分布用 mvnpdf和 mvncdf函数可以计算二维正态分布随机变量在指定位置处的概率和累积分布函数值。
下面左图和右图分别为二维正态分布随机变量的概率密度图和累积分布图。
-3
-2
-1
0
1
2
3
-2
0
2
0
0,1
0,2
0,3
0,4
x1
x2
P
ro
b
a
b
il
it
y
D
e
n
s
it
y
-3
-2
-1
0
1
2
3
-2
0
2
0
0,2
0,4
0,6
0,8
1
x1
x2
C
u
m
u
la
ti
v
e
P
ro
b
a
b
il
it
y
随机变量的数字特征
期望
方差
常见分布的数学期望和方差
协方差和相关系数
矩和协方差矩阵样本描述
集中趋势包括算术平均值、几何均值、调和均值、
中值和截尾均值等。
离中趋势包括均值绝对差、极差、方差和标准差等。
抽样分布包括卡方分布,t分布和 F分布等。
参数估计
点估计可以用矩法和最大似然法进行参数估计。
区间估计可以用 mle函数,利用最大似然估计 法进行参数的区间估计。
常见分布的参数估计
MATLAB统计工具箱提供了多种函数的参数估计函数,详见课本。
假设检验
方差已知时的均值检验
方差未知时单个正态总体均值的检验
方差未知时两个正态总体均值差的检验
基于成对数据的检验
分布拟合检验方差已知时的均值检验用 ztest函数在给定方差的条件下检验单样本数据是否服从给定均值的正态分布。
方差未知时单个正态总体均值的假设检验
t检验是用小样本检验总体参数,特点是在均方差不知道的情况下,可以检验样本平均数的显著性 。
用 ttest函数进行样本均值的 t检验。
方差未知时两个正态总体均值差的检验
ttest2函数对两个样本的均值差异进行 t检验。
基于成对数据的检验实际工作中为了比较两种方法或两种产品的差异,常常需要进行对比试验 。 这样得到的数据具有成对的特点 。
分析这种数据,还是需要 t检验。前面用到的 ttest函数可以进行检验。
分布拟合检验
q-q图
峰度 -偏度检验
秩和检验
q-q图
q-q图用变量数据分布的分位数与所指定分布的分位数之间的关系曲线来检验数据的分布。如果两个样本来自同一分布,
则图中数据点呈现直线关系,否则为曲线关系。
峰度 -偏度检验峰度 -偏度检验又称为 Jarque-Bera检验,评价给定数据服从未知均值和方差的正态分布的假设是否成立。该检验基于数据样本的偏度和峰度。对于正态分布数据,
样本偏度接近于 0,样本峰度接近于 3。
秩和检验秩和检验可检验两个总体是否相等。用
ranksum函数检验两个样本是否取自中值相同的总体。
方差分析
单因子方差分析用 anova1函数进行单因子方差分析。
双因子方差分析用 anova2函数进行双因子方差分析。
一元线性回归
进行一元线性回归
MATLAB中可以使用 polyfit函数实现一元线性回归。对于给定的数据,该函数返回一元线性回归方程的系数。
可化为一元线性回归的曲线回归问题在实际应用过程中,人们遇到的更多是非线性问题,通过变换,有的非线性问题可以转换为线性问题,从而可以用线性回归的方法来处理。
第 9章 最优化方法的 MATLAB实现一维搜索问题线性规划无约束非线性最优化问题有约束非线性最优化问题一维搜索问题求解单变量最优化问题的方法有很多种 。 如果函数的导数容易求得,一般来说首先考虑使用三次插值法,因为它具有较高的效率 。 对于只需要计算函数值的方法,二次插值法是一个很好的方法,它的收敛速度较快,在极小点所在区间较小时尤其如此 。 黄金分割法则是一种十分稳定的方法,并且计算简单 。 由于以上原因,
MATLAB优化工具箱中用得较多的方法是二次插值法,三次插值法,二次三次混合插值法和黄金分割法 。
利用 fminbnd函数找到固定区间内单变量函数的最小值。
例,对边长为 3m的正方形铁板,在 4个角处剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
解:假设剪去的正方形的边长为 x,则水槽的容积为现在要求在区间 ( 0,1.5) 上确定一个 x,使最大化 。 因为优化工具箱中要求目标函数最小化,所以需要对目标函数进行转换,即要求最小化 。
首先编写 M文件 fminbndtest.m:
function f = myfun(x)
f = - (3-2*x).^2 * x;
然后调用 fminbnd函数:
x = fminbnd(@fminbndtest,0,1.5)
得到问题的解:
x =
0.5000
即剪掉的正方形的边长为 0.5m时水槽的容积最大 。
线性规划线性规划问题的矩阵形式为线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量 b非负。不符合这几个条件的线性模型要首先转化成标准形式。
在 MATLAB工具箱中,可用 linprog函数求解线性规划问题。
无约束非线性最优化问题求解无约束最优化问题的方法主要有两类,即直接搜索法和梯度法。
直接搜索法适用于目标函数高度非线性,没有导数或导数很难计算的情况。常用的直接搜索法为单纯形法,此外还有 Hooke-Jeeves搜索法、
Pavell共轭方向法等。
在函数的导数可求的情况下,梯度法是一种更优的方法。常见的梯度法有最速下降法、
Newton法,Marquart法、共轭梯度法和拟牛顿法等。
MATLAB优化工具箱中用于求解无约束非线性规划问题的函数有 fminunc和 fminsearch。
有约束非线性最优化问题有约束非线性最优化问题的数学模型为其中,x,b,beq,lb,和 ub为矢量,A和 Aeq为矩阵,
c(x)和 ceq(x)为函数,返回标量。 f (x),c(x),和
ceq(x)可以是非线性函数。
利用 fmincon函数求多变量有约束非线性函数的最小值。
第 10章 复变函数的 MATLAB实现构造复数 (矩阵 )
复数运算复变函数的图形构造复数 (矩阵 )
用 complex函数构造复数 。 语法格式为
c = complex(a,b)
其中,a和 b分别表示复数的实部和虚部,
必须是标量或大小相同的向量、矩阵或多维数组。输出结果 c=a+bi,其大小与输入参数的相同。
复数的实部和虚部
用 real函数返回复数的实部。
用 imag函数返回复数的虚部。
共轭复数用 conj函数计算复数的共轭值 。 该函数的语法格式为
ZC = conj(Z)
其中 Z为复数数组。
复数的模用 abs函数求复数的模 。 该函数的调用格式为
abs(Z)
返回复数的模,等价于 sqrt(real(Z).^2 +
imag(Z).^2)。
复数的辐角用 angle计算复数的辐角 。 该函数的语法格式为
P = angle(Z)
复数的乘除法复数的乘除法运算由,*” 和,/‖实现 。
例:
m=4+2i;
n=2-5i;
m*n
ans =
18.0000 -16.0000i
m/n
ans =
-0.0690 + 0.8276i
复数的指数运算用 exp函数进行复数的指数运算 。 该函数的调用格式为
Y = exp(Z)
其中 Z为复数数组。
复数的对数运算用 log函数进行复数的对数运算 。 该函数的调用格式为
Y = log(Z)
其中 Z为复数数组。
复数的平方根运算用 sqrt函数进行复数的平方根运算 。 该函数的调用格式为
B = sqrt(Z)
该函数返回复数数组 Z中每个元素的平方根。
复数的幂运算复数的幂运算的形式为 Z^n,结果返回复数
Z的次幂 。
例:
(3+i)^2
ans =
8.0000 + 6.0000i
复数的三角函数运算复数的三角函数运算函数参见下表。
函数名 函 数 功 能 函数名 函 数 功 能
sin(x) 返回 x的正弦函数值 asin(x) 返回 x的反正弦值
cos(x) 返回 x的余弦函数值 acos(x) 返回 x的反余弦值
tan(x) 返回 x的正切函数值 atan(x) 返回 x的反正切值
cot(x) 返回 x的余切函数值 acot(x) 返回 x的反余切值
sec(x) 返回 x的正割函数值 asec(x) 返回 x的反正割值
csc(x) 返回 x的余割函数值 acsc(x) 返回 x的反余割值
sinh(x) 返回 x的双曲正弦值 coth(x) 返回 x的双曲余切值
cosh(x) 返回 x的双曲余弦值 sech(x) 返回 x的双曲正割值
tanh(x) 返回 x的双曲正切值 csch(x) 返回 x的双曲余割值求方程的复数根用 solve函数可以求方程的复数根 。
例:解方程 x2+1=0。
z = solve('x^2+1=0')
z =
i
-i
如果方程为多项式形式,可以用 roots函数进行求解。
复变函数的积分利用 int函数,可以求复变函数的不定积分和定积分。
例:求积分 。
syms z;
int('exp(z)','z',-pi*i,0)
ans =
2
绘复变函数的图形
绘二维图形
绘三维图形复数 (数组、矩阵 )的图形可以用 plot函数绘复数 (数组,矩阵 )的图形 。
语法格式为
plot(Z)
其中,Z为复数向量或矩阵,等价于
plot(real(Z),imag(Z))。
复变函数的三维图形
假设 f(z)为复变函数,在指定的范围内,用曲面的高度表示实部 (real(f(z))),颜色表示虚部
(imag(f(z))),颜色映射通过变化 HSV颜色模型中的饱和度。
用 cplxmap函数绘制复变函数的图形,语法格式为 cplxmap(z,f(z),bound),其中,z指定范围,
f(z)为复变函数。
用 cplxgrid函数生成极坐标复数网格。
z=cplxgrid(m)是一个 (m+1)× (2*m+1)的复数极坐标网格。
复变函数的图形示例绘函数 f(z)=z的图形 。
colormap(hsv(64))
z = cplxgrid(30);
cplxmap(z,z)
title('z')
生成下图。
绘函数 f(z)=z^3的图形 。
cplxmap(z,z.^3)
title('z^3')
生成下图。
第 11章 运筹学的 MATLAB实现线性规划与非线性规划整数规划最大最小化多目标决策线性规划与非线性规划
线性和非线性最优化问题请参见第 8章 8.2~8.4节的内容。
二次规划如果某非线性规划的目标函数为自变量的二次函数,约束条件全是线性函数,就称这种规划为二次规划。
利用 quadprog函数求解二次规划问题。
整数规划主要介绍 0-1规划,0-1规划是一种特殊形式的整数规划。
用 bintprog函数求解 0-1规划问题。
最大最小化最大最小化问题的数学模型为式中 x,b,beq,lb和 ub为矢量,A和 Aeq为矩阵,c(x),ceq(x)
和 F(x)为函数,返回矢量。 F(x),c(x)和 ceq(x)可以是非线性函数。
fminimax 使多目标函数中的最坏情况达到最小化。
多目标决策多目标决策问题的数学模型为式中 x,weight,goal,b,beq,lb和 ub 为矢量,A和 Aeq
为矩阵,c(x),ceq(x)和 F(x)为函数,返回矢量。
F(x),c(x)和 ceq(x)可以是非线性函数。
利用 fgoalattain函数求解多目标达到问题。
第 12章 多元统计分析的 MATLAB实现多元线性回归分析聚类分析判别分析因子分析多元线性回归分析多元线性回归的回归模型为
y=b0+b1xi1+b2xi2+… bnxin,i=1,2,…,n
模型中各系数与常数项通常还是利用最小二乘法来求得。
全回归分析
回归诊断
逐步回归分析全回归分析用 regress函数进行多元线性回归分析,利用该函数得到的是全回归结果。
回归诊断用 regstats函数进行线性模型的回归诊断。
逐步回归分析用 stepwise函数进行逐步回归,它使用交互环境 (如下图 )进行分析。
聚类分析主要介绍系统聚类分析方法。 系统聚类法是聚类分析中应用最为广泛的一种方法,
它的基本原理是:首先将一定数量的样品或指标各自看成一类,然后根据样品
(或指标)的亲疏程度,将亲疏程度最高的两类进行合并。然后考虑合并后的类与其他类之间的亲疏程度,再进行合并。重复这一过程,直至将所有的样品
(或指标)合并为一类。
系统聚类分析用到的函数函 数 功 能
pdist 计算观测量两两之间的距离
squareform 将距离矩阵从上三角形式转换为方形形式,或从方形形式转换为上三角形式
linkage 创建系统聚类树
dendrogram 输出冰柱图
cophenet 计算 Cophenetic相关系数
cluster 根据 linkage函数的输出创建分类
clusterdata 根据数据创建分类
inconsistent 计算聚类树的不连续系数判别分析判别分析是利用原有的分类信息,得到体现这种分类的函数关系式(称之为判别函数,一般是与分类相关的若干个指标的线性关系式),然后利用该函数去判断未知样品属于哪一类。
对于给定的数据,用 classify函数进行线性判别分析,用 mahal函数计算马氏距离 。
因子分析因子分析是一种降维方法。需要用模型解释数据内部的相关性时,使用因子分析法进行分析。
MATLAB中,用 factoran函数进行因子分析。
第 13章 计算方法的 MATLAB实现一元非线性方程求解线性方程组的数值解法非线性方程组的数值解法插值曲线拟合数值微分数值积分常微分方程的数值解一元非线性方程求解可用 fzero函数和 roots函数求解一元非线性方程。
用 fzero函数求一元非线性方程的零点。
用 roots函数计算多项式的根。
线性方程组的数值解法
基于矩阵变换的直接解法
Jocabi迭代法
Gauss-Seidel迭代法
SOR(超松弛 )迭代法非线性方程组的数值解法
不动点迭代法
Newton迭代法
拟 Newton法插值
一维插值
二维插值
多维插值
Lagrange插值
Newton插值一维插值
多项式插值用函数 interp1进行一维插值。 可选的插值方法包括:
最近邻插值线性插值三次样条插值三次插值
FFT插值函数 interpft用基于 FFT的方法进行一维插值。
二维插值用函数 interp2进行二维插值。 可选的插值方法包括:
最近邻插值
双线性插值
双三次插值多维插值
函数 interp3进行三维插值,可选的插值方法包括:
最近邻法线性插值三次插值
用 interpn函数进行更高维数据的插值,
同样有最近邻插值、线性插值和三次插值三种方法。
曲线拟合
最小二乘法
多项式曲线拟合
相关工具最小二乘法最小二乘法通过最小化残差的平方和来获得待定系数的估计。
常见的最小二乘法包括线性最小二乘、加权线性最小二乘、稳健最小二乘和非线性最小二乘等。求解非线性最小二乘问题的 Gauss-Newton法和 Levenberg-
Marquart法是老牌算法。
多项式曲线拟合用 polyfit函数计算拟合数据集的多项式在最小二乘意义上的系数,调用形式为
p = polyfit(x,y,n)
x和 y是包含要拟合的 x和 y数据的矢量,n是多项式的阶次。
拟合工具
MATLAB支持用下图所示的拟合界面进行曲线拟合。
数值微分
数值微分运算
数值梯度运算
中心差分数值微分运算可以用 diff函数实现数值微分运算。
例:
x=[3 7 5;0 4 2];
diff(x)
ans =
-3 -3 -3
数值梯度运算用 gradient函数进行数值梯度运算。
例:
v = -2:0.2:2;
[x,y] = meshgrid(v);
z = x,* exp(-x.^2 - y.^2);
[px,py] = gradient(z,.2,.2);
contour(v,v,z),hold on,quiver(v,v,px,py),hold off
中心差分使用 del2函数可以实现中心差分。
数值积分
梯形求积
Simpson求积
Lobatto求积
Gauss求积
Romberg求积
二重积分
三重积分常微分方程的数值解
显式和线性隐式常微分方程问题求解
完全隐式常微分方程问题求解
边界值常微分方程问题求解
改进的 Eulor法
线性多步法第 14章 偏微分方程数值解的 MATLAB实现一维偏微分方程的求解二维偏微分方程的求解用 GUI求解偏微分方程一维偏微分方程的求解
MATLAB使用 pdepe求解器求解一维 PDE,
要求一维 PDE具有下面的形式:
其中,。区间 [a,b]必须是有界区间。 m可以是 0,1或 2,分别表示平面对称、柱面对称和球面对称。如果 m>0,则
a必须大于等于 0。
二维偏微分方程的求解利用 MATLAB提供的偏微分方程数值解工具箱,可以求解二维 PDE问题。可求解的问题包括椭圆型问题、抛物型问题、
双曲型问题、特征值问题和非线性问题等。该工具箱使用有限单元法进行数值求解。
基本二维偏微分方程问题及其求解函数基本二维偏微分方程问题及其求解函数如下表所示。
二维偏微分方程问题 求解函数椭圆型问题 assempde
抛物型问题 parabolic
双曲型问题 hyperbolic
特征值问题 pdeeig
非线性问题 pdenonlin
用 GUI求解偏微分方程在 MATLAB命令窗口中输入命令,pdetool,然后单击回车键,显示 PDE图形用户界面,如下图所示。可以在该工具中可视地完成整个建模、
求解和绘图任务。
用 GUI求解偏微分方程的基本步骤一般地,利用 PDE图形用户界面求解 PDE问题的过程分为以下几步:
① 选择应用模式;
② 建立几何模型;
③ 定义边界条件;
④ 定义 PDE类型和 PDE系数;
⑤ 三角形网格剖分;
⑥ PDE求解;
⑦ 解的图形表达 。
其中前 5步可称为前处理,第 7步可称为后处理。
第 15章 计算几何的 MATLAB实现点与多边形的包含关系矩形的集合运算凸包
Delaunay剖分
Voronoi图最近邻搜索点与多边形的包含关系用 inpolygon函数可以测试点是否位于在多边形区域内部。
矩形的集合运算
MATLAB用 rectint函数求矩形区域的交。
凸包
二维点集的凸包
N维点集的凸包二维点集的凸包用 convhull函数计算平面点集的凸包。
例:下面的代码首先在极坐标中生成一系列点,用 pol2cart函数将它们转换到笛卡儿坐标,然后用 convhull函数计算点的凸包,用 plot函数,用红色实线画出凸包线。
xx = -1:.05:1; yy = abs(sqrt(xx));
[x,y] = pol2cart(xx,yy);
k = convhull(x,y);
plot(x(k),y(k),'r-',x,y,'b+')
N维点集的凸包用 convhulln函数求 N维点集的凸包。
根据维数的不同,可用不同方法绘
convhulln函数输出数据的图形。
对于 2维情况,使用 plot函数绘图 。
对于 3维情况,使用 trisurf函数绘图 。 使用 patch
函数绘图,对小面颜色可以有更多的控制 。
对于 3维以上的情况,不能绘图 。
Delaunay剖分
二维 Delaunay剖分
三维 Delaunay剖分
N维 Delaunay剖分二维 Delaunay剖分对于给定的点集,Delaunay三角网是连接每个点及其相邻点的线段集 。
可以用 delaunay函数实现二维 Delaunay三角剖分三维 Delaunay剖分用 delaunay3函数进行三维 Delaunay剖分。
N维 Delaunay剖分用 delaunayn函数进行 N维 Delaunay剖分。
Voronoi图考虑共面点集 P,对于 P中的每个点 Px,总存在一个多边形边界,边界内的点到该点的距离比到其他任何点的距离都小。称这个多边形边界为
Voronoi多边形,给定点集的所有 Voronoi多边形构成的集合称为 Voronoi图。
Voronoi图与 Delaunay三角网有关 —Delaunay三角形外接圆的圆心与
Voronoi多边形的顶点重合,如右图所示。
二维 Voronoi图用 voronoi函数绘二维 Voronoi图。
例:下面的代码用 voronoi函数绘 10个随机点的 Voronoi图。
rand('state',5);
x = rand(1,10); y = rand(1,10);
voronoi(x,y)
N维 Voronoi图用 voronoin函数绘 N维 Voronoi图。
最近邻搜索
用 desearch函数进行最近点搜索。
用 dsearchn函数进行 N维最近点搜索。
用 tsearch函数搜索最近 Delaunay三角形。
第 16章 科学计算可视化的
MATLAB实现曲面数据的可视化体数据的可视化曲面数据的可视化
表现标量特征 —等值线图
表现矢量特征 —矢量图等值线图等值线图通过将空间上一定范围内值相等的点依次连线来反映数据的分布特征。
用 contour函数生成二维等值线图。
用 contourf函数填充二维等值线图。
用 contour3函数绘三维等值线图。
矢量图矢量图用箭头显示图中各点处的矢量大小和方向。其中,箭头指示的方向为矢量的方向,箭头的长短表示矢量的大小。
用 quiver函数绘二维矢量图。
用 quiver3函数绘三维矢量图。
体数据的可视化
表现标量特征
表现矢量特征表现体数据的标量特征可以用剖面图、等值面图、等帽盖图等表现体数据的标量特征。下面左图为剖面图,右图为等值面图和等帽盖图的叠加。
表现体数据的矢量特征科学计算中往往会生成大量矢量数据,使用特定图形表现数据特征,具有直观、高效的特点。 MATLAB中提供的用于表现体数据矢量特征的图形有流线图、流管图、流沙图、流锥图、流带图和卷曲图等。 下面左图为流线图,右图为流锥图。
第 17章 图形用户界面设计图形用户界面开发环境 (GUIDE)
菜单控件对话框
GUI设计实例图形用户界面开发环境
启动 GUIDE
输出编辑器
GUIDE模板
菜单编辑器
对象属性查看器
位置调整工具
对象浏览器
Tab顺序编辑器
运行 GUI
GUI FIG文件和 M文件启动 GUIDE
在命令窗口中键入 guide,启动 GUIDE,显示下图所示的,GUIDE Quick Start‖对话框。
输出编辑器在 GUIDE中打开 GUI以后,它显示在输出编辑器中。输出编辑器是所有 GUIDE工具的控制面板。
GUIDE模板
―GUIDE Quick Start‖对话框提供了几种基本类型的 GUI模板。使用模板的好处是可以通过修改模板来快速创建 GUI。选择一种模板以后,它的预览效果显示在右面的面板中。
菜单编辑器利用菜单编辑器,可以创建、设置、修改下拉式菜单和弹出式菜单。在 GUIDE中单击工具栏上的按钮,或者选择,Tools‖菜单中的,Menu
Editor…‖ 选项,打开菜单编辑器的界面,如下图所示。
对象属性查看器利用对象属性查看器,可以查看每个对象的属性值,
也可以修改、设置对象的属性值,从对象设计编辑器界面工具栏上选择,或者选择,View‖菜单下的
,Property Inspecter‖选项,
打开对象属性查看器,如右图所示。
位置调整工具利用对象对齐工具,可以很方便地对对象设计编辑器中对象设计区内多个对象的位置进行调整。
从对象设计编辑器界面的工具栏上选择按钮,
或者选择,Layout‖菜单下的,Align Objects…‖
选项,可以打开对象位置调整器,如下图所示。
对象浏览器利用对象浏览器,可查看当前设计阶段的各个句柄图形对象。从对象设计编辑器界面的工具栏上选择,或者选择,Tools‖菜单下的,Object
Browser‖选项,可以打开对象浏览器,如下图所示。
Tab顺序编辑器利用 Tab顺序编辑器,可以设置用户按下键盘上的 Tab键时,对象被选中的先后顺序。单击工具栏上的按钮,或者选择,Tools‖菜单下的
,Tab Order Editor…‖ 选项,可以打开 Tab顺序编辑器,如下图所示。
运行 GUI
从,Tools‖菜单中选择,Run‖选项,或单击按钮,运行 GUI。
GUI FIG文件和 M文件
GUIDE把 GUI保存在两个文件中,它们在第一次保存或运行时生成。一个是 FIG文件,扩展名为 fig,它包含对 GUI和 GUI
控件的完整描述;另一个是 M文件,扩展名为 m,它包含控制 GUI的代码,包括其控件的回调。
菜单
创建菜单用命令行方式创建用 GUIDE的菜单编辑器创建
菜单的属性控件
控件的对象类型
创建控件
工具栏控件的对象类型
GUIDE提供的基本控件类型如下图所示。
创建控件
用命令行方式创建在命令行方式下,可以通过函数 uicontrol来建立控件对象。
用 GUIDE创建在 GUIDE设计环境下,通过鼠标拖拉即可完成控件的创建。
工具栏
用 uitoolbar函数创建空白的工具栏。
用 uipushtool函数在工具栏上添加命令按钮。
用 uitoggletool函数创建开关按钮。
对话框
一般对话框文件打开对话框 文件保存对话框颜色设置对话框 字体设置对话框打印页面设置对话框 打印预览对话框打印对话框
公共对话框帮助对话框 出错信息显示对话框信息提示对话框 问题显示对话框警告信息显示对话框 变量输入对话框列表显示对话框
GUI设计的主要步骤
设计 GUI
完成 GUI
设置 GUI控件的属性
GUI编程
保存和运行 GUI
第 18章 文件操作文件的打开、保存和关闭读写文本文件读写二进制数据文件使用 ImportWizard工具文件的打开、保存和关闭
使用 open函数,可以根据扩展名打开文件。
也可以用 fopen函数打开文件。
用 save函数将工作空间中的变量保存到磁盘文件中。
用 fclose函数关闭一个或更多已经打开的文件。
读写文本文件
使用 load函数,可以将文件中的数据导入到工作空间。
用 csvread和 csvwrite函数实现逗号间隔的文本文件的读写。
用 dlmread函数将指定间隔方式的文本文件读入矩阵。
读写二进制数据文件
使用 load函数。
用 fread函数从文件中读取二进制数据。
用 fwrite函数将二进制数据写入文件。
使用 ImportWizard工具
Import Wizard是 MATLAB提供的一个导入数据的工具。利用该工具,可以将 MAT
文件数据,Excel数据、文本数据、图像数据、声音数据甚至 AVI数据导入到
MATLAB中。
第 19章 编译与接口
MATLAB编译器
MATLAB与 Visual Basic接口
MATLAB与,NET程序接口
MATLAB编译器使用 MATLAB编译器可以生成独立应用程序、库,Excel插件,COM对象,.NET组件和 Java组件等。
使用部署工具进行编译
使用 mcc进行编译使用部署工具进行编译部署工具如下图所示。该工具是 MATLAB最近的版本推出来的,它将可执行程序、库和组件的编译任务集成到一个统一的编译环境下。
使用 mcc进行编译
mcc是调用 MATLAB编译器的 MATLAB命令,可以从 MATLAB命令行或 DOS命令行发出 mcc命令。
MATLAB与 Visual Basic接口
MATLAB与 Visual Basic接口可以有多种手段,从传统的 DDE,OLE到 ActiveX控件、
COM组件技术等都可以使用。本书主要介绍 MATLAB的,NET生成器,利用它生成 COM组件,并实现与 Visual Basic的接口。 详细内容请参见 19.2节。
MATLAB与,NET程序接口使用,NET生成器,还可以生成,NET组件,
用于,NET程序中。 详细内容请参见 19.3
节。