Matlab入门基础详解【updating】

此文针对第一次接触matlab的同学,总结一些简单matlab应用/语法,因为博主主要用matlab打数学建模竞赛,所以所有matlab应用主要针对竞赛。博主目前想从事算法机器学习之类领域,因此深深意识到数学的重要性,因此参加2018美赛来督促自己学(竞)习(保)数(加)学(分),希望能在提高自己的同时,也可以为大家提供帮助~


第一章  Matlab中的数组操作


matlab中的运算和操作是以数组为对象的,

数组又包括:数值数组、字符数组、元胞数组等。

数值数组:(1)n元数值向量(行向量与列向量)

                  (2)数值矩阵

                  (3)由数值矩阵构成的元胞数组

几个标点符号的作用:

逗号:用来分开数组中的行元素。(可用空格代替)

分号:用来将矩阵中的行分开。(可用回车键代替)


冒号:相当于文字中的省略号。

中括号:界定数组的首与尾。


一、数组的建立


1.直接输入法

 matlab在创立数组时以逗号或空格表示分列,分号或回车表示分行。数组开头“[”、结尾“]”

 行数组:如a=[1,2,3,8,-1]

 列数组: b=[1;2;3;8;-1] 或a’
 矩阵:A= [2,4,1;8:-2:4;2,4,6]


2.通过数组编辑器生成矩阵

步骤:先建立空矩阵a=[], 然后在工作空间(workspace)中点开a进入数   组编辑器,输入元素。 


3.用函数创建数组      

定步长生成法: x=a:t:b   (t步长,省略是为1);

定数线性采样法: x=linspace(a,b,n),a与b是数组的第一个和最后一个元素,n是采样的总点数。


4.元胞数组的创建

元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。

组成元胞数组的元素可以是任何一种数据类型的量,每一个元素也可以具有不同的尺寸,每一个元素的内容也可以完

全不同,元胞数组的元素叫做元胞


建立元胞数组:{ }

a={'matlab',20;ones(2,3),1:10}

a = 
    'matlab'            [         20]
    [2x3 double]    [1x10 double]


二,数组的操作

注意 a(2,3), a([2,3]), a(1:3)的区别 -》 第一个是a矩阵第二行第三列的元素, 第二个是 矩阵第二个跟第三个元素组成的矩阵 第三个就是从1到3
1.元胞数组元素的提取:        
()和 { }有着本质的区别,
 { } 表示元胞的内容, 
()表示指定的元胞。
2.空数组的使用
B(1:2:5)=[]
删除矩阵A第3行:
                A(3,:)=[]
删除矩阵A第2列:
                A(:,2)=[]
3.常用数组函数
[m,n] = size(a); 获取a数组的行数与列数

n = length(a); 获取数组行数或者列数里最大的那一个 %通常获取一维数组的长度

b=sort(x),    [b,k]=sort(x) k是坐标的向量
在Matlab中排序某个向量(一维)时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可, 如果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A 中项的索引。排序是按升序进行的。由于在sort函数的结果中,是按升序排序的,要转换成降序,先用X=eye(n)生成一个n维的单位阵,然后用X=rot90(X)将其旋转为次对角线的单位阵,再用原来矩阵乘以X即可,如要讲A逆序排列采用如下步骤:
X=eye(size(A)); 

X=rot90(X); 
A=A*X;

假如a是一个2*n的矩阵,即两行. 

b=a(1,:); 

[c,pos]=sort(b);%pos为排序后的下标,c为第一行的排序结果; 
a(2,:)=a(2,pos);%第二行按照第一行排序的下标对应 
a(1,:)=c;%第一行结果重新赋给a 的第一行

 以下适用于m*n的矩阵按第一行排序 

[ b, pos ] = sort( a( 1, : ) ); 
a = a( :, pos );



reshape(x, 3, 5) 把数组x变成3行5列的矩阵

repmat(x,3,2) 数组的复制, 把数组复制3行,每行这个数组重复2次

sparse(a,b,c) 数组a,b,c的大小必须相同,数组a与b分别指定元素的行标与列标,数组c指定元素的值
A=sparse([2,4,18],[3,12,20],[-5,-3,-8]) 
创建稀疏矩阵A,A的(2,3),(4,12),(18,20)元素分别为-5,-3,-8,其余元素为零,A为18×20阶矩阵。

