Matlab 数组与矩阵

矩阵 

1、v2=1:3:18  ;表示的是从1 开始  18 结束,间隔为3 的一个等差数列

v2 =

     1     4     7    10    13    16


2、linspace(1,10,9);,介于1-10 之间,取9个数,使得他们是一个等差数列
>> linspace(1,10,9)

ans =

    1.0000    2.1250    3.2500    4.3750    5.5000    6.6250    7.7500    8.8750   10.0000

3、 logspace(1,10,9) 等比数列
ans =

   1.0e+10 *

    0.0000    0.0000    0.0000    0.0000    0.0000    0.0004    0.0056    0.0750    1.0000


4、v(2)  // matlab 中的下标都是从1开始的,不是0
ans =

     2

5、>> c=[1;3;4;65]  // 列向量的创建,行与行之间的用;隔开

c =

     1
     3
     4
    65
6、>> mat=[1:4;455,667,6,77]  // 2行4列的矩阵

mat =

     1     2     3     4
   455   667     6    77

7、 randi([1 10],[4,3])  随机一个在1-10 之间,4行3列的矩阵
ans =

     9     7    10
    10     1    10
     2     3     2
    10     6    10
8、zeros(6)  6介0 矩阵

ans =

     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0


9、 eye(6)  6介单位矩阵

ans =

     1     0     0     0     0     0
     0     1     0     0     0     0
     0     0     1     0     0     0
     0     0     0     1     0     0
     0     0     0     0     1     0
     0     0     0     0     0     1

10 、diag([1,4,6,7])   // 生成括号中的单位矩阵

ans =

     1     0     0     0
     0     4     0     0
     0     0     6     0
     0     0     0     7


11、  M =randi([1,9],[3,5])

M =

     9     2     8     1     7
     5     4     9     8     7
     8     9     6     9     7



12、 M =randi([1,9],[3,4])

M =

     4     7     1     7
     6     1     1     3
     2     3     8     9

>> reshape(M,2,6)

ans =

     4     2     1     1     8     3
     6     7     3     1     7     9



13、>> diag(1:5)

ans =

     1     0     0     0     0
     0     2     0     0     0
     0     0     3     0     0
     0     0     0     4     0
     0     0     0     0     5

>> diag(1:4,1)  次对角线

ans =

     0     1     0     0     0
     0     0     2     0     0
     0     0     0     3     0
     0     0     0     0     4
     0     0     0     0     0

>> diag(1:5)+ diag(1:4,1)

ans =

     1     1     0     0     0
     0     2     2     0     0
     0     0     3     3     0
     0     0     0     4     4
     0     0     0     0     5

二、矩阵的基本操作

1、矩阵行列式变换  收尾行
M =

     4     7     1     7
     6     1     1     3
     2     3     8     9

>>  flipud(M)

ans =

     2     3     8     9
     6     1     1     3
     4     7     1     7


2、flip([123, 344,555])

ans =

   555   344   123

3、rot90(M)

ans =

     7     3     9
     1     1     8
     7     1     3
     4     6     2


4、  A=[1 2;3 4]

A =

     1     2
     3     4

>> repmat(A,2,3)

ans =

     1     2     1     2     1     2
     3     4     3     4     3     4
     1     2     1     2     1     2
     3     4     3     4     3     4


5、A =

     1     2
     3     4

>> repelem(A,2,3)

ans =

     1     1     1     2     2     2
     1     1     1     2     2     2
     3     3     3     4     4     4
     3     3     3     4     4     4



6、 E=[]

E =

     []

>> size(E)

ans =

     0     0

>> [E A]

ans =

     1     2
     3     4

7、diff([1 3 45 5 ])   // 差值   difference

ans =

     2    42   -40
E=[E,randi([1,6])]

E =

     1

>> E=[E,randi([1,6])]

E =

     1     3

>> E=[E,randi([1,6])]

E =

     1     3     3

>> E=[E,randi([1,6])]

E =

     1     3     3     5

