(1) 如果是向量(无论是行向量还是列向量),都是直接求和
E =[1,2,3]
E =[1;2;3]sum(E)(2) 如果是矩阵,则需要根据行和列的方向作区分
E =[1,2;3,4;5,6]
按列求和(得到一个行向量)
a =sum(E)
a =sum(E,1)
按行求和(得到一个列向量)
a =sum(E,2)
对整个矩阵求和
a =sum(sum(E))
a =sum(E(:))
prod 函数(求积)
(1) 如果是向量(无论是行向量还是列向量),都是直接求积
E =[1,2,3]
E =[1;2;3]prod(E)(2) 如果是矩阵,则需要根据行和列的方向作区分
E =[1,2;3,4;5,6]
按列求积(得到一个行向量)
a =prod(E)
a =prod(E,1)
按行求积(得到一个列向量)
a =prod(E,2)
对整个矩阵求积
a =prod(prod(E))
a =prod(E(:))
max 函数(求最大值)
%% min 函数同理,就不讲了
(1) 如果是向量(无论是行向量还是列向量),都是直接求最大值
E =[1,2,3]
E =[1;2;3]max(E)% 无论行还是列,最大值都是 3
输出:3(2) 如果是矩阵,可以分别 求每行 和 求每列 的最大值
E =[1,2,3;4,5,6]max(E,[],1)% 求每列的最大值,也可以写成 max(E)
输出:456max(E,[],2)% 求每行的最大值
输出:36
median 函数(求中位数值)
(1) 如果是向量(无论是行向量还是列向量),都是直接求中位数值
E =[1,2,3]
E =[1;2;3]median(E)% 无论行还是列,中位数值都是 2
输出:2(2) 如果是矩阵,可以分别 求每行 和 求每列 的中位数值
E =[1,2,3;4,5,6]max(E,1)% 求每列的中位数值
输出:2.50003.50004.5000max(E,2)% 求每行的中位数值
输出:25
std 函数(求标准差)
标准用法:std (x, flag, dim)
x 代表向量或矩阵
flag 代表计算公差时要除以 n 还是 n-1 (flag =1 代表前者,flag =0 代表后者)
dim 代表维数 (dim =1 代表求列,dim =0 代表求行)
x =[1234;4561](1) 默认格式是 std(x,0,1)% 公差除以 n-1 并且求列
std(x)
输出:2.12132.12132.12132.1213(1) 自定义格式
std(x,1,2)
输出:1.11801.8708
skewness 函数(求偏度)
x =[...]% 数据
pd = skewness[x]% 结果 >0 称为右偏态,<0 称为左偏态
kurtosis 函数(求峰度)
x =[...]% 数据
fd = kurtosis [x]% 用作衡量偏离正态分布的尺度之一
size 函数(求长度)
A =[1,2,3;4,5,6]% 返回一个行向量,第一个元素是矩阵的行数,第二个元素是矩阵的列数
[r,c]=size(A)
输出: r =2
c =3% 将矩阵A的行数返回到第一个变量 r,将矩阵的列数返回到第二个变量 c
r =size(A,1)% 返回行数
c =size(A,2)% 返回列数
repmat 函数(复制)
A =[1,2,3;4,5,6]% 将矩阵A复制m×n块,即把A作为B的元素,B由m×n个A平铺而成
B =repmat(A,2,1)% 复制两行一列
输出:123456123456
B =repmat(A,2,2)% 复制两行两列
输出:123123456456123123456456
find 函数(查找元素)
(1) 如果是向量(无论是行向量还是列向量),都是直接返回非0元素的位置
X =[104-300086]
ind =find(X)
输出:13489
ind =find(X,2)% 返回前2个非0的元素的位置
输出:13(2) 如果是一个矩阵(二维,有行和列),则返回非0元素的列向量或坐标
X =[1-30;008;406]
ind =find(X)% 返回列向量
输出:13489[r,c]=find(X)
输出:
r =13123
c =11233[r,c]=find(X,1)% 只找第一个非0元素的坐标
输出:
r =1
c =1(3) 如果 find 函数中有比较参数,则返回指定的参数的位置
X =[104-300086]
ind =find(X >1)
输出:389
Y =[1-30;008;406][r,c]=find(Y >1)
输出:
r =323
c =133
sort 函数(排序)
A =[527;493;186]% 矩阵
B =[527493186]
C =[583617924]% 列表
(1) 按行排序
a =sort(A,2)
输出:257349168(2) 按列排序
a =sort(A,1)% 默认是按列排序
输出:123486597(3) 正序与倒序
a =sort(A,1,'ascend')% 默认是正序
输出:123486597
a =sort(A,1,'descend')% 倒序
输出:597486123(4) 索引
[b,index]=sort(B)% b 是排序结果,index 是索引
输出:
b =123456789
index =726419385% 索引
c =C(index)
输出:
c =987654321% c 的顺序与 b 的顺序一一对应
reshape 函数(矩阵换顺序)
A =[123;456]reshape(A,3,2)% 将矩阵 A 变成 3 行 2 列(按照原矩阵的列读取)
ans =[15;43;26]
isempty 函数(判断空矩阵)
%% 可以用来判断矩阵是否为空, 如果矩阵为空,返回逻辑值 1(true),否则返回逻辑值 0(false)isempty(find([0,0,0,0,0]))% find 函数未找到非 0 值返回空矩阵
ans =1isempty(find([0,1,0,0,1]))% find 函数找到非 0 值返回矩阵 [2,5]
ans =0isempty([0,0,0,0,0])% 参数中的矩阵不是空矩阵,而是值全为 0 的行矩阵
ans =0
A =[100;010;001]det(A)
ans =1
B =[1-24;-520;103]det(B)
ans =-32
mean 函数(求平均值)
A =[123;336;468;477](1) 求列项平均值
mean(A)% 也可以用 mean(A,1) 代替
输出:ans =3.00004.50006.0000(2) 求行项平均值
mean(A,2)% 求行项
输出:
ans =2.00004.00006.00006.0000
roundn 函数(四舍五入)
a =3.1445
b =31445roundn(a,-2)% a 在小数点后两位 四舍五入
输出:
ans =3.1400roundn(a,2)% a 在十位 四舍五入
输出:
ans =0roundn(b,1)% b 在个位 四舍五入
输出:
ans =31450roundn(b,2)% b 在十位 四舍五入
输出:
ans =31400
rand 函数(生成均匀分布随机数)
s1 =rand(1,5)% 产生一个 0 至 1 之间的随机矩阵,大小为 1 x 5
ans =[0.81470.90580.12700.91340.6324]
s2 =2+(5-2)*rand(1,5)% 产生一个 2 至 5 之间的随机矩阵,大小为 1 x 5
ans =[2.29262.83553.64064.87254.8947]
randi 函数(生成均匀分布随机整数)
s1 =randi(10,2,5)% 产生一个 1 至 10 之间的随机矩阵,大小为 2 x 5
ans =[21095810521010]
s2 =randi([-5,5],1,10)% 产生一个 -5 至 5 之间的随机矩阵,大小为 1 x 10
ans =[2-545233-12-4]
randperm 函数(生成随机序列)
randperm(5)
ans =[14532]% 仅含不同的 1-5 的全部数字
randperm(5)
ans =[35124]% 仅含不同的 1-5 的全部数字
%% 先说明匿名函数的基本用法
z = @(x,y) x^2+y^2;% z 为调用匿名函数时使用的名字 x、y 为输入参数,可以是一个,也可以是多个,用逗号分隔
z(1,2)
输出:
ans =5
k = @(x) x+2;% 原理同上
k(3)
输出:
ans =5%% fplot 函数用于画出匿名一元函数的图形
fplot(z,[1,2]);% z 为匿名函数,[1,2]表示定义域区间
fplot(k,[3,4]);% 原理同上
xlabel 函数 和 ylabel 函数(加上 x、y 轴标题)
plot(...)xlabel('x 轴标题')% 在每个 plot 后面加上此函数,表示 x 轴标题
ylabel('y 轴标题')% 在每个 plot 后面加上此函数,表示 y 轴标题
(1) 计时
tic
a =2^100
toc % 记录中间代码的运行时间
(2) 延时
pause(3)% 暂停 3 秒后再继续接下来的命令
(3) 关闭
close % 关闭图形窗口
五、其他操作
自定义函数
自定义函数都是单独的一个文件,但是可以在别的文件中使用(前提是在同一个文件夹中)
(1) 无返回值的函数
function mysum(n)% mysum 是函数名
s=0;for i =1: n
s=i+s;
end
disp(s)% 直接输出 s
end
>>mysum(3)6(2) 有返回值的函数
function result =mysum(n)% mysum 是函数名,result 是返回值
s=0;for i =1: n
s=i+s;
end
result = s;% 输出返回值 result
end
>> a =mysum(3)6
A =[123;221;203]inv(A)
输出:-0.42860.42860.28570.28570.2143-0.35710.2857-0.28570.1429
求特征值和特征向量
A =[123;221;203](1) 求矩阵A的全部特征值,构成向量E
E =eig(A)
输出:-1.31665.31662.0000(2) 求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量
(V的每一列都是D中与之相同列的特征值的特征向量)
[V,D]=eig(A)
输出:
V =0.8364-0.6336-0.2408-0.3875-0.5470-0.8427-0.3875-0.54700.4815
D =-1.31660005.31660002.0000
查看矩阵存储方式
A=[123;456;789];A(4)% 查找元素4的位置
输出:2A(8)% 查找元素8的位置
输出:6A(9)% 查找元素9的位置
输出:9
说明矩阵是按列存储的,如下方式存储
A =123456789
矩阵与常数的大小判断运算
X =[1-30;008;406]
X >0
输出:100001101
X ==4
输出:000000100[156080-5]==0
输出:0001010
输出一段数字加文字
a =1;disp([num2str(a)'45'])
输出:145
矩阵相乘
%% 两个矩阵相乘得出的矩阵的长宽是前行后列
举例一
a =[123;456]% 两行
b =[12;34;56]% 两列
a * b =[2228;4964]% 两行两列
举例二
c =[1;2;3]% 三行
d =[456]% 三列
c * d =[456;81012;121518]% 三行三列
矩阵间的吞入
tmp =[1112131415]
temp =[124]tmp(temp)
ans =[111214]% 相当于输出 tmp([124])