为了不拖数模小队【魏公村汽配维修站良乡分站数模岗】的后腿而被他们踢出去 开始学一学matlab
先占个坑,晚上近现代史再搞
1.m文件:
类似于封装函数,m文件名为函数名,以function f(x)开始,保存后可以在命令行中调用该函数
2.数组:
构造:
x=[1,2,3,4,5,6];%无分号就会直接输出左值
x=[1,2,3;4,5,6];%用分号换行构造二维数组
x=m:k:n%从m到n的一维数组,步长为k
x=linspace(m,n,k)%从m到n有k+1个元素
四则运算:
%数组与数 x=[a,b,c,d,e],q;
x+q=[a+q,b+q,c+q,d+q,e+q];
x-q=[a-q,b-q,c-q,d-q,e-q];
x*q=[a*q,b*q,c*q,d*q,e*q];
x/q=[a/q,b/q,c/q,d/q,e/q];
x\.q=[q/a,q/b,q/c,q/d,q/e];
x^q=[a^q,b^q,c^q,d^q,e^q];
q.^x=[q^a,q^b,q^c,q^d,q^e];
%数组与数组
(好吧再列举有点蠢:数组之间乘除法,乘方已有定义,会被当成矩阵,因此需要加上.用来重构,/是左除右,\是右除左)
3.矩阵
1)特殊矩阵
a=eye(m,n)%单位矩阵
b=zeros(m,n)%零矩阵
c=ones(m,n)%全一矩阵
d=rand(m,n)%0-1区间随机矩阵
e=randn(m.n)%均值为0,方差为1的标准正态分布随机矩阵
%缺省一个参数时默认为方阵
b=zeros(m);
b=zeros(size(A)) % 和A矩阵相同大小
2.魔方矩阵
n阶魔方阵由1,2,...\(n^2\)组成,每一行,列,对角线上各n个元素之和都相等=\(1+2+...+n^2=\frac{n+n^3}{2}\)
n>2时有多种魔方阵,magic(n)产生一个特定的魔方阵
>> m=magic(8);
>> sum(m(1,:))
ans =
260
>> sum(m(:,1))
ans =
260
3.范德蒙方阵
对于向量v=[v1,v2,...,vn],范德蒙矩阵的一般形式为:倒数第i列是v的i-1次方,范德蒙矩阵常用在各种通信系统的纠错编码中
3.希尔伯特矩阵
n阶希尔伯特矩阵一般形式为h(i,j)=\(\frac{1}{i+j-1}\)
>> format rat
>> h=hilb(4)
h =
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
>>
4.伴随矩阵
设多项式p(x)为\(a_{n}x^{n}+a_{n-1}x^{n-1}+..+a_{1}x+a0\),其伴随矩阵为第一行为an-1~a0/an;其他行是一个少一行的单位矩阵
>> p=[1,-2,-5,6];
>> a=compan(p)
a =
2 5 -6
1 0 0
0 1 0
>>
伴随矩阵的特征值等于多项式方程的根
5.帕斯卡矩阵
把二项式系数依次填写在矩阵的左侧对角线上
帕斯卡矩阵的逆矩阵各元素也是整数
>> format rat
>> p=pascal(5)
p =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>> inv(p)
ans =
5 -10 10 -5 1
-10 30 -35 19 -4
10 -35 46 -27 6
-5 19 -27 17 -4
1 -4 6 -4 1
>>
2)矩阵分块
a[i:j,m:n]%提取a矩阵中i~j行,m~n列的子矩阵
a[:,m:n]%没有数默认为矩阵的边界
3)矩阵合并
%a,b为两矩阵
[a b]a左b右
[a;b]a上b下
4)矩阵运算
a+b
a*b
det(a) % a的行列式
inv(a) % a的逆矩阵
a/b % a*inv(b)
a\b % b*inv(a)
1.提取矩阵的对角线元素
diag(A):矩阵a主对角线元素,产生一个列向量
diag(A,k):提取a第k条对角线的元素,产生一个列向量(与主对角线平行,向上依次为第一条,第二条)
2.构造对角矩阵
diag(V):构造以向量V为主对角线元素的对角矩阵。
diag(V,k):构造以向量V为第k条对角线元素的对角矩阵
eg.先建立5*5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,...第五行乘以5
>> A=[7,0,1,0,5;3,5,7,4,1;4,0,3,0,2;1,1,9,2,3;1,8,5,2,9]
A =
7 0 1 0 5
3 5 7 4 1
4 0 3 0 2
1 1 9 2 3
1 8 5 2 9
>> d=diag(1:5);
>> d*A
ans =
7 0 1 0 5
6 10 14 8 2
12 0 9 0 6
4 4 36 8 12
5 40 25 10 45
每一列乘以i的话可以右乘
3.三角阵
上/下三角阵
上三角阵:triu(A):提取矩阵A的主对角线及以上的元素
triu(A,k):提取矩阵A的第k条对角线即以上的元素
>> triu(ones(4),-1)
ans =
1 1 1 1
1 1 1 1
0 1 1 1
0 0 1 1
tril下三角矩阵
4.矩阵的转置
转置运算符是(.\')
共轭转置(’)在转置的基础上取每个数的复共轭
>> a=[1,3;3+4i,1-2i]
a =
1 + 0i 3 + 0i
3 + 4i 1 - 2i
>> a.\'
ans =
1 + 0i 3 + 4i
3 + 0i 1 - 2i
>> a\'
ans =
1 + 0i 3 - 4i
3 + 0i 1 + 2i
>>
5.矩阵的旋转
rot90(A,k):将矩阵A逆时针方向旋转90°的k倍
A=[1,3,2;-3,2,1;4,1,2]
A =
1 3 2
-3 2 1
4 1 2
>> rot90(A)
ans =
2 1 2
3 2 1
1 -3 4
>> rot90(A,2)
ans =
2 1 4
1 2 -3
2 3 1
6.矩阵的反转
对矩阵实施左右旋转是将原矩阵的第一列与最后一列调转,以此类推
fliplr(A):左右翻转
flipud(A):上下翻转
eg.验证魔方阵的主对角线,副对角线元素之和相等
>> a=magic(5);
>> d1=diag(a);
>> sum(d1)
ans =
65
>> b=flipud(a);
>> d2=diag(b);
>> sum(d2)
ans =
65
>>
7.矩阵的秩
rank(k)
eg.求3~20阶魔方阵的秩
>> for n=3:20
r(n)=rank(magic(n));
end
>> bar(r)
>> grid on
>> axis([2,21,0,20])
>> [3:20;r(3:20)]
ans =
列 1 至 6
3 4 5 6 7 8
3 3 5 5 7 3
列 7 至 12
9 10 11 12 13 14
9 7 11 3 13 9
列 13 至 18
15 16 17 18 19 20
15 3 17 11 19 3
>>
观察表格可得:奇数阶魔方阵秩为n,为满秩矩阵
n%2==0&&n%4!=0时 秩为n/2+2
n%4==0时秩为3
8.矩阵的迹
矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和
trace(A)
>> a=[1,3,2;-3,2,1;4,1,2]
a =
1 3 2
-3 2 1
4 1 2
>> b=trace(a)
b =
5
>> t=sum(diag(a))
t =
5
>>
9.向量和矩阵的范数
用来度量矩阵或向量在某种意义上的长度
向量的3种常用范数:
1)向量1范数:向量元素的绝对值之和 norm(v) / norm(v,2)
2)向量2范数:向量元素绝对值的平方和的平方根 norm(v,1)
3)向量无穷范数:所有向量元素绝对值中的最大值 norm(v,inf)
矩阵的3种常用范数:
1)矩阵1范数:所有矩阵列元素绝对值之和的最大值
2)矩阵2范数:A‘ A矩阵的最大特征值的平方根
3)矩阵无穷函数:所有矩阵行元素绝对值之和的最大值
10.矩阵的条件数
矩阵的条件数等于a的范数与a的逆矩阵的范数的乘积
条件数越接近于1,矩阵的性能越好,反之,矩阵性能越差
cond(a,1) / cond(a,inf)...
eg.求2~10阶希尔伯特矩阵的条件数
for n=2:10
c(n)=cond(hilb(n));
end
>> format long
>> c\'
ans =
1.0e+13 *
0
0.000000000001928
0.000000000052406
0.000000001551374
0.000000047660725
0.000001495105864
0.000047536735656
0.001525757556904
0.049315340974782
1.602491697370065
可以看出:随着阶数的增加,希尔伯特矩阵的条件数不断增大,矩阵性能变差
11.矩阵的特征值与特征向量
e=eig(A):求矩阵A的全部特征值,构成向量e
[x,d]=eig(A):求矩阵A的全部特征值,构成对角阵d并产生矩阵X,X的每列是相应的特征向量
>> a=[1,1,0;1,0,5;1,10,2]
a =
1 1 0
1 0 5
1 10 2
>> [x,d]=eig(a)
x =
0.072196186226992 0.975064063761619 0.088619224195265
0.523368974057523 -0.075013465822402 -0.635606218080313
0.849042182514069 -0.208861321230112 0.766910274178584
d =
8.249260679947779 0 0
0 0.923068166892526 0
0 0 -6.172328846840312
>> a*x(:,1)
ans =
0.595565160284515
4.317407098797336
7.003970291830360
>> d(1)*x(:,1)
ans =
0.595565160284514
4.317407098797333
7.003970291830354
>>
12.稀疏矩阵
只储存矩阵的非零元素的值及其位置,即行号和列号,矩阵元素的储存顺序并没有改变,可以大大节约储存空间。
a=sparse(s) : 转化稀疏矩阵
s=full(A) :转化回完全储存方式
sparse(m , n):生成一个m*n的所有元素为0的稀疏矩阵
sparse(u,v,S): u,v,S是3个等长的向量,s是要建立的稀疏矩阵的非零元素,u(i),v(i)分别是s(i)的行和列下标
>> a=sparse([1,2,2],[2,1,4],[4,5,-7])
a =
(2,1) 5
(1,2) 4
(2,4) -7
>> b=full(a)
b =
0 4 0 0
5 0 0 -7
>>
请发表评论