>> E=[E,randi([1,6])]

E =

     1     3     3     5     5

>> E=[E,randi([1,6])]

E =

     1     3     3     5     5     2

>> E=[E,randi([1,6])]

E =

     1     3     3     5     5     2     3

>> E=[E,randi([1,6])]

E =

     1     3     3     5     5     2     3     3

>> 

三、矩阵的简单运算

1、 [1 3  4 6]*3   // 矩阵的乘法 加法

ans =

     3     9    12    18



2、矩阵之间的加减法
C=[2  5  7 88 8]

C =

     2     5     7    88     8

>> D=[24  55  75 858 85]

D =

    24    55    75   858    85

>> C+D

ans =

    26    60    82   946    93


2、矩阵的乘法   对应原始相乘
C.*D

ans =

          48         275         525       75504         680


3、 矩阵对应位置的乘方

>> A=[ 1 3 4]

A =

     1     3     4

>> B=[2 4 0]

B =

     2     4     0

>> A.^B  【1^1    3^4   4^0】

ans =

     1    81     1

 T(:,:,1)% T的括号中第一个: 表示的是所有的行
 第二个: 表示的是所有的列 

 Question:建立一个 3*4 的矩阵 ,连续创建5页,形成一个3位的数据


M=randi([1,9],[3,4])

M =

     6     3     2     9
     7     7     2     4
     7     6     5     6

>> T(:,:,1)=M

T =

     6     3     2     9
     7     7     2     4
     7     6     5     6

>> T(:,:,2)=randi([1,9],[3,4])

T(:,:,1) =

     6     3     2     9
     7     7     2     4
     7     6     5     6


T(:,:,2) =

     3     5     9     2
     7     7     5     3
     3     9     2     8

>> T(:,:,3)=randi([1,9],[3,4])

T(:,:,1) =

     6     3     2     9
     7     7     2     4
     7     6     5     6


T(:,:,2) =

     3     5     9     2
     7     7     5     3
     3     9     2     8


T(:,:,3) =

     3     9     3     4
     8     4     6     8
     3     2     5     6

>> T(:,:,4)=randi([1,9],[3,4])

T(:,:,1) =

     6     3     2     9
     7     7     2     4
     7     6     5     6


T(:,:,2) =

     3     5     9     2
     7     7     5     3
     3     9     2     8


T(:,:,3) =

     3     9     3     4
     8     4     6     8
     3     2     5     6


T(:,:,4) =

     5     7     6     5
     9     7     1     8
     3     4     1     9

>> T(:,:,5)=randi([1,9],[3,4])

T(:,:,1) =

     6     3     2     9
     7     7     2     4
     7     6     5     6


T(:,:,2) =

     3     5     9     2
     7     7     5     3
     3     9     2     8


T(:,:,3) =

     3     9     3     4
     8     4     6     8
     3     2     5     6


T(:,:,4) =

     5     7     6     5
     9     7     1     8
     3     4     1     9


T(:,:,5) =

     2     1     8     2
     6     4     3     6
     5     2     5     3







>> size(T)

ans =

     3     4     5




>> whos
  Name      Size             Bytes  Class     Attributes
          
  M         3x4                 96  double              
  T         3x4x5              480  double  

 
>> numel(T)

ans =

    60

// 绝对值==================================================================

>> V=randi([-5 5],[1 5])

V =

     2     2     3    -1    -5

>> abs(V)

ans =

     2     2     3     1     5



//  ======================================================================
>> sign(V)  % 单位 

ans =

     1     1     1    -1    -1



// =======================================================================

>> prod(V)   % 矩阵内的乘积

ans =

    60

>>   cumsum(V)  %   2 第一个的值 4是前面连个的和7是前面三个的和  

ans =

     2     4     7     6     1


>> cumprod(V)  2 第一个的值 4是前面连个的乘积 12是前面三个的乘积

ans =

     2     4    12   -12    60


>> cummax(V)

ans =

     2     2     3     3     3

>> cummin(V)

ans =

     2     2     2    -1    -5




