1.直接输入法
a=[1 2 3] 或者 a=[1,2,3]
b=[1 2 3
4 5 6
7 8 9] 或者
b=[1 2 3;4 5 6;7 8 9]
%分号代表行,元素之间用空格或者逗号
注意:
在MATLAB中也可以用已经定义好的矩阵来定义其他矩阵。例如:
C=[1 5]
D=[6,C]
D =
6 1 5
2.M文件建立矩阵
启动编辑器(输入edit命令,或者使用按钮)
3. %冒号运算符用于定义一个新矩阵或修改原有矩阵。
e1:e2:23
e1为初始值,e2为步长,e3为终止值,产生行向量,以e1开始,
>>A=1:2:7
A=
1 3 5 7
%提取矩阵A1的第一列
>> A1=[1 2 3;11 12 13;21 22 23];
>> X=A1(:,1) %表示所有行的第一列
X =
1
11
21
>>Y=A1(2:3,1:2) %表示第2行到第三行,从第一列到第二列
Y =
11 12
21 22
>>M=A(1,:) %获取第一行 所有列的内容
>> C=A(1,2:3) %获取第一行 2到3列的内容
>> D=A(1,2:end) %获取第一行 2到最后的内容
>> D=A([1,2],[1,2]) %获取第一行第一列、第二列;第二行第一列第二列
>> D1=A(1,[1,2]) %获取第一行 第一列第二列的内容
5.linspace建立行向量
linspace(a,b,n)--a和b分别为行向量的第一个元素和最后一个元素,n为总元素,
省略n自动产生100个元素的行向量。
全零矩阵和全1矩阵常用做占位矩阵,用于程序的循环结构,这样可以提高运行速度。
>>zeros(m) %M*M的全零矩阵
>>zeros(m,n) %创建m*n的全零矩阵
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
>> zeros(3,4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
>>ones(m) %创建m*m的全1矩阵
>>ones(m,n) %创建m*n的全1矩阵
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
>> ones(2,3)
ans =
1 1 1
1 1 1
>>diag(A) %提取二维矩阵A中的对角元素。
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> diag(A)
ans =
1
5
9
定义函数diag的第二个输入参数k,可以提取出其他对角线上的元素。若k为正数,则提取矩阵右上角对角线上的元素,若k为负数,则提取矩阵左下角对角线上的元素。
>> diag(A,1)
ans =
2
6
>> diag(A,2)
ans =
3
>> diag(A,-1)
ans =
4
8
注:如果函数diag的输入不是二维矩阵,而是矢量,那么MATLAB会把输入矢量作为对角线元素产生一个新的矩阵,并将新矩阵的其他元素置为零。
>> B=[1,2,3]
B =
1 2 3
>> diag(B)
ans =
1 0 0
0 2 0
0 0 3
>> diag(B,1)
ans =
0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
在魔方矩阵中,所有的行,列以及对角元素之和均相等。
>>magic(5)
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
扩展:
>> fliplr(A) %对矩阵的列进行左右对称翻转
ans =
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11
>> flipud(A) %对矩阵的行进行上下对称翻转
ans =
11 18 25 2 9
10 12 19 21 3
4 6 13 20 22
23 5 7 14 16
17 24 1 8 15
>>hilb(4)
ans =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7
>> format short
>>ans
ans =
ans =
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
>>toeplitz(1:6)
ans =
1 2 3 4 5 6
2 1 2 3 4 5
3 2 1 2 3 4
4 3 2 1 2 3
5 4 3 2 1 2
6 5 4 3 2 1
1.随机数 rand 0-1 均匀分布的随机矩阵
2.randn 均值为0 方差为1 的标准正态分布的随机矩阵
>>S=0+(10-0)*rand(10,1) --0到10之间的随机数
%从a到b之间均匀的随机数
>>S=a+(b-a)*rand
>>y=u+sqrt(s)*randn %产生均值为u,方差为s的正态分布
>>y=0.6+sqrt(5)*randn %会产生5个序列
>>mean(y) %获取序列的均值
>>std(y) %获取序列的方差
在矩阵中元素是以列的方式存放,下标从1开始(即从第一列开始)
A =
1 2 3
11 12 13
23 24 25
>> A(2,3) %第二行,第三列的元素是13
>> A(3) %索引为3的元素是23
>> [m,n]=find(A==3)---1,3--返回下标
>>in = find(A==11)--2---返回索引
ind2sub和sub2ind是matlab中下标与索引相互转换用的两个函数。
ind代表索引(index);sub代表下标(subscript),即行列值。
>>sub2ind(size(A),2,3)---8
>>[n,m]=ind2sub(size(A),8)---2,3
H=reshape(A,9,1)--9行1列的矩阵
I=A(:) 这个效率高 排为列向量
>> A=[1,3,5;4,5,7;55,66,77]
>> A(1,:)=[] ---删除第一行的元素
A =
4 5 7
55 66 77
>>C=repmat(A,2,1)--把A矩阵看做一个整体,增加两行一列
C =
4 5 7
55 66 77
4 5 7
55 66 77
>>D=repmat(A,2,2)
D =
4 5 7 4 5 7
55 66 77 55 66 77
4 5 7 4 5 7
55 66 77 55 66 77
>>F=[1 2 3 4 4 5 6 6 6 6]
>>F1=unique(F)
F1 =
1 2 3 4 5 6
1.
矩阵之间的加法,减法运算,即对应元素之间的运算(两个矩阵的行和列相等)
2.点乘运算
矩阵的行列一样,对应元素相乘
3.矩阵间乘法
A(m*n)*B(n*m)--m*m
>>det(A) %求矩阵的行列式
>如果矩阵的行列式不为0,则可以求得矩阵的逆。
>>inv(A)
%例如有两个矩阵求内积a,b
>>a=[1+5i;2;3+6i;7-2i];
>> b=[2-i;4+3i;3-i;6];
>>s=sum(conj(b).*a)
>>s1=b'*a
>>s=dot(b,a)
%以上三个命令的结果都是一样的。
求解Jordan标准型,使用jordan函数
>> A=[0 3 3;-1 8 6;2 -14 -10];
>> jordan(A) %默认的结果为上三角形式
ans =
0 0 0
0 -1 1
0 0 -1
>> [v j]=jordan(A)
v =
4 -3 -3
2 -3 -2
-2 4 2
j =
0 0 0
0 -1 1
0 0 -1
>> A=[1 0 i;0 2 0;-i 0 1];
>> eig(A) %求解特征值
ans =
0
2
2
>> [e d]=eig(A) % e表示特征向量,d表示特征值
e =
0.0000 + 0.7071i 0.0000 + 0.7071i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 1.0000i
-0.7071 + 0.0000i 0.7071 + 0.0000i 0.0000 + 0.0000i
d =
0 0 0
0 2 0
0 0 2
>> A=[0 3 3;-1 8 6;2 -14 -10];
>> norm(A,1) %ans = 25 ,1范数
>> norm(A,2) %ans = 20.4523 ,2范数
>> norm(A,inf) %ans = 26 ,无穷范数
>> norm(A,'fro') %ans = 20.4695 ,f范数
A(x)=[sin(x) exp(x) 1;cos(x) x^2+1 log(x)]
>> syms x %创建了一个符号
A(x)=[sin(x) exp(x) 1;cos(x) x^2+1 log(x)]
>> diff(A) %求一阶导
ans(x) =
[ cos(x), exp(x), 0]
[ -sin(x), 2*x, 1/x]
>> diff(A,2) %求二阶导
>> diff(ans) %对二阶导的结果求导,即三阶导
有矩阵C=[0 1;0 -2],求expC,sinC,cosC
>> C=[0 1;0 -2];
>> expC=funm(C,@exp)
>> sinC=funm(C,@sin)
>>cosC=funm(C,@cos)
x+2y+3z=5
x+4y+9z=-2
x+8y+7z=6
步骤一:建立矩阵等式左边按行排,常数项按列排
即:>> A=[1,2,3;1,4,9;1,8,7];
>> B=[5,-2,6]';
>> x=inv(A)*B % A的逆乘以B
或者
>> x=A\B