目录

  1. 清空环境变量及命令
  2. 变量命令规则
  3. MATLAB数据类型
  4. MATLAB矩阵操作
  5. MATLAB逻辑与流程控制
  6. MATLAB基本绘图操作
  7. MATLAB文件导入

4.MATLAB矩阵操作

4.1矩阵的定义与构造

Matlab可以方便的对矩阵进行运算,以下为几个简单的例子

A = [1 2 3 5 8 5 4 6]
B = 1:2:9 %生成一个行向量(等差数列),公差为2
C = repmat(B, 3, 1) %将B看成整体复制并重新拼接成3行1列的矩阵
D = ones(2, 4) %生成一个2行4列的全1矩阵

运行之后,结果如下:

A =

     1     2     3     5     8     5     4     6

B =

     1     3     5     7     9

C =

     1     3     5     7     9
     1     3     5     7     9
     1     3     5     7     9

D =

     1     1     1     1
     1     1     1     1

通过结果应该可以比较容易的理解以上函数的作用,在Matlab中常用的
Matlab函数可以参考Matlab常用函数

4.2矩阵的四则运算

矩阵的基本运算包括矩阵的加法,减法,数乘,转置,共轭和共轭转置
矩阵的加法满足运算律(A,B都是同型矩阵):应该注意的是只有同型矩阵之间才可以进行加法,我们先生成两个简单矩阵A和B

A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]

运行后为:

A =

     1     2     3     4
     5     6     7     8

B =

     1     1     2     2
     2     2     1     1

这两个矩阵可以进行加减法运算

C = A + B
D = A - B

运行后为

C =

     2     3     5     6
     7     8     8     9

D =

     0     1     1     2
     3     4     6     7

即,A和B对应元素相加减即可。矩阵的加减运算都是线性运算。矩阵还可以进行数乘运算,即用一个数n乘以一个矩阵,等于用这个数乘以这个矩阵中的每一个元素,数乘也是线性运算,例如运行3*B,会得到:

ans =

     3     3     6     6
     6     6     3     3

矩阵的乘法运算和线性代数的运算规则一样,不是任意两个矩阵都可以相乘,必须满足第一个矩阵的列与第二个矩阵的行相等,即一个m行n列的矩阵与一个n行p列的矩阵可以相乘,得到一个m行p列的矩阵,如A*B'可以相乘,A为2行4列,B'为4行2列,乘完得到一个2行2列的矩阵:

ans =

    17    13
    41    37

这里介绍一个Matlab中矩阵的点乘和点除运算,即将两个矩阵的对应元素相乘或相除:

F = A .* B
H = A ./ B

会得到:

F =

     1     2     6     8
    10    12     7     8

H =

    1.0000    2.0000    1.5000    2.0000
    2.5000    3.0000    7.0000    8.0000

严格来说,矩阵是不存在除法的,Matlab中对于矩阵相除分为左除\和右除/
如 G B = A,如果要求矩阵G,即在等式两边的右边同时乘以B的逆(这里B的逆必须存在),变为 G B pinv(B) = A pinv(B),即 G=A * pinv(B)。在这里必须说明一下,Matlab中,对于方阵求逆可以用 inv() 函数来求,而对于一般行列数不等的矩阵,则可以考虑计算矩阵的 Moore-Penrose逆,用 pinv() 来求。在Matlab中,等式两边同时右乘一个矩阵的逆可以用右除来表示即 G = A / B:

G =

    1.8333   -0.1667
    3.1667    1.1667

运行A * pinv(B)可以得到与上面一样的结果。
如果A和B都是方阵,Matlab的左除运算可以看成要求 B G = A 的 G,等式两边的左边同时乘以 B 的逆,变为 inv(B) B G = inv(B) A ,即 G = inv(B) * A,用左除表示为 G = B \ A 。

4.3矩阵的下标

