MATLAB软件版本:MATLAB R2019b

本文是博主从零开始学Matlab的记录,适合第一次接触Matlab的同学阅读。

因为CSDN没有Matlab语言的代码块格式,所以本文代码块均按C++语法高亮显示,为了方便显示,注释用//标注(实际上Matlab注释用%标注)。

@[TOC]

1.内置常量

>> eps // 计算机的最小数

ans =

   2.2204e-16

>> pi // 圆周率 

ans =

    3.1416

>> i // sprt(-1)

ans =

   0.0000 + 1.0000i

>> j // sprt(-1)

ans =

   0.0000 + 1.0000i

2.产生行向量

x=0:1:5 // [0,5]区间产生行向量,间隔为1
x=0:5 // [0,5]区间产生行向量,默认间隔为1
>> t=[0:0.2:0.6] // [0,0.6]区间产生行向量,间隔为0.2  
// 写成 t=0:0.2:0.6 效果也一样
t =

         0    0.2000    0.4000    0.6000

>> t=[0:0.2:0.7]

t =

         0    0.2000    0.4000    0.6000

>> t=linspace(1,2,3) // [1,2]区间按线性(等差数列)产生行向量,个数为3

t =

    1.0000    1.5000    2.0000

>> t=linspace(1,2,4)

t =

    1.0000    1.3333    1.6667    2.0000

>> t=logspace(1,2,2) // [10^1,10^2]区间按等比数列产生行向量,个数为2

t =

    10   100

>> t=logspace(1,2,3)

t =

   10.0000   31.6228  100.0000

3.查看已有的变量信息

>> who

您的变量为:

ans  t    

>> whos
  Name      Size            Bytes  Class     Attributes

  ans       1x1                 8  double              
  t         1x3                24  double              

>> size(t) // 列出n,m

ans =

     1     3

>> length(t) // 列出max(n,m)

ans =

     3

4.矩阵赋值并取出子矩阵

冒号表示按列堆叠成向量。

>> A=[1,2;3,4]

A =

     1     2
     3     4

>> A(:) // 按列取出所有元素

ans =

     1
     3
     2
     4

>> A(:,2) // 取出第2列

ans =

     2
     4

>> A(2,:) // 取出第2行

ans =

     3     4

>> A=[1,2,3;4,5,6;7,8,9]

A =

     1     2     3
     4     5     6
     7     8     9

>> A(2:3,1:2) // 取出第2行到第3行,第1列到第2列的所有元素

ans =

     4     5
     7     8

5.删除矩阵的整行或整列

>> A=[1,2;3,4]

A =

     1     2
     3     4

>> A(:,1)=[] // 删去第一列,即把第一列变成空矩阵[]

>> B=[4,5;6,7]

B =

     4     5
     6     7

>> B(1,:)=[] // 删去第一行

B =

     6     7

6.合并矩阵

>> A=[1,2,3]

A =

     1     2     3

>> B=[4,5,6]

B =

     4     5     6

>> C=[A,B] // 按行合并矩阵

C =

     1     2     3     4     5     6

>> C=[A;B] // 按列合并矩阵

C =

     1     2     3
     4     5     6

7.矩阵的变换(转置、重塑、旋转)

(1)转置

>> A=[1+i,2+i;3-i,4+i]

A =

   1.0000 + 1.0000i   2.0000 + 1.0000i
   3.0000 - 1.0000i   4.0000 + 1.0000i

>> A' // 共轭转置,转置后,虚部变为相反数

ans =

   1.0000 - 1.0000i   3.0000 + 1.0000i
   2.0000 - 1.0000i   4.0000 - 1.0000i

>> A.' // 非共轭转置,转置后,虚部不变

ans =

   1.0000 + 1.0000i   3.0000 - 1.0000i
   2.0000 + 1.0000i   4.0000 + 1.0000i

另外,对于实数矩阵的转置来说,A'A.'没有区别。

(2)重塑

>> A=[1,2,3;4,5,6]

A =

     1     2     3
     4     5     6

>> reshape(A,3,2) // 按列顺序重塑矩阵A为3*2

ans =

     1     5
     4     3
     2     6

(3)逆时针旋转90度

>> A

A =

     1     2     3
     4     5     6

>> rot90(A)

ans =

     3     6
     2     5
     1     4

8.特殊矩阵

>> eye(3) // 单位矩阵

ans =

     1     0     0
     0     1     0
     0     0     1

>> eye(3,4)

ans =

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

>> ones(2) // 全为1的矩阵

ans =

     1     1
     1     1

>> ones(2,3)

ans =

     1     1     1
     1     1     1

>> zeros(2) // 全为0的矩阵

ans =

     0     0
     0     0

>> zeros(2,3)

ans =

     0     0     0
     0     0     0

>> diag([1,2,3]) // 产生对角矩阵

ans =

     1     0     0
     0     2     0
     0     0     3

>> rand(2) // 创建随机矩阵,服从均匀分布

ans =

    0.2785    0.9575
    0.5469    0.9649

>> rand(2,1) 

ans =

    0.1576
    0.9706

>> randn(2) // 创建随机矩阵,服从正态分布

ans =

    0.5377   -2.2588
    1.8339    0.8622

>> randn(2,1)

ans =

    0.3188
   -1.3077

>> randperm(5) // 产生随机排列

ans =

     5     3     1     2     4

9.输入

s=input('please input a string: ','s');

10.输出

>> x=rand(1,3)

x =

    0.9134    0.6324    0.0975

>> fprintf("x=%.3f\n",x) // 输出x的所有元素,保留3位小数
x=0.913
x=0.632
x=0.098
>> fprintf("x=%.3f\n",x(2)) // 输出x[2](可省略第1行的行下标)
x=0.632
>> fprintf("x=%.3f\n",x(1,2)) // 输出x[1][2]
x=0.632

>> y=[1,2;3,4]

y =

     1     2
     3     4

>> fprintf("y=%.3f\n",y) // 按列输出y的所有元素
y=1.000
y=3.000
y=2.000
y=4.000
>> fprintf("y=%.3f\n",y(2,1)) // 输出y[2][1]
y=3.000
>> fprintf("y=%.3f\n",y(1)) // 输出y[1][1](可省略第1列的列下标)
y=1.000
>> fprintf("y=%.3f\n",y(2)) // 输出y[2][1](可省略第1列的列下标)
y=3.000

11.函数

编写函数,存于文件ave.m中,代码如下:

% You can get the average of a vector.
% Just input "ave;" to run this function.
function y = ave(x)
x = input('input a vector x=');
[m,n] = size(x);
if ~(m==1|n==1)
    error('please input a vector which is m=1 or n=1')
end
y = sum(x)/length(x);
fprintf("y=%.2f\n",y);