=============================================================================

>> M

M =

     6     3     2     9
     7     7     2     4
     7     6     5     6

>> min(M)

ans =

     6     3     2     4


>> max(M)

ans =

     7     7     5     9


 四、逻辑属性

>> r=rand(1,5)

r =

    0.2290    0.9133    0.1524    0.8258    0.5383

>> r>0.5

ans =

  1×5 logical 数组

   0   1   0   1   1


//===================================================================


>> u=r>0.5

u =

  1×5 logical 数组

   0   1   0   1   1

>> r(u)

ans =

    0.9133    0.8258    0.5383


//=======================================================================

>> vec=[5 7 8 9 7 0]

vec =

     5     7     8     9     7     0

>> vc=[0 1 0 1 0 0]

vc =

     0     1     0     1     0     0

>> vec(vc)
数组索引必须为正整数或逻辑值。
 
>> vec(vc=1)
无法将类型为 string 的值用作索引。
 
>> vc=logical([0 1 0 1 0 0])

vc =

  1×6 logical 数组

   0   1   0   1   0   0

//=====================================================================

>> 
>> log_true=ones(3,4,'logical')

log_true =

  3×4 logical 数组

   1   1   1   1
   1   1   1   1
   1   1   1   1

//=======================================================================




>>R=rand(50,50)

>> all(R>=0.001)

ans =

  1×50 logical 数组

  列 1 至 34

   1   1   1   1   1   1   1   1   1   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1

  列 35 至 50

   1   1   1   0   1   1   1   1   1   1   1   0   1   1   1   1

//=============================================================================

>> any(R<0.001)

ans =

  1×50 logical 数组

  列 1 至 34

   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

  列 35 至 50

   0   0   0   1   0   0   0   0   0   0   0   1   0   0   0   0


//===================================================================
>> R1=rand(1,10)

R1 =

    0.8866    0.4468    0.8160    0.0983    0.8596    0.0276    0.8992    0.8999    0.5241    0.1202

>> R1>0.5

ans =

  1×10 logical 数组

   1   0   1   0   1   0   1   1   1   0

>> b=R1>0.5

b =

  1×10 logical 数组

   1   0   1   0   1   0   1   1   1   0

>> find(b)   // find 返回的是索引

ans =

     1     3     5     7     8     9



//=======================================================================
>> b=R1>0.5

>> n= find(b,1,'first')  //找到第一个逻辑正的索引

n =

     1



//====================================================================

>> v1=[1 2 4 5]

v1 =

     1     2     4     5

>> v2=[1 2 4 5]

v2 =

     1     2     4     5

>> all(v1==v2)

ans =

  logical

   1




>> v3=[1 2  4  4 5]

v3 =

     1     2     4     4     5

>> all(v1==v3)
对于此运算,数组的大小不兼容。



//===================================================================

>> v3=[1 2  4  4 5]

v3 =

     1     2     4     4     5

>> all(v1==v3)
对于此运算,数组的大小不兼容。

相关文档
 
>> isequal(v1,v3)

ans =

  logical

   0


//==================================================================
练习   删除矩阵中的负数  Vec=[11 -5  33 2 8 -4 25]

>> Vec=[11 -5  33 2 8 -4 25]

Vec =

    11    -5    33     2     8    -4    25

>> x=find(Vec<0)

x =

     2     6

>> Vec(x)=[]

Vec =

    11    33     2     8    25


//一句matlab 就能实现

>> Vec(find(Vec<0))=[]

Vec =

    11    33     2     8    25


// 这个是速度最快的
Vec=[11 -5  33 2 8 -4 25];
Vec(Vec<0)=[];
>> Vec=[11 -5  33 2 8 -4 25]

Vec =

    11    -5    33     2     8    -4    25

>> Vec(Vec<0)=[]

Vec =

    11    33     2     8    25



//============================================================================
// 练习, 有 一个数组原始 1 或者 1  ,1000个元素,找出前面是1 后面是0  ,和前面是0 后面是1 的元素

