MATLAB 学习笔记(1)
Contents
MATLAB 学习笔记(1)
显然从 MATLAB 的名字就可以看出其是一个擅长矩阵计算的数学软件,本节稍微介绍一下 Matlab 的基本语法。
变量和赋值
标识符
标识符是用来标识变量名、常量名、函数名和文件名的字符串的统称。第一个字母一定要是英文字母,区分大小写。
矩阵及其元素赋值
$\text{MATLAB}$ 中的变量或常量都代表矩阵,标量视为 $1\times1$ 的矩阵。
举个例子
a=3;
b='13';
a+b
如果是 $\text{cpp}$ 会输出12598,应该是 $49\times2^8+51+3$
而 $\text{MATLAB}$ 则输出的是一个 $1\times2$ 的矩阵,这是因为 $'13'$ 在 MATLAB 里是用一个 $1\times2$ 的矩阵进行的存储,这里就是各自的 $\text{ASCII}$ 码加 3 得到了这个结果,所以输出 52 54
赋值语句的一般形式为:变量=表达式(或数)
如 a=[1 2 3;4 5 6;7 8 9]
得到的显示结果就是
a =
1 2 3
4 5 6
7 8 9
同一行元素之间用逗号或空格分开,不同行用分号隔开,语句尾用回车或逗号会显示运算结果,用分号则只执行运算不显示结果。
可以通过下标给单个元素赋值,如上面的矩阵中通过代码 a(2,3)=5
则可以得到结果
a =
1 2 3
4 5 5
7 8 9
如果赋值的下标超过了矩阵大小则会自动扩充,多余的补 $0$
给全行赋值则可用冒号,如 a(5, : )=[5,4,3]
得到
a =
1 2 3
4 5 5
7 8 9
0 0 0
5 4 3
可以把矩阵的某些行和某些列交点取出变成新矩阵,比如 b=a([2,3],[1,3])
就是将第2、3行和1、3列交点取出。
b =
4 5
7 9
删去某些行则可以用赋值空矩阵的方法,如a(4, : )=[]
a =
1 2 3
4 5 5
7 8 9
5 4 3
复数
虚数部分用 $i$ 或 $j$ 表示,数字和 $i$ 的乘积可以省略乘号,矩阵不行。
若之前给 $i,j$ 赋过值,可以通过 clear i,j
清除。
此外矩阵还可以进行转置、共轭运算,先定义一个复数矩阵,
z=[1+2i 3+4i;5+6i 7+8i]
z =
1.0000 + 2.0000i 3.0000 + 4.0000i
5.0000 + 6.0000i 7.0000 + 8.0000i
可以进行运算
w=z' %转置共轭
w =
1.0000 - 2.0000i 5.0000 - 6.0000i
3.0000 - 4.0000i 7.0000 - 8.0000i
v=conj(z) %共轭
v =
1.0000 - 2.0000i 3.0000 - 4.0000i
5.0000 - 6.0000i 7.0000 - 8.0000i
u=conj(z)' %转置
u =
1.0000 + 2.0000i 5.0000 + 6.0000i
3.0000 + 4.0000i 7.0000 + 8.0000i
变量检查
工作空间内的变量名和变量特征可以用 who
和 whos
指令查看,如复数一节所得到的工作空间。
who
您的变量为:
u v w z
whos
Name Size Bytes Class Attributes
u 2x2 64 double complex
v 2x2 64 double complex
w 2x2 64 double complex
z 2x2 64 double complex
此外结果 Inf
( -Inf
)无穷大和 NaN
(0/0,$\text{Inf/Inf}$,0*$\text{Inf}$)不包含在以上变量检查内。
基本赋值矩阵
$\text{MATLAB}$ 有一些预设的基本矩阵。
f1=ones(3,2),f2=zeros(2,3),f3=magic(3),f4=eye(2)
#全1,全0,幻方(行列对角线和相等),单位
f1 =
1 1
1 1
1 1
f2 =
0 0 0
0 0 0
f3 =
8 1 6
3 5 7
4 9 2
f4 =
1 0
0 1
linspace(a,b,n)
在 $a$ 和 $b$ 之间均匀产生 $n$ 个点,形成 $n$ 维向量
f5=linspace(0,1,5)
f5 =
0 0.2500 0.5000 0.7500 1.0000
可以用多个小矩阵组成大矩阵,但要保证行列数正确
fb1=[f1 f3;f2 f4]
fb1 =
1 1 8 1 6
1 1 3 5 7
1 1 4 9 2
0 0 0 1 0
0 0 0 0 1
矩阵初等运算
加减乘
可用 size
语句检查矩阵阶数
若一维可用 length
检查
矩阵相加要求行列数相同,但加减标量时会把标量扩展成同阶等元素矩阵。
矩阵乘法和数乘不多bb,自行参考线代。
除及线性方程的解
若同阶方阵 $A$ 和 $V$ 满足
$$
AV=I
$$
则,$V$ 称为 $A$ 的逆阵,记为
$$
V=A^{-1}
$$
$\text{MATLAB}$ 中可以用函数 $\text{inv}$ 求逆阵,V=inv(A)
若方程
$$
D*X=B
$$
同时左乘$\text{inv}(D)$.
$$
\text{inv}(D)DX=\text{inv}(D)B\\
X=\text{inv}(D)B
$$
逆阵左乘记作\
,如上式可写成 $X=D\setminus B$,称为左除
同理逆阵右乘记为/
,$B\text{inv}(D)=B/D$,称为右除
可以用来解线性方程式。
$$
6x_1+3x_2+4x_3=3\\
-2x_1+5x_2+7x_3=-4\\
8x_1-4x_2-3x_3=-7
$$
写作矩阵形式
$$
Ax=B
$$
A=[6 3 4;-2 5 7;8 -4 -3];
B=[3;-4;-7];
x=A\B
x =
0.6000
7.0000
-5.4000
若方程数大于未知数,也能给出解,但不是准确解而是最小二乘解。
方程数小于未知数能求出某个特殊解。
乘方和幂次
运算符 *
、/
、\
、^
,指数函数expm
、对数函数 logm
、开方函数sqrtm
是对矩阵进行的,其他函数是对元素进行的,注意区分带m
的函数和没有的区别。
其他改变矩阵结构的函数
A=[8 1 6 0;3 5 7 1;4 9 2 2]
B1=fliplr(A) %左右翻转
B2=flipud(A) %上下翻转
B3=reshape(A,2,6) %阶数重组,元素总数不变
B4=rot90(A) %逆时针转90°
B5=diag(A) %提取对角阵
B6=tril(A) %取左下三角(最左列阶数为准)
B7=triu(A) %取右上三角(最上行阶数为准)
B8=A(:)' %排成一行
A =
8 1 6 0
3 5 7 1
4 9 2 2
B1 =
0 6 1 8
1 7 5 3
2 2 9 4
B2 =
4 9 2 2
3 5 7 1
8 1 6 0
B3 =
8 4 5 6 2 1
3 1 9 7 0 2
B4 =
0 1 2
6 7 2
1 5 9
8 3 4
B5 =
8
5
2
B6 =
8 0 0 0
3 5 0 0
4 9 2 0
B7 =
8 1 6 0
0 5 7 1
0 0 2 2
B8 =
8 3 4 1 5 9 6 7 2 0 1 2
矩阵大概就这些,我困了,别的下章再说。
No Comments