sum(A):矩阵A按列求和,返回一个行向量;
sum(A,2):矩阵A按行求和,返回一个列向量。
max(A):返回由矩阵各列的最大值构成的向量。 max(max(A))用于求整个矩阵的最大值
max(A,B):返回A与B对应元素最大值构成的矩阵
min(A),min(A,B)类似
b2=max(A')' 返回由矩阵A各行的最大值构成的列向量

diag命令
b=diag(A): 提取方阵A的对角线元素构成列向量b
A=diag(b): 用一维数组b的元素生成对角方阵A
 A=diag(b,k): b为一维数组,k为整数
 将b元素作为偏离主对角线的第k条对角生成方阵A  其余都是0

 find命令:
      find(A)  找出A的不为0的元素的下标
      find(A,k) 找出A的前k个不为0的元素的下标
      find(A,k,’last’)找出A的后k个不为0的元素的下标
      find(g(A)),其中g(A)是数组A的逻辑表达式,
      返回数组A中满足条件g(A)的元素下标。   
c1=find(B) [m,n]=find(B>=1&B<=3) 前者返回一个元素序号的向量 后者用一个2*x矩阵表示每个元素的二维坐标
   

nchoosek 来实现二项式系数或所有组合

语法:

C = nchoosek(n,k)

C = nchoosek(v,k)

描述:

C = nchoosek(n,k) 其中n和k是非负整数, 返回 n!/((n–k)! k!).
这是从n种情况中一次取出k种的组合的数量。
C = nchoosek(v,k), 其中v是一个长度为n的行向量,创建一个矩阵,该矩阵的行由每次从v中的n个元素取出k个取值的所有可能组合构成。矩阵 C 包含 n!/((n–k)! k!) 行和 k 列.


求连乘积 
    c1=prod(4:6) 直接出答案
    c2=cumprod(4:6) 把间接结果输出

perms([2,1,8]) 求数组的全排列

  zeros(m): m阶全零方阵 
  zeros(m,n): m×n阶全零方阵 
  eye(m): m阶单位阵 
  ones(m): m阶全1方阵 
  ones(m,n): m×n阶全1方阵 

. matlab里和随机数有关的函数:

1 rand:产生均值为0.5、幅度在0~1之间的伪随机数

2 randn:产生均值为0、方差为1的高斯白噪声

3 randperm(n):产生1n的均匀分布随机序列

4 normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵

rand

rand(n):生成01之间的n阶随机数方阵

rand(m,n):生成01之间的m×n的随机数矩阵

randn

randn()命令是产生白噪声的,白噪声应该是0均值,方差为1的一组数,同randrandn(n)randn(m,n)

rand0-1的均匀分布,randn是均值为0方差为1的正态分布

. 功能:生成服从正态分布的随机数

Rnormrnd(MU,SIGMA)

Rnormrnd(MU,SIGMA,m)

Rnormrnd(MU,SIGMA,m,n)

说明:

Rnormrnd(MU,SIGMA):生成服从正态分布(MU参数代表均值,DELTA参数代表标准差)的随机数。输入的向量或矩阵MUSIGMA必须形式相同,输出R也和它们形式相同。标量输入将被扩展成和其它输入具有 相同维数的矩阵。

Rnorrmrnd(MU,SIGMA,m):生成服从正态分布(MU参数代表均值,DELTA参数代表标准差) 随机数矩阵,矩阵的形式由m定义。m是一个1×2向量,其中的两个元素分别代表返回值R中行与列的维数。

R = normrnd(MU,SIGMA,m,n)

其中MU为均值,SIGMA为标准方差,mn为矩阵大小;

三、求矩阵中所有元素的均值和方差

x是一个m*n的矩阵

均值:sum(x(:))/(m*n)

方差:var(x(:))


三、数组的运算
注意下 不等于是 ~= 矩阵里点乘点除跟直接乘除的区别
           A+B,A-B,k*A
           A.*B,   A./B,  A.^n    

几个例子~
B=A+(-2)*(A>4)+(A<0) 将A中大于4的元素减去2,小于0的元素加上1,其余元素不变构成矩阵B。
B=A.*(mod(A,3)==0) 将A中能被3整除的元素保留其余元素变为零构成矩阵B

数组集合的运算  
setdiff(a,b)  (a与b的差集)
intersect(a,b) (a与b的交集)
union(a,b)(a与b的并集)

矩阵的基本函数

 转置A’

行列式 det(A),

特征值eig(A), 

秩rank(A), 

逆inv(A), 

迹trace(A),

条件数cond(A)


某两行/列进行交换 a([n  m],:)=a([m n],:),其中的mn就是你想交换的行。至于列交换:a(:,[m n])=a(:,[n m])。

求解方程组:
solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,求解变量分别v1,v2,…,vn。
具体例子如下:
x^2 + x*y + y = 3
x^2 - 4*x + 3 = 0
解法:
>> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')
运行结果为
x =
1 3
y =
1 -3/2
即x等于1和3;y等于1和-1.5

>>[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3= 0','x','y')
x =
1 3
y =
1 -3/2
结果一样,二元二方程都是4个实根。
对于矩阵的方程组要用到线代的知识了 比如
解方程组Ax = b (A是矩阵, b是向量
应该是 x = inv(a)*b
相关文章
相关标签/搜索