>> rng(0)
>> V=randi([0,1],[1,1000]);
>> % switching   0  ->1    ,1->0

// 如下

>> V(1:10)

ans =

     1     1     0     1     1     0     0     1     1     1

>> diff(V(1:10))

ans =

     0    -1     1     0    -1     0     1     0     0

>> find(diff(V(1:10))==-1)

ans =

     2     5

>> find(diff(V(1:10))==1)

ans =

     3     7


* 0  ->1    ,1->0的这种情况有多少个
>> size(diff(V)==1)

ans =

     1   999

>> numel(diff(V)==1)

ans =

   999

>> sum(diff(V)==1)

ans =

   243

>> sum(diff(V)==-1)

ans =

   243



//===================================================================================
练习    

>> U=randi([0 2],[1,1000]);% U 中有 0-2之间的整数组成,有1000个
>> U(1:10)

ans =

     1     1     2     0     1     1     1     0     0     1

>> %1-2 的事件有多少次,有两种思路,可以将0转成NaN
>> U2(U2==0)==NaN

第二中思路,将数见减去 1 
>> U=U-1;
>> sum(diff(U)==-1)

ans =

   240



//=============================================================================
科学计数法的e 
>> 3.4444E5

ans =

      344440




















五、矩阵的乘法

矩阵之间的乘法

>> M1=randi([1,9],[3,4])

M1 =

     4     7     7     2
     3     4     6     9
     9     1     1     5


>> M2=randi([1,8],[4,3])

M2 =

     4     5     1
     3     3     8
     6     2     5
     8     4     2

>> M1*M2  矩阵的乘法  点乘,第一个矩阵的列是和第二个矩阵的行数要相同

ans =

    95    63    99
   132    75    83
    85    70    32


//  ===========================================================================
>> M0=randi([1,9],[4,4])

M0 =

     5     5     1     1
     1     6     5     9
     8     7     1     7
     4     4     7     9

>> M0^2  两个矩阵的乘法,第一个矩阵的列是和第二个矩阵的行数要相同

ans =

    42    66    38    66
    87   112    99   171
    83   117    93   141
   116   129    94   170

>> M0.^2 这个表示的矩阵中的数据的平方

ans =

    25    25     1     1
     1    36    25    81
    64    49     1    49
    16    16    49    81


>> M0.^2.5

ans =

   55.9017   55.9017    1.0000    1.0000
    1.0000   88.1816   55.9017  243.0000
  181.0193  129.6418    1.0000  129.6418
   32.0000   32.0000  129.6418  243.0000

>> M0.^5

ans =

        3125        3125           1           1
           1        7776        3125       59049
       32768       16807           1       16807
        1024        1024       16807       59049
// ==============================================================================

>> size(M0)

ans =

     4     4

>> M0

M0 =

     5     5     1     1
     1     6     5     9
     8     7     1     7
     4     4     7     9

>> V2=randi([1,9],[4,1])

V2 =

     5
     3
     3
     7

>> M0*V2

ans =

    50
   101
   113
   116


//=================================================================





向量之间的乘法:

//=============================================================
点乘
>> V1=randi([1,5],[1,3])

V1 =

     5     2     4

>> V2=randi([1,9],[1,3])

V2 =

     1     6     4

>> V1.*V2  向量之间对应的元素的点乘

ans =

     5    12    16


内积
有两种方法:
>> % 内积   假如V1=[a b c ]  V2=[a1 b1 c1],那么V1V2 的内积就是 a*a1+ b*b1+c*c1
>> sum(V1.*V2)// 第一种

ans =

    33

>> V1*V2' % 内积  第二种

ans =

    33

注意:V2' 是矩阵的装置它的优先级是高于乘法的



//==================================================
差积

>> cross(V1,V2)

ans =

   -16   -16    28


>> V3=[1]

V3 =

     1

>> cross(V3,V3)
错误使用 cross (第 29 行)
在获取交叉乘积的维度中,A 和 B 的长度必须为 3。
 


