第1讲 MATLAB初步
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。MATLAB和Mathematica、Maple并称为三大数学软件。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解决问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
1 Matlab函数一般调用格式:功能命令(操作对象,操作选项)。
功能命令是MATLAB软件的产品,指的是需要完成的任务所对应的函数。
操作对象一般为数值、函数、普通方程、微分方程、矩阵表达式等;
操作选项,也称为指定格式,一般为操作对象的控制选项。
(操作对象,选项)就是功能命令的语法。不同的函数,语法要求不一样,这是学习Matlab的重点和难点。学习下面例子,初步掌握Matlab函数使用特点。
1)一元函数绘图:syms x;fplot(x.*sin(x),[-pi,pi])
练习:
;
2)不定积分:syms x;int(x)
练习:
3)求定积分:syms x;int(sym(x^2*sin(x)),0,1)
练习:
;
2 Matlab常见的编辑
2.1 删除
clc:删除Command窗口里内容;
clear:删除当前目录里所有变量;
clear+变量:删除Command窗口里指定变量;
clearvars -except x y:清空指定变量之外的变量(只保留指定变量x,y.注意:except前有 ‘-’);
clf:删除所有图形;
clf(1):删除第一幅图;
close all:关闭所有画图figure窗口;
2.2 切换路径
先建立一个文件夹,把本次操作的内容全部放在指定硬盘的某个文件夹里。右击文件夹的属性,复制位置中的路径,形如下图。
切换方式1:cd E:\张三matlab
切换方式2: cd(' E:\张三matlab ')
更改默认路径:右击左面matlab属性,更改起始位置即可。如图所示。
练习:1)切换路径到D盘文件夹“Matlab学习”
2)切换路径到E盘文件夹“强大的Matlab”
2.3 Matlab换行
形式1:shift+enter换行,只能一个或若干个执行语句一行。若执行语句过长,不方便错误检查,这是需要换行。MATLAB软件不能自动换行。
形式2:使用…,可任意位置换行,形如
>> x=0:0.1:2*pi; ...
y=sin(x);plot(x,y)
2.4 语句运行
(1)若运行Command窗口里语句,直接回车表示运行;
(2)若运行m文件窗口语句,按“run”或F5
(3)若运行m文件窗口选中的语句,按F9。
2.5 其它编辑
各窗口的字体调整:File,Preference,fonts,custom,font to use
出现OVR被激活:按Insert消除
中止程序运行:Ctrl+C或Ctrl+Break
程序语句后面添加说明部分:%后面跟说明语句
退出Command窗口里的输入,按Esc键或回车键。
查看函数程序:Edit+函数
数值解的显示:如vpa(pi,10) 显示变量的精度
关闭科学计数法:format short g format long g
exit:退出matlab
sym(f(x)):给出f(x)的符号表达式,>> sym(0.3/0.8) ans =3/8
3 函数表达式
3.1 基本初等函数
幂函数:x^a,
指数函数:
,a^x
对数函数:lnx=log(x),lgx=log10(x),
三角函数:sin(x),cos(x),tan(x),cot(x),sec(x),csc(x)
反三角函数:直接在对数函数前家a,形如asin(x)
特殊函数:
,sign(x)
随堂练习:计算下列函数值
3.2 符号函数表达式
◆注意:先syms定义,后使用
syms x y %定义为符号x y变量,通过whos可以看出变量类型
whos f(x,y) %定义x y为符号变量,定义f为符号函数
1) syms f(x); f(x)=x*sin(x); a=f([1 2 3])
a =[ sin(1), 2*sin(2), 3*sin(3)]
2) syms f(x,y); f(x,y)=x^y*sin(x); f(x,2)
ans =x^2*sin(x) f(2,3)=8*sin(2)
3) syms f(x,y); f(x,y)=x^y*sin(x);fplot(f(x,2),[-pi,pi])
4) syms f(x,y); f(x,y)=x^y*sin(x);diff(f(x,y),x)
ans =x^y*cos(x) + x^(y - 1)*y*sin(x)
5) syms f(x,y); f(x,y)=x^y*sin(x); int(f(x,y),y)
ans =(x^y*sin(x))/log(x)
3.3 匿名函数表达式
匿名函数格式:f=@(x)f(x)
其中@(x)是匿名函数格式,x表示函数自变量。
应用:高频调用函数,复杂的复合函数书写,采用匿名函数非常方便。
缺陷:匿名函数是局部,只能在局部调用,自编函数体内不能调用它。
注意:分段函数最好用匿名函数表达式,切记!
◆
的匿名函数:y=@(x)sin(exp(x)+x^2)
常见调用格式:①y(1.2)=0.9999
②diff(y(x))= cos(exp(x) + x^2)*(2*x + exp(x))
③a=int(y(x),1,2);vpa(a,5)=-0.21258
随堂练习:编写下列函数的匿名函数,并计算对应问题。
2)
,求
对应的函数值
求
3)
,一次性求
的函数值。
画图
3.4 自编函数
以
为例。自编函数只能在M文件窗口里编写。
function f=zz(x);
f=sin(log(exp(x)+x^2));
其中(1)function是函数文件的标志,必须有。
(2)zz是函数名,如同正弦函数名sin一样。取名规则为:函数名与文件名同名;函数名不能与已知变量、已知函数名同名,函数名首字必须为字母,其后可以跟字母、数字、下划线。
(3)f是传递变量,最终的函数表达式必须形如上述形式传递给f才能有效。f不是固定变量,可根据自己偏好选择。
(4)自编函数在绝大多数场合下可以被调用,如匿名函数里,其它自编函数里等。
随堂练习:编写下列函数的m文件,并做相应计算
1)
,一次性求
的函数值。
画图
.
2)
,求
对应的函数值,求
3)数据函数data(k),k=1表示数据1,…;
第2讲 数组及其运算
1 数组生成
模式1:直接输入,如
模式2:
,若
,可省略
模式3:X=linspace(first,last,n)
模式4:从txt,excel里直接复制
模式5:函数生成,如zeros,ones,rand,randn,eye,normrnd等。
随堂练习1
1)直接输入数组
2)在区间[0,1]上用linspace生成20个元素的数组。
3)在
上增量为0.15生成数组
4)从word、txt、Excel里复制数据生成数组。
5)利用zeros,ones,rand,randn,eye,normrnd生成数组。
6)生成数组1,2,3,…,100;生成数组2,4,6,…,100
2 数组的拆、并、调等运算
设生成数组
,则x不仅表示数组名,还表示变量名函数,即下标函数。因为变量名函数的作用,对数组操作非常方便。可以认为,Matlab软件的灵活性,完全体现在变量名函数使用的灵活性。常见的数组操作有
(1)提取x中的部分元素:如
等
(2)删除x中的部分元素:如
(3)替换x中的部分元素:如
(4)拆分x:如
(5)合并两数组a,b:c=[a,b],其中a,b为一行数组
(6)插入新元素:如
(7)翻转x:fliplr(x)
,或x(n:-1:1)
随堂练习2
1)生成数组a =[ 8.1, 9.1, 1.3, 9.1, 6.3, 0.98, 2.8, 5.5]
b =[ 3.6, 2.8, -1.3, 3.0, 0.73]
2)删除
的第3、7位置元素得数组A2。
3)替换
的第1,3,7位置元素为1,3,7,得数组A3。
4)把
的第2、4、9位置元素提取为新的数组A4。
5)把
的第3、7位置元素与
合并为一个新的数组A5。
6)在
的第3、4位置元素之间插入元素-15,得新的数组A6。
7)在
的第3、4位置元素之间插入数组b,得新的数组A7。
8)前后翻转
,得数组A8。
3 数组的四则运算:点运算(对应的元素进行计算)
◆设
均为数组,数组的点运算规则如下
先演示,再重复:
设
,求
随堂练习3:利用点运算生成新数组
4 数组的关系运算(全部适用于矩阵)
关系运算反映的是两矩阵元素之间的数值关系,运算符为:
关系运算的结果是:0或1。1表示关系成立;0表示关系不成立。
4.1 “= =”关系:是否相等关系
>> a=[1 2 3];b=[1 2 4];c=a==b; c = 1 1 0
4.2 “~ =”关系:是否不等关系
>> a=[1 2 3];b=[1 2 4];c=a~=b; c = 0 0 1
4.3 同样,还有如下关系:“
”关系
4.4 逻辑且,&:
>> x=[1 2 3 4];y=[0 3 2 8];x>2&y>2
ans = 0 0 0 1
4.5 逻辑或,|:
>> x=[1 2 3 4];y=[0 3 2 8];x>2|y>2
ans = 0 1 1 1
演示:a =[-4.0,-15.0,7.2,1.6,-3.8,6.9,-8.6,-0.51,-1.2,1.6]
生成新数组A,满足
A=(a<-2)*(-2)+(a<=2&a>=-2)*1.5+(a>2)*2
A =[-2.0,-2.0,2.0,1.5,-2.0, 2.0,-2.0,1.5,1.5,1.5]
随堂练习4
设x=[2.1 -3.2 4.5 2.8 -2 3.5 6.8 2.4 5.3 -5],求
1)生成新数组A1,若
,则
,否则为-2.5;
2)生成新数组A2,若
,则
;否则为0。
3)生成新数组A3,若
,则
;
若
,则
;否则
随堂练习5
1)产生10个随机数
,
满足
2)产生10个随机数
,
满足
。
提示:a=rand;x=(a<0.2)*2.3+(a>=0.2&a<0.5)*3.2+(a>=0.5)*4.5
3)设某分段函数如下,计算x=linspace(-pi,pi,50)对应的函数值,请绘图。
5 数组的集合运算
(1)加法运算 c=union(a,b),即
(2)减法运算 C=setdiff(a,b),即
(3)乘法运算 [c,x,y]=intersect(A,B),c是交集元素,x,y是交集元素在A,B中的位置
(4)补集加法运算 C=setxor(a,b),即
(5)剔除数组中重复的元素 C=unique(a)
(6)剔除矩阵中重复的行 C=unique(a,’rows’)
(7)ismember(x0,x):成员识别
随堂练习9
1)设a=[1,2,3,1,2,5],剔除a中重复的元素; unique(a)
2)设A=[1,2,3,1,2,5],B=[1,5,7],求集合运算A+B、A-B、AB
3)设A=[1,2,3,1,2,5],B=[1,5,7],C=[1,3,5,9],求A+B+C,A+B-C
4)设a=[7,3,4,7,3,1,3,2,1,3,5,5,4,5,6,1]
若
,则
;否则
;提示:ismember
提示:k=ismember(a,[1 2 3]);b=-3*k+3*(1-k)
5)若
,则
;若
,则
;否则为5
6 数组的和sum(x):求数组的和
随堂练习10
1)设x =[0.32,-0.56,-0.31,-0.57,-1.0, -0.91,-0.21,-1.7],求
、
、
、
、
2)设x =[ 0.32, -0.56, -0.31, -0.57, -1.0, -0.91, -0.21, -1.7],
y =[ 0.61, -0.12, 0.7, 0.27, 0.49, -1.5, -1.0, -0.45]
求
、
、
3)求下列表达式
4)求下列表达式
5)求下列表达式
6)圆周率的近似计算
利用
,计算n=50时
的近似值。
7)
的近似计算
利用
,计算n=100时
的近似值。
8)
的近似计算
利用
,求
的近似值。
9)
,计算n=50时
的近似值。
10)
,计算n=50时
的近似值。
6 数组运算的常见函数
◆max(a),min(a):最数组的最大值,最小值
sum(a):求数组的和
length(x): 求x的维数;若x是矩阵,则length(x)是列数。
prod(a):求数组的积
mean(a):求向量a的元素的平均值
median(x):求向量x的元素的中位数,若x维数是奇数,则中间位置的数就是中位数;否则,中间两个数的平均数就是中位数。
harmmean(x):调和平均值,harmmean(x)=
geomean(x):求几何平均数,geomean(x)=
std(x):无偏型标准差 std(x,1):有偏型标准差
var(x):无偏方差 var(x,1):有偏方差
mad(x):绝对平均偏差,mad(x)=
range(x):样本极差,range(x)=
norm(x):norm([x1,x2])=
如norm([3 4])=5
tril(a):生成a的下三角阵
triu(a):生成a的上三角阵
diag([a b c]):以a,b,c为对角线元素构成的对角阵
sort(a):对数组升序
nnz(A):矩阵或数组非零元素总个数
nonzeros(A):剔除0元素后剩下元素形成的数组
reshape(a,m,n):把数组a变成m行n列矩阵,一列一列赋值。
如a=[1:15],则reshape(a,3,5)为
>> reshape(1:15,3,5)
ans =
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
repmat(A,m,n):将矩阵A复制m×n块
find(a满足的条件):给出符合条件的元素位置
factorial(n):等于n!
prod(x):等于
gamma(n+1):等于n!
nchoosek (x,m):若x是数组,则表示从x中的元素选m个的所有组合
若n是一个数值,则nchoosek (n,m)表示组合数
>> nchoosek(5,2) ans =10
>> nchoosek(1:3,2)
ans =
1 2
1 3
2 3
>> nchoosek('abc',2)
ans =
ab
ac
bc
◆perms(x):计算所有全排列
>> perms('abc')
ans =cba cab bca bac abc acb
◆randperm(n):对1:n的一个随机排列
>> randperm(5)
ans = 4 5 2 1 3
◆unidrnd(k,m,n):在
上等可能取值m行n列个随机数
>> unidrnd(20,1,8)
ans =4 14 7 18 3 20 11 15
◆permsnk([1 2 3],2):部分排列(自编)
ans =
2 1
1 2
3 1
1 3
3 2
2 3
permsnk('abc',2):部分排列
ans =ba,ab,ca,ac,cb,bc
取整命令
round(x):四舍五入取整
ceil(x):往+∞方向取整
floor(x):往-∞方向取整
fix(x):向0方向取整
rem(x),mod(x):求余
isprime(x):质数识别
primes(20):产生质数
ans =2 3 5 7 11 13 17 19
seqperiod(p):求序列的最小正周期。
>> seqperiod(repmat([1 2 3],1,5)) ans =3
各类识别
isequal(x,y):两数组是否相同识别
ismember(x0,x):成员识别
奇数、偶数识别:奇数:mod(n,2)==1 偶数:mod(n,2)==0
isspace:若是空格则为真
isnumeric:若是数值数组则为真
isempty(a):若a是空矩阵,则为真;
isnan(a):若a= NaN,则为真,否则为0;
isreal:若是实数则为真
第3讲 矩阵及其运算
1 矩阵生成
模式1:直接输入,形如
模式2:从txt,excel里直接调用,同前所述
模式3:函数生成:zeros,ones,rand,randn,eye,normrnd等。
随堂练习:
1)生成如下矩阵
2)学习从word里、Excel、txt里复制数据;
8.9 | 14.4 | -1.0 | -0.3 | -8.6 | 15.3 |
-11.5 | 3.3 | -2.4 | -1.6 | 0.8 | -7.7 |
-10.7 | -7.5 | 3.2 | 6.3 | -12.1 | 3.7 |
-8.1 | 13.7 | 3.1 | 10.9 | -11.1 | -2.3 |
-29.4 | -17.1 | -8.6 | 11.1 | -0.1 | 11.2 |
3)生成[0,1]上均分分布的随机数,存放在
矩阵上;
4)利用命令生成矩阵
生成
的0矩阵,zeros
生成
的1矩阵,ones
生成
的[0,1]上均分分布的随机数矩阵,rand
生成
的标准整体分布矩阵, randn
生成
的正太分布
矩阵,
生成
的
上均匀分布矩阵,
生成
的离散均匀分布矩阵,
2 矩阵常见的运算:类似数组运算,略。
3 矩阵的查询运算:find(a满足的条件)
3.1 形式1:查找结果为矩阵展开a(:)后的数组位置
假设矩阵a为
1 | 2 | 3 | 4 |
2 | 3 | 4 | 5 |
1 | 3 | 5 | 7 |
>> k=find(a==2)
k= k是a列展开后棉组条件的数组位置
2
4
3.2 形式2:查找结果为行列坐标的位置
>> [i,j]=find(a==2);[i,j]
i = 行标位置
2
1
j = 列标位置
1
2
3.3 布尔矩阵查找(非常重要)
b=[1,1,0,1,1;1,1,1,0,0;0,0,1,1,1];
随堂练习:设矩阵A的元素如下,求
8.9 | 14.4 | -1.0 | -0.3 | -8.6 | 15.3 |
-11.5 | 3.3 | -2.4 | -1.6 | 0.8 | -7.7 |
-10.7 | -7.5 | 3.2 | 6.3 | -12.1 | 3.7 |
-8.1 | 13.7 | 3.1 | 10.9 | -11.1 | -2.3 |
-29.4 | -17.1 | -8.6 | 11.1 | -0.1 | 11.2 |
1)A的最大值、最小值位置
2)A小于0的元素位置
4 矩阵排序:sort,sortrows
sort(A,1):A的所有列升序排列;
sort(A,2):A的所有行升序排列;
sort(A):仅A的第1列升序排列,其它各元素位置不变;
sortrows(A,k):对A的第k列升序排列,其它各行随动
(且每行的元素相对位置保持不变)。
随堂练习:
A=[5,-1,-3,3,-13,5;0,-7,-8,-13,-23,-1;0,14,-11,-9,-14,2;-8,-2,25,-2,3,-5;10,-6,17,8,4,9];
5 | -1 | -3 | 3 | -13 | 5 |
0 | -7 | -8 | -13 | -23 | -1 |
0 | 14 | -11 | -9 | -14 | 2 |
-8 | -2 | 25 | -2 | 3 | -5 |
10 | -6 | 17 | 8 | 4 | 9 |
sortrows(A,1)结果如下:
-8 | -2 | 25 | -2 | 3 | -5 |
0 | -7 | -8 | -13 | -23 | -1 |
0 | 14 | -11 | -9 | -14 | 2 |
5 | -1 | -3 | 3 | -13 | 5 |
10 | -6 | 17 | 8 | 4 | 9 |
练习:第2列升序,其它各列随动
第3行升序,其它各行随动
5 数组运算的常见函数: 设A,B均为矩阵
A(:):矩阵A展开为一列数组
max(A),min(A):得矩阵每列的最大值,最小值
max(A(:)),min(A(:)):得矩阵的最大值,最小值
sum(A):得矩阵每列的和;
sum(A(:)):得矩阵所有元素的和
mean(A):得矩阵每列的平均值
mean (A(:)):得矩阵所有元素的平均数
prod (A):得矩阵每列的乘积
unique(a,'rows'):剔除矩阵中的重复行
reshape(a,m,n):把数组a变成m行n列矩阵,一列一列赋值。
如a=[1:15],则reshape(a,3,5)为
>> reshape(1:15,3,5)
ans =
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
repmat(A,m,n):将矩阵A复制m×n块
tril(A):生成A的下三角阵
triu(A):生成A的上三角阵
diag([a b c]):以a,b,c为对角线元素构成的对角阵
nnz(A):矩阵或数组非零元素总个数
nonzeros(A):剔除0元素后剩下元素形成的数组
isequal(x,y):两数组或矩阵是否一样,得0或1。
ismember(x0,x):成员识别
A(end:-1:1,:)或flipud(A) :矩阵上下翻转
A(:,end:-1:1)或fliplr(A):矩阵左右翻转
rot90(A,n):矩阵的旋转
sort,sortrows:排序
sortrows(A,k):对A的第k列升序排列,其它各行随动(每行的元素保持不变)。
sort(A):仅A的第1列升序排列,其它各元素位置不变;
sort(A,1):A的所有列升序排列;
sort(A,2):A的所有行升序排列;
det(A):求A的行列式;
rank(A):求A的秩
trace(A) :求A的迹
inv(A):求A的逆矩阵
length(x): 若x是数组,则length(x)是维数;若x是矩阵,则length(x)是列数。
size(A,1)表示矩阵A的行数,size(A,2)表示矩阵A的列数。
size(A):显示A的行数和列数
null(A):得到
标准正交化的基础解系
null(A,'r') :得到
有理形式的基础解系
rref(A):得A的行最简矩阵
orth(a) : 列向量组的标准正交化
zscore(x):标准化
若
是矩阵,则zscore(x)=
;若x是矩阵,则zscore(x)是各列标准化的结果。
corrcoef(A):矩阵A各列相关系数矩阵
cov(A) :矩阵A各列协方差矩阵
eig(A):%求矩阵A的特征值、特征向量
eigs(A):%求矩阵A的特征值、特征向量,最多给出6个特征值;
一个完整的图形,应该包括基本图形和图形属性两部分。基本图形由图形数据和所需要的图形形状共同决定。图形数据通常由函数或方程产生,有些数据是直接观测的数据。图形形状源于实际需求,Matlab可画的常见的平面图形形状如图1所示。图形属性指的是基本图形之外需要描述的部分,如线的粗细、颜色、线形等;点的形状、颜色等;坐标轴控制等,添加文本说明(text,gtext),添加标题(title)、图形识别(legend)等等。图形属性可在图形函数里直接操作,也可以通过图形句柄操作,或在图形窗口中操作。
2 连线绘图
常见的平面连线图函数为plot,fplot,本讲重点介绍plot函数。
◆ plot语法
2.1 画基本图形
6)已知平面三点
,连线三点画三角形
7)画中心为原点,其中一边与
轴平行且边长为4的正方形。
2.2 Line的颜色、线型、线宽(粗细)控制
1)线颜色控制
语法类似:p.Color='r',或者 plot(x,y,'r')
2)线型控制:p. LineStyle='-' 或者 plot(x,y,'--')
◆注意:颜色与线型可以放在一起控制,如plot(x,y,'r--')
3)线宽控制:LineWidth
语法类似:数值越大表示线越粗。
h.LineWidth=5,或者plot(x,y,'LineWidth',5)
2.3 点Marker的控制(散点图中的点)
1)点的类型
语法:plot(x,y,'o')
◆注意:颜色、线型、散点类型可以放在一起进行控制,如
plot(x,y,'r--o')
2)散点的大小MarkerSize
语法类似:p. MarkerSize=5,或者plot(x,y,'MarkerSize',5)
3)散点的边界颜色MarkerEdgeColor
语法类似:p. MarkerEdgeColor=’r’
4)散点的填充颜色MarkerFaceColor
语法类似:p. MarkerFaceColor=’r’
3 用fill函数画出下列基本图形。
4 用bar,barh画如下图形。
5 画如下饼图
6 画如下阶梯图
7 散点图(略)
用text在散点上添加数字。
x =linspace(-pi,pi,10);y=sin(x);plot(x,y,'-ro');
for i=1:10;a=sprintf('%0.2f',y(i));text(x(i),y(i),num2str(a));end
axis([-pi-1 1+pi -1 2])
8 三维绘图,视情况讲解。