A = magic(5) %生成一个5阶magic矩阵
B = A(2,3) %将A矩阵中第2行,第3列的数赋值给B
C = A(3,:) %将A矩阵中的第3行所有列赋给C,即将A的第3行全部元素赋给C
D = A(:,4) %将A矩阵中的第4列所有行赋给D,即将A的第4列所有元素赋给D
[m, n] = find(A > 20) %寻找A中元素数值大于20的元素的位置,并返回索引矩阵

运行后显示:

A =

    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

B =

     7

C =

     4     6    13    20    22

D =

     8
    14
    20
    21
     2

m =

     2
     1
     5
     4
     3

n =

     1
     2
     3
     4
     5

5.MATLAB逻辑与流程控制

与大多数编程语言一样,matlab的逻辑与流程控制的语法与许多高级语言类似。

5.1 if ... else ... end

A = rand(1,10) %生成随机矩阵
limit = 0.75;

B = (A > limit);   % B是一个逻辑值
if any(B)
  fprintf('Indices of values > %4.2f: \n', limit);
  disp(find(B))
else
  disp('All values are below the limit.')
end

这是一个选择结构,具体结果大家可以自己去运行一下。

5.3 switch ... case ... end

mynumber = input('Enter a number:');

switch mynumber
    case -1
        disp('negative one');
    case 0
        disp('zero');
    case 1
        disp('positive one');
    otherwise
        disp('other value');
end

这也是一个选择结构。

5.2 for ... end&while ... end

k = 10;
hilbert = zeros(k,k);      %预分配内存给hilbert矩阵

for m = 1:k %从1到k进行循环
    for n = 1:k
        hilbert(m,n) = 1/(m+n -1);
    end
end
hilbert

这是一个循环结构,除了for循环,还有一种while循环,如下:

%求n的阶乘的几种方法
n = 1;
nFactorial = 1;
while nFactorial < 5
    n = n + 1;
    nFactorial = nFactorial * n; %使用循环进行连乘
end
nFactorial

factorial(5) %使用matlab内置求阶乘的函数
prod(1:5) %使用连乘积函数进行1:5的连乘

运行结果最终都是一样的:

nFactorial =

   120

ans =

   120

ans =

   120

6.MATLAB基本绘图操作

6.1二维平面绘图

x = 0:0.01:2*pi; %生成0到2pi之间间隔为0.01的行向量
y = sin(x); %将x视为自变量,带入到正弦函数中
figure
plot(x, y) %绘制函数图像
title('y = sin(x)') %设置图像的标题
xlabel('x') %设置x轴的标签
ylabel('sin(x)') %设置y轴的标签
xlim([0 2*pi]) %限制x轴的坐标范围

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot'); %绘制双y图,返回坐标轴及两个图形的句柄
set(get(AX(1),'Ylabel'),'String','Slow Decay') %get函数得到句柄,set函数设置相关属性,下同
set(get(AX(2),'Ylabel'),'String','Fast Decay') 
xlabel('Time (\musec)') 
title('Multiple Decay Rates') 
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')

绘制的函数图像如下:

6.2三维立体绘图

除了二维绘图,三维图形的绘制与二维图形的绘制方法大同小异。

t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on
axis square

6.3图形的保存与导出

保存或导出图形通常有以下几种方法:

  1. Edit → Copy Figure
  2. Toolbar → Save
  3. print('-depsc','-tiff','-r300','picture1')
  4. File → Export Setup

7.MATLAB文件导入

7.1mat格式

save data.mat x y1 y2
clear all
load data.mat

7.2 txt格式

M = importdata('myfile.txt');

S = M.data;
save 'data.txt' S -ascii
T = load('data.txt');

isequal(S, T)

7. 3 xls格式

xlswrite('data.xls',S)
W = xlsread('data.xls');
isequal(S, W)

xlswrite('data.xlsx',S)
U = xlsread('data.xlsx');
isequal(S, U)

7.4 csv格式

csvwrite('data.csv',S)
V = csvread('data.csv');
isequal(S, V)

长风破浪会有时,直挂云帆济沧海。