五、常用的矩阵

希尔伯特方矩阵
>> hilb(3)

ans =

    1.0000    0.5000    0.3333
    0.5000    0.3333    0.2500
    0.3333    0.2500    0.2000


// pascal 矩阵
>> pascal(5)

ans =

     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


// magic矩阵  行和列的和都是一样的
>> 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


//=========================================================================
找出一个矩阵中的某个值的具体位置(索引)
>> M=randi([1,9],[4,4])

M =

     4     6     7     6
     9     1     7     2
     8     8     7     7
     9     9     4     1

>> find(M==1)

ans =

     6
    16

>> [i,j]=ind2sub(size(M),find(M==1))  // 找到这个索引和位置

i =

     2
     4


j =

     2
     4


//==========================================================================

矩阵的基本使用总结:

 

 

A =

     1     2     3     4     5
    12    12    14    56   657
    23    46    34    67    56
A(:,3) % 表示的是返回A矩阵的第3列的向量----------------------------
   ans =

     3
    14
    34

A(2,:) % 表示返回矩阵A的第2行的向量
 ans =

    12    12    14    56   657

A(:,2:5) % 表示返回的是从第二列到第5类的子矩阵---------------------
ans =

     2     3     4     5
    12    14    56   657
    46    34    67    56
A(1:2,3:5)  % 表示返回一个2*3的矩阵-----------------------------
ans =

     3     4     5
    14    56   657


B(:) % 表示将矩阵B中的每个元素按照列 合并成一个列向量----------------------------
ans =

     1
     2
     3
     1
     2
     3
     1
     2
     3
     1
     2
     3
     1
     2
     3
A(2,5)% 表示返回矩阵A中的第2行第5列的那个元素   --------------------
657



 A(:,[2 5])  % 表示返回矩阵中第2 5 列的所有列向量-------------------------

ans =

     2     5
    12   657
    46    56





 [max_A,index]=max(A,[],1)  求出矩阵每列中的最大值:--------------------

max_A =

    23    46    34    67   657


index =

     3     3     3     3     2


 [min_A,index]=min(A,[],2) 求出矩阵每行中的最小值:--------------------


min_A =

     1
    12
    23


index =

     1
     1
     1

矩阵的合并:

horzcat(A,B)  //水平合并

>> A=[1   2  3  4  5;

   12 12 14 56 657;

   23 46 34 67 56];

B=[1 1 1 1 1;

     2 2 2 2 2;

     3 3 3 3 3];
>> horzcat(A,B) %矩阵A,B左右合并

 竖直方向上的合并:

vertcat(A,B);

 矩阵的基本运算:

a、A+/-B,表示矩阵A和矩阵B中对应位置元素的相加 /减


 b、A.*B 和A./B: 表示的是A矩阵中和B矩阵中对应元素的乘除,是点元素,和顺序没有关系  

[1,2,3].*[4,5,6]   =1*4   2*5   3*6  =【4 10  18】  点乘   

 

 c、矩阵的乘法要严格遵守  A(m*n)*B(n*z)=Z(m*z)

 d、矩阵的除法,必须要求A(m*n).*B(m*n)=Z(m*n)

可以看成 A* B(-1),B(-1)表示的是B矩阵的逆,但是这种方法强烈不推荐。

 

 举例2:

 

 e、矩阵之间的点乘  必须要求A(m*n).*B(m*n)=Z(m*n)

 

 f、A^B  表示矩阵A的B 次幂(B是矩阵)

