通用命令
clear :清除工作区中的变量;
clc:清除命令行窗口中的内容;
cd:显示或改变工作路径;
dir:显示当前工作路径下的文件;
help:显示帮助文档;
helpwin:在帮助窗口显示帮助文档;
who:显示当前变量;
>> help cos
cos - 以弧度为单位的参数的余弦
此 MATLAB 函数 返回 X 的每个元素的余弦。cos 函数按元素处理数组。该函数同时接受实数和复数输入。 对于 X 的实数值,cos(X) 返回区间
[-1, 1] 内的实数值。 对于 X 的复数值,cos(X) 返回复数值。
whos:变量详细情况;
what:显示指定路径下的matlab文件;
which:显示函数或文件的位置信息;
>> which pinv
D:\Program Files\Polyspace\R2019b\toolbox\matlab\matfun\pinv.m
type:显示指定的M文件;
lookfor:搜索关键词相关的函数,
>> lookfor pca
ipcam - Creates ipcam object to acquire frames from your IP Camera.
mapcaplot - creates a Principal Component plot of expression profile data.
pca - Overload Principal Components Analysis for DataMatrix objects.
zigbeeExportToPcap - Export MAC frames into PCAP (packet capture) file
永久变量
pi
>> pi
ans =
3.14159265358979
eps
>> 1+eps #eps两个不同浮点数之间的最小距离,2^-52
% 计算 1+eps(比 1 大“一点儿”),并赋给 ans
ans =
1
nan
NaN
inf
>> 1/0
ans =
Inf
i或j
realmin
realmax
数据显示方式:format
>> a=[pi 2;0.1,38.3]
>> format long
>> a
a =
3.141592653589793 2.000000000000000
0.100000000000000 38.299999999999997
>> format rational
>> a
a =
355/113 2
1/10 383/10
算术运算
format
A = [1 2; 3 4] % A 为矩阵
B = [5 6; 7 8] % B 也是矩阵
C1 = A + B % 矩阵加
C2 = A * B % 矩阵乘
C3 = A/B % 矩阵除,相当于 A * B^(-1)
C4 = A\B % 矩阵左除,相当于 A^(-1) * B
C5 = 3 * A % 矩阵的数乘运算
D1 = A^2 % 矩阵的平方,相当于 A * A
D2 = A^(-1) % 求 A 的逆矩阵
D3 = A^(-2) % 相当于 A 的逆矩阵的平方
D4 = B * D2 % 等价于 B/A
矩阵变换函数
A = [1 2 3 4; 5 6 7 8]
A1 = fliplr(A)
A2 = flipud(A)
A2 = flipdim(A, 1) % 第 1 维为行,即上下翻转
A2 = flipdim(A, 2) % 第 2 维为列,即左右翻转
A3 = rot90(A) % 逆时针翻转 90 度
其他函数
a = [5 1 2 3 7];
x0 = min(a)
size(a) % 求 a 的行数和列数
x1 = [max(a) mean(a) sum(a) prod(a) length(a) numel(a)]
s1 = sort(a) % 从小到大排序,即升序排序
s2 = sort(a, descend) % 降序排序
y1 = [cumsum(a); cumprod(a)]
y2 = diff(a) % 计算相邻元素的差
p = [1 2 3]; q = [4 5 6];
dot(p, q) % 计算向量 p 和 q 的内积
b = [1 2 1 3 5];
unique(b) % 返回由 b 中不同元素构成的向量
以上都是以向量为例的.事实上,这些函数也可以对矩阵进行运算.
需要说明的是,多数函数对矩阵进行运算就是对矩阵中每一个列向量进行运算.
如果需要对矩阵的行进行相关运算,可以先对矩阵进行转置再运算,也可以通过设置参数直接对行进行运算.
a = [1 2 3; 4 5 6];
b = [7 8 9; 3 2 1];
max(a) % 每个列向量里的最大值
max(a, [], 2) % 每个行向量里的最大值
sum(a) % 每个列向量的和
sum(a, 2) % 每个行向量的和
length(a) % 矩阵中行数和列数的最大值
c = size(a) % 矩阵的尺寸(行数和列数)
dot(a, b) % 两个矩阵中对应的列向量做点积运算
逻辑运算
t = 1 : 10 % 生成 1 到 10 的整数向量,并赋给变量 t
t >= 3 & t < 6 % 元素值在 [3, 6) 上时结果为 1,否则为 0
t < 3 | t >= 7 % 元素值小于 3 或大于等于 7 时结果为 1,否则为 0
~(t < 3 | t >= 7) % 取反,等同于 t >= 3 & t < 7
一个数组对另一个数组索引
A =5:5:50
B=[1 3 6 7 10];
A =rand(5)
B=A>0.5;%(超过0.5的设为0)
结果
B =
5×5 logical 数组
1 0 0 0 1
1 0 1 0 0
0 1 1 1 1
1 1 0 1 1
1 1 1 1 1
A(B) =0 %逻辑数组
关系运算
A = [1 2; 2 3]; % A 为矩阵
B = [3 2; 1 2]; % B 也是矩阵
Z1 = A==B
Z2 = A>=B
Z3 = A<B
当 x=4x=4 时, 3<x<53<x<5 逻辑表达式
3<x<5
左到右3<x要么真,要么假,值1或0,剩下的表达式要么0<5,要么1<5,值都是真,改为3<x && x<5即可。
三角函数和双曲函数
sin(3)
[sin(pi/2) sinh(3) asinh(2)]
A = [1 3; 20 50];
sin(A) % 对矩阵的运算就是对其中的每一个元素做运算(与点运算类似)
tan(A) % MATLAB 中的绝大多数函数都能对矩阵进行运算
指数函数和对数函数
Z = [exp(1) log(3) log2(8) sqrt(2) pow2(3)]
exp([1.5 2.7])
归整函数和求余函数
Y1 = [ceil(pi) fix(pi) floor(2.718)]
Y2 = [round(2.718) round(2.718,2) rem(5,3)]
矩阵运算
矩阵建立
直接输入
a1 = [1 2 3] % 等价于 a1 = [1, 2, 3];
a2 = [5; 6]
b = [1+2 pi * 3 exp(1); sin(1), abs(-9) sqrt(3)] % 2×3 矩阵
c = [] % 生成空矩阵
size(c) % 空矩阵的行数和列数都是 0
MATLAB 允许用户根据已知的子矩阵构造新的矩阵:
c1 = [a1; b] % 构造新矩阵,a1 为第一行,b 为第二行
c2 = [b a2] % 构造新矩阵,b 为第一列,a2 为第二列
矩阵编辑器
% “工作区(Workspace)”窗口右键单击,在弹出的新窗口中单击 “新建” 创建一个
% 新变量,其默认名称为“unnamed”,用户可以手动修改该名称;
% 也可以在 “命令行窗口” 直接输入 “x1 = 0” 以创建一个新变量.
% 然后,在工作区内双击新建的变量,则会弹出该变量的编辑窗口(类似于 Excel 表格)
由函数自动生成
(1) 用冒号(:)操作符生成向量,其一般形式为 “初值 : 增量 : 终值”.如:
a = 0:1:5 % 用一般形式创建向量
b = 10:15 % 增量是 1 时可以省略
c = 2:0.01:3; % 增量也可以是小数
d = 10:-2.5:0 % 增量还可以是负数
(2) 用 linspace 命令生成向量.调用方式:linspace(起始值, 终止值, 元素数目).如果不写第三个参数,则默认生成 100 个元素.如:
y = linspace(10, 20, 5)
(3) 特殊矩阵的生成:零矩阵、幺矩阵、单位阵、魔方阵等:
b1 = ones(2, 3) % 生成 2 行 3 列的全 1 矩阵
b2 = ones(3) % 生成 3 阶全 1 方阵
c1 = zeros(2, 3) % 生成 2 行 3 列的全 0 矩阵
d1 = eye(3) % 生成 3 阶单位矩阵
f = magic(3) % 生成 3 阶魔方阵
r1 = rand(2, 3) % 生成在 [0, 1] 上服从均匀分布的伪随机数矩阵
r2 = randn(1, 5) % 生成服从标准正态分布的 5 维伪随机数行向量
r3 = rand(1, 3) * 2-1 % 生成 3 个 [-1, 1] 上的均匀分布伪随机数向量
r4 = repmat(r1, 3, 2) % 用 r1 生成重复矩阵(3 行 2 列)
4. 外部文件导入
用户可以把外部 Excel 文件(*.xls、*.xlsx)或纯文本文件(*.txt)里数据导入到 MATLAB 工作区里.
单击 “主页” 选项卡,然后单击 “导入数据” 打开窗口选择要导入的数据文件
矩阵修改
1. 单个元素
a = [1, 2, 3, 4, 5]; % 定义行向量
a(3) % 查看第 3 个元素的值
a(3) = 10 % 修改第 3 个元素的值
b = [1; 2; 3]; % 定义列向量
b(3) = sum(b) % 修改第 3 个元素的值
c = [1 2 3; 4 5 6; 7 8 9] % 定义矩阵
c(2, 3) = 10 % 修改第 2 行,第 3 列元素的值
c(6) = 20 % 修改第 6 个元素的值
2. 多个元素
a = [1 2 3 4 5; 3 6 9 7 1; 2 5 8 9 0] % 创建矩阵
a([1 2], [1 3 5]) = ones(2, 3) % 修改指定行和列交叉位置的元素
a([1 3], 2:4) = 10 % 2:4 表示第 2 到 4 列
a(3, 3:end) = 20 % end 表示最后一列
a(:, [1:3]) = 30 % 第一个冒号表示从 1 到 end
a([5:10]) = 40 % 把矩阵看成列向量,修改第 5 到第 10 个元素
3. 特殊元素的引用与修改
a = [1 2 3 4 5; 3 6 9 7 1; 2 5 8 9 0] % 创建矩阵
find(a>7) % 返回 a 中大于 7 的元素下标
find(a>10) % 返回 a 中大于 10 的元素下标,结果为空向量
a(find(a>7)) = -10 % 将 a 中大于 7 的元素改为 -10
a(a>=6) = -5 % 直接将 a 中大于等于 6 的元素改为 -5
a(a>2 & a<5) = -15 % 直接将 a 中大于 2 且小于 5 的元素改为 -15
4. 删除矩阵的某行或某列
a = [1 2 3 4 5; 3 6 9 7 1; 2 5 8 9 0]; % 创建矩阵
a(:, 3:4) = [ ] % 删除第 3 列和第 4 列
a(2, :) = [ ] % 删除第 2 行
5. 矩阵形状的修改
a = [1 2 3; 3 6 9] % 创建 2 行 3 列矩阵 a
a(:) % a 的列向量结构
a(5) == a(1, 3) % 因此第 5 个元素就是第 1 行、3 列元素
b = reshape(a, 3, 2) % 把 a 的列向量结构重组成 3 行 2 列矩阵
isequal(a, b) % a 和 b 是两个不相等的矩阵
isequal(a(:), b(:)) % 但是,a 和 b 的列向量结构是一样的
矩阵运算
1. 算术运算
矩阵的算术运算是指矩阵之间的加、减、乘、除、左除和幂运算.
2. 转置运算
A = [1 2; 3 4]
transpose(A) % 对 A 进行转置
B = A % 用转置运算符 实现转置运算
3. 矩阵的行列式和秩
A = [1 2; 3 4];
det(A) % 求方阵 A 的行列式
rank(A) % 求矩阵 A 的秩
4. 逆运算
A = [1 2; 3 4];
inv(A) % 求 A 的逆矩阵
线性方程组为 Ax = b 的解为 x = inv(A)*b
A = [1 2; 3 4];
b = [1; -1];
x = inv(A) * b; % 也可以写成左除形式 x = A\b
5. 矩阵的特征值和特征向量
B = [1 3 5; 8 6 4; 9 3 6];
D = eig(B) % 返回矩阵 B 的特征值构成的向量
[V, D] = eig(B) % 返回矩阵 B 的特征向量 V 和特征值 D
B * V - V * D
6. 矩阵的大小及元素个数
B = [1 3 5; 8 6 4];
[m, n] = size(B) % 返回矩阵的行数 m 和列数 n
L1 = length(B) % length 只能返回矩阵行数和列数的最大者
L2 = length(B(:)) % 把矩阵看成列向量,然后返回矩阵的元素个数
L3 = numel(B) % 也可以用 numel 函数直接返回矩阵的元素个数
点阵运算
A = [1 2 3; 3 4 5]; % A 为矩阵
B = [5 6 7; 7 8 9]; % B 也是矩阵
F1 = A .* B % 矩阵的点乘运算,即 A 和 B 中的对应元素直接相乘
F2 = A .^ 2 % 矩阵的点次幂运算,即 A 中的每一个元素直接平方
F3 = 2 .^ A % 矩阵的点次幂运算,即 2 的 A 次幂
F4 = A ./ B % 矩阵的点除运算,即 A 和 B 中的对应元素直接相除
F5 = A .\ B % 矩阵的点左除运算,即 A 和 B 中的对应元素直接做左除运算
MATLAB 中的大多数函数也都是按阵列运算来求解的,即:阵列函数.
A = [1 2 3; 3 4 5]; % A 为矩阵
C = [5 6 7 8 9]; % C 为向量
cos(A) % 求矩阵 A 中每一个元素的余弦值,结果还是矩阵
log(C) % 求向量 C 中每一个元素的自然对数,结果还是向量
矩阵关系运算
1. 关系运算和逻辑运算
a = [1 2 3 4 5; 3 6 9 7 1; 2 5 8 9 0] % 创建矩阵
a > 5 & a <= 7
find(a>5) % 返回 a 中大于 5 的元素下标
2. 相关函数
[any([1 0]), any([0 0]), all([1 2]), all([1 0])]
any([0 1 1 0; 1 1 0 0]) % 判断矩阵中每个列向量是否不全为 0
all([0 1 1 0; 1 1 0 0]) % 判断矩阵中每个列向量是否全为 1
xor([1 0; 0 4], [1 1; 3 3]) % 判断两个矩阵中对应元素是否不同
isnan([0/0, 1])
isequal([1 2; 3 4], [1 2; 3 4]) % 与运算符 "==" 不同,请大家自己验证
ismember([1 2; 3 4], [1 2 1; 4 5 6])
ischar([a 1; b 2]) % 是否为字符串型矩阵
isletter([a 1; b 2]) % 字符串中是字母的地方为 1,否则为 0
isspace([a 1; b 2]) % 字符串中是空格的地方为 1,否则为 0
isstudent % 是否为学生版 MATLAB
向量运算
1. 点积
C1 = [6 7 8 9]; % C1 为向量
C2 = [1 3 5 7]; % C2 为向量
dot(C1, C2) % 求 C1 和 C2 的点积
sum(C1 .* C2) % 也可以用阵列运算和 sum 函数来计算向量的点积
C1 * C2
说明:用 dot 命令计算点积时,两个向量只要维数相等就行,而不用考虑行向量或列向量;
但用后两种方法,需要考虑两个向量的结构特点.
如果一个是行向量、一个是列向量,即使维数相等,用后两种方式也无法得到正确结果.
2. 叉积
A = [6 7 8]; % A 为三维向量
B = [1 3 5]; % B 为三维向量
C1 = cross(A, B) % 用 cross 命令求 A 和 B 的叉积
C2 = cross(B, A) % 求 B 和 A 的叉积
3. 混合积
A = [6 7 8];
B = [1 3 5];
C = [2 5 7];
dot(A, cross(C, B))
数据保存与加载
保存为二进制文件
1. 保存为 MATLAB 文件(.mat)
X = [1, 2; 3, 4]
Y = [5, 6, 7; 8, 9, 0]
1.1 把矩阵 X 和 Y 存到 E:\mydata1.mat 和 E:\mydata2.mat下
save E:\mydata1 X Y
save(E:\mydata2, X, Y)
注意:如果指定的文件已经存在,MATLAB 不会提示任何警告信息而是直接覆盖原文件
1.2 用 who 和 whos 命令查看 .mat 数据文件中的变量:
who(-file, E:\mydata1) % 或采用命令方式:who -file E:\mydata1
whos(-file, E:\mydata1) % 或采用命令方式:whos -file E:\mydata1
1.3 向已经存在的文件中追加数据
Z = [1 2];
save(E:\mydata2, Z, -append) % 向文件 mydata2.mat 中追加数据 Z
whos(-file, E:\mydata2) % 查看文件 mydata2.mat 中的变量
2. 加载 .mat 文件
clear X Y
2.1 加载 MATLAB 文件(.mat)
load E:\mydata1 Y % 用命令方式只加载变量 Y
load(E:\mydata2, X) % 用函数方式只加载变量 X
2.2 用 matfile 函数创建文件对象,并从文件对象中直接读取或修改文件中的数据
mfobj = matfile(E:\mydata02) % 创建文件对象,并与文件 E:\mydata02.mat 建立关联
X = mfobj.X; % 把 mfobj.X 赋给变量 X 后就可以直接使用 X 了
mfobj.Properties.Writable = true; % 将文件的可写属性改为 true
mfobj.Z = 3; % 可以直接更改文件中变量的内容
mfobj.Z
检验 2.2 所进行的操作
clear mfobj Z % 清空文件对象 mfobj 和变量 Z
load E:\mydata02 Z % 重新从文件 mydata02 中加载 Z
Z % Z 的值已经被改变
保存为纯文本
在 MATLAB R2019a 及以后版本中才可以使用 writematrix 和 readmatrix 函数
1. 保存数据
X = [1 2 3; 4 5 6];
Y = [10 20; 60 80];
Z = [100 200 300];
1.1 保存为纯文本文件
writematrix(X) % 保存到当前目录下,文件名为 X.txt,用逗号作为分隔符
type X.txt % 显示文件内容
writematrix(Y, mydata03.txt, Delimiter, tab) % 用制表符作为分隔符
type mydata03.txt
更多的分隔符请查阅帮助系统
1.2 保存到 Excel 文件的第一个工作表中
writematrix(X, mydata04.xlsx)
1.2 保存到 Excel 文件的指定工作表中的指定区域
writematrix(Y, mydata04.xlsx, Sheet, 2, Range, A2:B3)
writematrix(Z, mydata04.xlsx, Sheet, price)
说明:向指定工作表存入数据时,新数据会覆盖原数据;
如果不指定工作表,MATLAB 会在 Excel 文件中新建一个工作表,并存入数据.
2. 读取数据、
2.1 读取纯文本文件
R1 = readmatrix(X.txt) % 读取文件 X.txt 里的数据
R2 = readmatrix(mydata03.txt) % 读取文件 mydata03.txt 里的数据
2.2 读取文件 mydata03.xlsx 的第 1 个工作表中的所有数据
S1 = readmatrix(mydata04.xlsx)
2.3 读取文件 mydata03.xlsx 的第 2 个工作表的 A2:B2 区域中的数据
S2 = readmatrix(mydata04.xlsx, Sheet, 2, Range, A2:B2)
2.4 读取文件 mydata03.xlsx 的名称为 price 的工作表中的所有数据
S3 = readmatrix(mydata04.xlsx, Sheet, price)
说明:在读取 Excel 文件时,必须确保文件及文件中的工作表都是存在的,
否则 MATLAB 会报错.
3. 用 xlsfinfo 命令用于返回文件的详细信息
[stat, shs, fmt] = xlsfinfo(mydata04.xlsx) % 读取文件信息
S3 = readmatrix(mydata04.xlsx, Sheet, shs{3}) % 读取第 3 个工作表中的数据
4. 判断文件是否存在
A = exist(FileName)
exist(mydata04.xlsx) % 文件存在,返回 2
exist(mydata05.csv) % 文件不存在,返回 0
说明:exist 函数不仅可以用来检验文件是否存在,
还可以检验指定的文件夹、工作区中的变量、以及 MATLAB 的系统函数等内容
是否存在.如果它们不存在,exist 返回 0,否则返回非 0,详细信息请查阅帮助系统.
5. 文件的删除
delete E:\mydata1.mat % 文件必须存在才能删除成功。不提示、直接删,回收站也不保留
索引
a=[0,-1,0,10,0,9,-5,0,0];
a(a<0) =10 %将小于0的设为10
a1 =[0,1,2,3,4 ,5,6];
a1(rem(a,2) ==0)=[] % 删除其中的偶数
A =magic(4);
B = isprime(A);
A(~B)=0 %非素数设为0
A =
0 2 3 13
5 11 0 0
0 7 0 0
0 0 0 0
A = [2 5 7 3;8 0 9 42;1 3 4 2];
ix =find(A>5) ;% 索引位置
A(ix)=A(ix)+3;
A(11) %结果?
%ans = 45
A =[1 4 3 2];
B =[5 4 1 3];
A>B
x =find(A==B) %找元素相等时下标
A(A == B) %访问A,B中对应元素相等的元素
a = [1 2 3;4 5 6];
[m,n] =find(a == 3) % 找全下标
nl =find(a=3) %找单下标
参考文献:
大学数学实验,张建波,人民邮电出版社,2020年8月
》的全部内容,本文网址:https://www.7ca.cn/baike/15323.shtml,如对您有帮助可以分享给好友,谢谢。