Matlab 笔记:基础

Matlab Note: Basics

Posted by J Leaves on July 29, 2019

Matlab 总结

注意事项

Matlab中,乘号*不可省略

单引号'可用于转置,A’

.*时,不用考虑转置以匹配维度

Matlab中无一维数组,都是1×x或者x×1维度的二维数组

函数

数组操作

size()

size(A, dim)

返回数组某一维度上的长度

arrayfunc()

arrayfunc(A, function)

针对数组/矩阵的每个元素进行操作。

@

@ <x> <y>

类似 Python 中的 lambda 函数,是一种简洁的写法。


数据类型

whos

whos variable

显示变量 variable 的大小和类型

whos

显示当前所有变量的大小和类型


随机数

rand()

rand

返回一个在区间 (0,1) 内均匀分布的随机数。

rand(x,(y))

返回一个 x×y (x×x) 的随机数矩阵。

笔记:要生成 U(a,b) 分布,使用 a+(b-a)*rand.

randn()

randn

返回一个标准正态分布的随机数。

randn(x,(y))

返回一个 x×y (x×x) 的随机数矩阵。

笔记:要生成 N(μ,σ) 分布,使用 mu+sigma*rand.

normrnd()

normrnd(mu,sigma)

返回一个正态分布 N(μ,σ) 的随机数。

结构

遍历数组元素

1
2
3
4
5
6
v=[1,4,6,4,1];
s=0;
for ve=v
    s=s+ve;
end
disp(s);

结果: 16

输入输出

格式化输出

fprintf((fid), format, variables)
1
2
a = 1:10;
sprintf('%d ',a)
1
2
3
ans =

1 2 3 4 5 6 7 8 9 10 
sprintf(format, variables)
1
2
a = 1:10;
fprintf('%d ',a)
1
1 2 3 4 5 6 7 8 9 10 
区别

fprintf()是输出函数,返回值是字符串的长度;
sprintf()是字符转换函数,返回值是字符串本身。

1
2
3
a = 1:10;
s = sprintf('%d ',a); % 此行不会输出
disp(s)
1
1 2 3 4 5 6 7 8 9 10 
1
2
3
a = 1:10;
s = fprintf('%d ',a); % 此行会输出
disp(s)
1
1 2 3 4 5 6 7 8 9 10     21
格式化输出的占位符

Formatting Text - MATLAB & Simulink

转换类型
设定符 用法
c 单个字符。
d 十进制记数法(有符号)。
e 指数记数法(使用小写 e,如 3.1415e+00 中一样)。
E 指数记数法(使用大写 E,如 3.1415E+00 中一样)。
f 定点记数法。
g 更紧凑的 %e 或 %f。(将不输出无意义的零。)
G 与 %g 相同,但使用大写 E。
o 八进制记数法(无符号)。
s 字符向量或字符串数组。
u 十进制记数法(无符号)。
x 十六进制记数法(无符号,使用小写字母 a–f)。
X 十六进制记数法(无符号,使用大写字母 A–F)。

例如,使用不同的转换字符来格式化数值 46,以十进制、定点记数、指数和十六进制格式显示该数值。

1
2
A = 46*ones(1,4);
txt = sprintf('%d   %f   %e   %X', A)
1
2
txt = 
'46   46.000000   4.600000e+01   2E'
字段宽度

字段宽度是一个非负整数,位于句点之前。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
a=1234.5678;

fprintf('%.2f \n', a)
fprintf('%1.2f \n', a)
fprintf('%2.2f \n', a)
fprintf('%3.2f \n', a)
fprintf('%4.2f \n', a)
fprintf('%5.2f \n', a)
fprintf('%6.2f \n', a)
fprintf('%7.2f \n', a)
fprintf('%8.2f \n', a)
fprintf('%9.2f \n', a)
fprintf('%10.2f \n', a)
fprintf('%11.2f \n', a)
fprintf('%12.2f \n', a)
fprintf('%13.2f \n', a)
fprintf('%14.2f \n', a)
fprintf('%15.2f \n', a)
fprintf('%16.2f \n', a)
fprintf('%17.2f \n', a)
fprintf('%18.2f \n', a)
fprintf('%19.2f \n', a)
fprintf('%20.2f \n', a)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1234.57 
1234.57 
1234.57 
1234.57 
1234.57 
1234.57 
1234.57 
1234.57 
 1234.57 
  1234.57 
   1234.57 
    1234.57 
     1234.57 
      1234.57 
       1234.57 
        1234.57 
         1234.57 
          1234.57 
           1234.57 
            1234.57 
             1234.57 
精度

精度是一个非负整数,紧跟在句点之后。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a=1234.5678;

fprintf('%4f \n', a)  % Precision defaults to six.
fprintf('%4.0f \n', a)
fprintf('%4.1f \n', a)
fprintf('%4.2f \n', a)
fprintf('%4.3f \n', a)
fprintf('%4.4f \n', a)
fprintf('%4.5f \n', a)
fprintf('%4.6f \n', a)
fprintf('%4.7f \n', a)
fprintf('%4.8f \n', a)
fprintf('%4.9f \n', a)
fprintf('%4.10f \n', a)
1
2
3
4
5
6
7
8
9
10
11
12
1234.567800 
1235 
1234.6 
1234.57 
1234.568 
1234.5678 
1234.56780 
1234.567800 
1234.5678000 
1234.56780000 
1234.567800000 
1234.5678000000 

来源1

绘图

直方图

histogram()

1
2
 x = [1,1,2.3,4];
 histogram(x)