如果B是一个数字数字

 g、A.^B  表示矩阵A的B 次幂(B是矩阵点乘)

  如果B是数字,A(矩阵).^4 表示的是每个元素的做4次1

 如果B是矩阵:表示矩阵A的每个元素的B次幂

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
北航《精通matlab6.5》 第一章 基础准备及入门 1.1 MATLAB的安装和内容选择 1.2 Desktop操作桌面的启动 1.3 Command Window运行入门 1.4 Command Window操作要旨 1.5 Command History和实录指令diary 1.7 Workspace Browser和Array Editor 1.8 Launch Pad交互界面分类目录窗 1.9 Editor/Debugger和脚本编写初步 1.10 帮助系统 第二章 数值数组及其运算 2.1 引导 2.2 一维数组的创建和寻访 2.3 二维数组的创建 2.4 二维数组元素的标识 2.5 二维数组的子数组寻访和赋值 2.6 执行数组运算的常用函数 2.7 数组运算矩阵运算 2.8 多项式的表达方式及其操作 2.9 标准数组生成函数和数组操作函数 2.10 数组构作技法综合 2.11 高维数组 2.12 “非数”和“空”数组 2.13 关系操作和逻辑操作 第三章 字符串、元胞和构架数组 3.1 字符串数组 3.2 元胞数组 3.3 构架数组 3.4 关于数据类型的归纳性说明 第四章 数值计算 4.1 引言 4.2 LU分解和恰定方程组的解 4.3 矩阵特征值和矩阵函数 4.4 奇异值分解 4.5 函数的数值导数和切平面 4.6 函数的零点 4.7 函数极值点 4.8 数值积分 4.9 随机数据的统计描述 4.10 多项式拟合和非线性最小二乘 4.11 插值和样条 4.12 样条函数及其应用 4.13 Fourier分析 4.14 常微分方程 4.15 稀疏矩阵 第五章 符号计算 5.1 符号对象和符号表达式 5.2 符号表达式和符号函数的操作 5.3 符号微积分 5.4 符号积分变换 5.5 符号代数方程的求解 5.6 符号微分方程的求解 5.7 利用MAPLE的深层符号计算资源 5.8 可视化数学分析界面 第六章 数据和函数的可视化 6.1 引导 6.2 二维曲线绘图的基本操作 6.3 三维绘图的基本操作 6.4 特殊图形和高维可视化 6.5 三维图形的精细控制 6.6 图像 6.7 图形窗的图形编辑功能 6.8 函数绘图的简捷指令 6.9 图形的打印和输出 第七章 M文件和面向对象编程 7.1 入门 7.2 M文本编辑器 7.3 MATLAB控制流 7.4 脚本文件和函数文件 7.5 变量的检测传递和限权使用函数 7.6 串演算函数 7.7 函数句柄 7.8 创建用户工具箱 7.9 调试和剖析 7.10 面向对象编程 第八章 SIMULINK交互式仿真集成环境 8.1 引导 8.2 模型的创建 8.3 边续系统建模 8.4 子系统的创建、装帧及受控执行 8.5 离散时间系统和混合系统 8.6 SIMULINK的分析工具 8.7 数值计算方面的考虑 8.8 S函数模块 第九章 句柄图形 9.1 句柄图形体系 9.2 图形对象的操作 9.3 对象属性的获取和设置 9.4 为低层指令绘图准备图/轴 9.5 图形窗的色彩资源和光标属性 9.6 轴对象 9.7 句柄图形应用专题 第十章 图形用户界面GUI制作 10.1 入门 10.2 图形用户界面的设计原则和一般步骤 10.3 界面菜单 uimenu) 10.4 用户控件 uicontrol) 10.5 由M函数文件产生用户菜单和控件 10.6 图形用户界面设计工具 第十一章 MATLAB编译器 11.1 编译器概述 11.2 编译器的安装和配置 11.3 MATLAB编译器使用入门 11.4 编译指令mcc简介 11.5 编译文件的性能优化 11.6 创建独立的外部应用程序 第十二章 应用程序接口API 12.1 C语言MEX文件的编写 12.2 MAT数据文件的应用 12.3 MATLAB引擎技术的应用 12.4 MATLAB中ActiveX技术的应用 12.5 MATLAB中DDE技术的应用 第十三章 Notebook 13.1 Notebook的安装 13.2 Notebook的启动 13.3 M-book模板的使用 13.4 科技演讲稿的制作 附录A:索引 附录B:光盘使用说明 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值