首页 > 代码库 > MATLAB常用操作
MATLAB常用操作
1.点乘,点除,点乘方
点乘(对应元素相乘),必须同维或者其中一个是标量,a.*b
点除,a.\b表示矩阵b的每个元素除以a中对应元素或者除以常数a,a./b表示常数a除以矩阵b中每个元素或者矩阵a除以矩阵b对应元素或者常数b
点乘方a.^b,矩阵a中每个元素按b中对应元素乘方或者b是常数
2.矩阵中元素的操作
矩阵a中第r行,a(r,:),
第r列,a(:,r),
依次提取每一列组成一个列向量a(:),
提取子矩阵第i到j行和第k到t列a(i:j,k:t)
可以通过下标引用,但是元素下标从1开始, 也可通过序号引用,但是按列存储,也就是说对于3*3的矩阵a,a(4)是a(1,2)不是a(2,1)
3.求极限
syms x;
f表达式
limit(f,0)//表示x趋于0时的极限
4.因式分解
syms x
factor(表达式)
5.求积分
syms x
y = x^2 + 2
int(y,3,4)//在区间3到4求积分
或者
quad(‘sin(x)‘,4,6) %必加引号
5 . 求n阶导数
diff(函数表达式,阶数n)//注意并不是在x = n时的一阶导数值
6.解一元方程
syms x
y = X^3 - 1//y必须是个式子,也就是说x必须是符号变量不可是具体的数,否则一直空解
solve(y)
或者
求方程 3x4+7x3 +9x2-23=0的全部根。
p=[3,7,9,0,-23]; %建立多项式系数向量
x=roots(p) %求根
7.whos用于显示驻留在工作区内的变量的详细信息,采用clear 变量名把该变量清理出内存
8.linspace(a,b,n) 其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价。
9.size(矩阵名),输出行数和列数,比如产生和矩阵a同维的全一阵,ones(size(a))
10.常用的产生通用特殊矩阵的函数有: zeros:产生全0矩阵(零矩阵)。 ones:产生全1矩阵(幺矩阵)。 eye:产生单位矩阵。 rand:产生0~1间均匀分布的随机矩阵。 randn:产生均值为0,方差为1的标准正态分布随机矩阵。
一.常用特殊阵
建立随机矩阵:
(1) 在区间[20,50]内均匀分布的5阶随机矩阵。
(2) 均值为0.6、方差为0.1的5阶正态分布随机矩阵。
命令如下: x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
此外,常用的函数还有reshape(A,m,n),它在矩阵总元素个数保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
例如,行向量:
a = [1 2 3 4 5 6]
执行下面语句把它变成3行2列:
b = reshape(a,3,2)
执行结果:
b =
1 4
2 5
3 6
在使用reshape时一定要注意的是变换前后矩阵的总元素个数和值不变。
二.用于专门学科的特殊矩阵
(1) 魔方矩阵
魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。
对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。
将101~125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。
M=100+magic(5)
可知:n阶普通魔方阵的常数值是n(n^2+1)/2(1加到n^2再除以n)。
(2) 范得蒙矩阵
范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列(即从第三列开始)是其后列与倒数第二列的点乘积即倒数第二列的次方。
可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。
例如,A=vander([1;2;3;5])即可得到上述范得蒙矩阵。
(3) 希尔伯特矩阵
Hilbert matrix,矩阵的一种,其元素为1/(i+j-1),ij分别为其行标和列标。
即:
[1,1/2,1/3,……,1/n]
|1/2,1/3,1/4,……,1/(n+1)|
|1/3,1/4,1/5,……,1/(n+2)|
……
[1/n,1/(n+1),1/(n+2),……,1/(2n-1)]
希尔伯特矩阵是一种数学变换矩阵,正定,且高度病态(即,任何一个元素发生一点变动,整个矩阵的值和逆矩阵都会发生巨大变化),病态程度和阶数相关。
在MATLAB中,生成希尔伯特矩阵的函数是hilb(n)。 使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。
因为希尔伯特矩阵已经规定好了,因此hilb和invhilb只有一个参数即阶数。
format rat %以有理形式输出,即循环小数表示成分数
(4) 托普利兹矩阵
托普利兹(Toeplitz)矩阵除第一行第一列外,其他每个元素都与左上角的元素相同。即主对角线上的元素相等,平行于主对角线的线上的元素也相等。生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的托普利兹矩阵。例如 T=toeplitz(1:6).
(5) 伴随矩阵
MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。
例如,为了求多项式的x3-7x+6的伴随矩阵,可使用命令: p=[1,0,-7,6];
compan(p)
看了好多的书,都把compan()函数翻译成求伴随矩阵或友矩阵,可是你用它的时候你会
发现,compan()函数的输入只能是一个向量(vector),而不能是一个矩阵(matrix),
所以我觉得它不能称为真正的求伴随矩阵的函数。不过,我们可以利用高等数学上的伴随
矩阵和逆矩阵的关系来求逆矩阵,像这样:
1 function J=companymatrix(A) 2 if det(A)~=0%det是求行列式的值 3 J=inv(A)*det(A); 4 else 5 fprintf(‘|A|=0\n‘); 6 J=pinv(A)*det(A); 7 end
(6) 帕斯卡矩阵
我们知道,二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。
由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。
函数pascal(n)生成一个n阶帕斯卡矩阵。
求(x+y)5的展开式。
在MATLAB命令窗口,输入命令: pascal(6)
矩阵次对角线上的元素1,5,10,10,5,1即为展开式的系数。
11.矩阵分析
11.1 对角阵 只有对角线上有非0元素的矩阵称为对角矩阵,对角线上的元素相等的对角矩阵称为数量矩阵,对角线上的元素都为1的对角矩阵称为单位矩阵。
diag(a),提取矩阵a的对角线元素组成列向量。
先建立5×5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,…,第五行乘以5。
A=[17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;... 11,18,25,2,19];
D=diag(1:5);
D*A %用D左乘A,对A的每行乘以一个指定常数
11.2三角阵
triu及tril
11.3矩阵转置
a‘共轭转置,a.‘为普通矩阵转置(并不是顺时针旋转90),rot90(a)表示逆时针旋转90
11.4矩阵的翻转
对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依次类推。
MATLAB对矩阵A实施左右翻转的函数是fliplr(A)。
矩阵的上下翻转 MATLAB对矩阵A实施上下翻转的函数是flipud(A)。
11.5方阵的行列式
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。
11.6矩阵的秩与迹
1.矩阵的秩 矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。
2.矩阵的迹 矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。
11.7向量和矩阵的范数
向量的3种常用范数及其计算函数
在MATLAB中,求向量范数的函数为:
(1) norm(V)或norm(V,2):计算向量V的2—范数。
(2) norm(V,1):计算向量V的1—范数。
(3) norm(V,inf):计算向量V的∞—范数。
在MATLAB中,计算矩阵A的3种条件数的函数是:
(1) cond(A,1) 计算A的1—范数下的条件数。
(2) cond(A)或cond(A,2) 计算A的2—范数数下的条件数。
(3) cond(A,inf) 计算A的 ∞—范数下的条件数。
11.8矩阵的特征值与特征向量
在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:
(1) E=eig(A):求矩阵A的全部特征值,构成向量E。
(2) [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
(3) [V,D]=eig(A,‘nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
11.9
关系运算
MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。
它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。
a = b表示把b赋值给同维的矩阵a
关系运算符的运算法则为:
(1) 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。
(2) 当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
产生5阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。
(1) 生成5阶随机方阵A。 A=fix((90-10+1)*rand(5)+10)
(2) 判断A的元素是否可以被3整除。
P=rem(A,3)==0 其中,rem(A,3)是矩阵A的每个元素除以3的余数矩阵。
此时,0被扩展为与A同维数的零矩阵,P是进行等于(==)比较的结果矩阵。
建立矩阵A,然后找出大于4的元素的位置。
(1) 建立矩阵A。 A=[4,-65,-54,0,6;56,0,67,-45,0]
(2) 找出大于4的元素的位置。 find(A>4)
12.
solve是符号解(解析解),roots是数值解 用求特征值的方法解方程。
3x5-7x4+5x2+2x-18=0 p=[3,-7,0,5,2,-18];
A=compan(p); %A的伴随矩阵
x1=eig(A) %求A的特征值
x2=roots(p) %直接求多项式p的零点
矩阵的超越函数
1.矩阵平方根sqrtm sqrtm(A)计算矩阵A的平方根。
2.矩阵对数logm logm(A)计算矩阵A的自然对数。
此函数输入参数的条件与输出结果间的关系和函数sqrtm(A)完全一样
矩阵指数expm、expm1、expm2、expm3 expm(A)、expm1(A)、expm2(A)、expm3(A)的功能都求矩阵指数eA。
4.普通矩阵函数funm funm(A,‘fun’)用来计算直接作用于矩阵A的由‘fun’指定的超越函数值。当fun取sqrt时,funm(A,‘sqrt’)可以计算矩阵A的平方根,与sqrtm(A)的计算结果一样。
13.自然对数相关
exp,即自然对数表示为exp(x)。
log(X) %自然对数
log2(X) %以2为底
log10(X) %以10为底
14.多项式乘除法
1 p1=conv([1,0,2],conv([1,4],[1,1])); %conv表示多项式相乘 2 p2=[1 0 1 1]; 3 [q,r]=deconv(p1,p2); 4 cq=‘商多项式为 ‘; cr=‘余多项式为 ‘; %disp为屏幕输出函数 5 disp([cq,poly2str(q,‘s‘)]),disp([cr,poly2str(r,‘s‘)]) % poly2str表示生成多项式
商多项式为 s + 5
余多项式为 5 s^2 + 4 s + 3
15.
polyval(p,x)计算在X中任意元素处的多项式p的估值。
poly(A)求矩阵的特征多项式。
[d,v] = eig(A)其中d是矩阵的特征向量,V是特征值。