一、基本操作
1.1 变量
运算符:
代码语言:javascript复制% %表示注释
- * / %同其他语言,/是数学意义上的除法,非整除
^ %幂运算
== %判断相等
~= %判断不等
&& %与运算
|| %或运算
xor(a,b) %对 a,b 做异或运算
赋值语句:
代码语言:javascript复制a = 3 %给变量 a 赋值 3,并打印变量a
a = 3; %给变量 a 赋值 3,且不打印任何东西
a = 'hi' %字符串赋值
a = pi %将变量复制为圆周率
输出语句:
代码语言:javascript复制a = pi; % a 赋值为圆周率
a % 输入一个 a 会打印 a 变量
disp(a) % 打印变量a的值
disp(sprintf('%.2f',a)) %格式化字符串形式输出a,类似C的输出
format long % 接下来以默认位数显示
format short % 接下来以简略形式显示
1.2 向量和矩阵
下面带 >>
的表示输入,不带的则表示命令行的输出。
赋值操作:
代码语言:javascript复制>> A = [1 2;3 4;5 6] %矩阵赋值,分号表示换行
A =
1 2
3 4
5 6
>> A = [1 2; % 另外一种赋值方式
> 3 4;
> 3 6]
A =
1 2
3 4
5 6
>> v = [1,2,3] % 建立行向量
>> v = [1;2;3] % 建立列向量
>> v = 1:0.1:1.5 %建立一个行向量,从1开始,每次增加0.1(步长),直到1.5为止,步长缺省为1
v =
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000
新建矩阵:
代码语言:javascript复制>> ones(2,3)
ans =
1 1 1
1 1 1
>> c = 2*ones(2,3) % 生成2行3列的全为1的矩阵
c =
2 2 2
2 2 2
>> w = zero(2,3) % 同理ones函数,全为0
>> w = rand(2,3) % 生成随机矩阵
>> w = randn(2,3) % 服从高斯分布的随机数,方差为1,均值为0
>> w = -6 sqrt(10) * (randn(3,4))
w =
-11.2574 -5.2827 1.2595 -12.0307
0.1465 -2.5249 2.7044 -7.1542
-9.4301 -5.5345 -5.5626 -8.6820
>> I = eye(4) %生成 4*4 的单位矩阵
I =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
可视化:
代码语言:javascript复制>> hist(w) %画出w的直方图,此时的w是一个高斯随机变量,服从正态分布(下左图)。
>> hist(w,50) %直方图的竖条为50个(下右图)
二、移动数据
2.1 读取和存储数据
获取矩阵大小:
代码语言:javascript复制>> A = [1 2;3 4; 5 6]
>> sz = size(A) %返回矩阵A的大小
sz =
3 2
>> size(A,1) %返回矩阵A的第一维度大小
>> size(A,2) %返回矩阵A的第二维度大小
>> length(A) %返回最长维度的大小,一般对向量使用
系统相关函数及变量操作(类Linux):
代码语言:javascript复制>> pwd % 显示当前打开的文件夹路径
ans =
'D:toolsMATLABbin'
>> cd C:Users86176Desktop % 改变打开的文件夹
>> pwd
ans =
'C:Users86176Desktop'
>> ls % 显示当前文件夹下的文件
>> who % 显示当前存在的变量名
您的变量为:
A B I X1 t1 t2
>> whos % 显示变量更加详细的信息
Name Size Bytes Class Attributes
A 3x2 48 double
B 1x6 48 double
I 4x4 128 double
X1 7x1 56 double
t1 9x2 144 double
t2 9x1 72 double
>> clear t1 % 删除变量t1
>> clear % 删除全部变量
文件读写和保存:
代码语言:javascript复制load t1.txt %输入必须为 MAT 文件或包含每行列数相同的数值数据的 ASCII 文件。
>> t1 %打印文件t1中的数据,实际就是将其转变成了一个矩阵,矩阵的函数都可以用
t1 =
1 123
2 345
3 4235
4 23
5 2435
6 235
7 23
8 345
9 435
>> Y = t1(1:2:5) %类似python的切片操作,从第1个元素开始,每隔2个拿一个,直到第5个为止
>> save h1.mat Y; %将 Y 保存为 h1.mat,.mat是一个压缩的二进制格式,对于大数据很有效
>> save h2.txt Y -ascii %将Y以ascii保存
2.2 操作数据
代码语言:javascript复制>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
>> A(3,2) %返回第3行第2列
>> A(2,:) %返回第2行
>> A(:,2) %返回第2列
>> A([1 3], :) % 返回第1行和第3行的整列
ans =
1 2
5 6
>> A(:,2) = [10;11;12]
A =
1 10
3 11
5 12
>> A = [A,[111;222;333]] %右侧增加新的一列
A =
1 10 111
3 11 222
5 12 333
>> A(:) %将A中所有元素按照顺序放入一个列向量中
ans =
1
3
5
10
11
12
111
222
333
>> B = [1 2 3; 4 5 6; 7 8 9];
>> C = [A B] % 将A和B结合,A在左,B在右
C =
1 10 111 1 2 3
3 11 222 4 5 6
5 12 333 7 8 9
>> C = [A;B] % 将A和B结合,A在上,B在下
C =
1 10 111
3 11 222
5 12 333
1 2 3
4 5 6
7 8 9
三、计算数据
3.1 矩阵间运算
代码语言:javascript复制>> A = [1 2; 3 4; 5 6];
>> B =[11 12; 13 14;15 16];
>> C = [1 1; 2 2];
>> A * C % 矩阵乘法
ans =
5 5
11 11
17 17
>> A .* B % 将两个矩阵对应元素相乘,其他运算符同理,要求维度一致
ans =
11 24
39 56
75 96
>> A .^ 2 % 将矩阵每个元素平方,即'.' 表示对元素操作
ans =
1 4
9 16
25 36
>> log(A) % 求对数
>> exp(A) % 以e为底求对数
>> abs(A) %求绝对值
>> -A %取相反数
>> A ones(size(A,1),size(A,2)) % 让矩阵每个元素都 1
3.2 矩阵内运算
3.2.1 数值运算
代码语言:javascript复制>> prod(A) % 求每列乘积
ans =
15 48
>> sum(A,1) % 求每列和
ans =
9 12
>> sum(A,2) % 求每行和
ans =
3
7
11
3.2.2 逻辑运算
代码语言:javascript复制>> a = [1 15 2 0.5];
>> max(a) % 返回 a 中最大值
>> [val, ind] = max(a) % 返回a中最大值及其下标
val = 15
ind = 2
>> a < 3
ans =
1×4 logical 数组
1 0 1 1
>> find(a<3)
ans =
1 3 4
>> [r,c] = find(A >= 5) % 查找 >=5 的元素,返回坐标
r =
3
3
c =
1
2
>> max(A,[],1) % 求每列最大值
ans =
5 6
>> max(A,[],2) % 求每行最大值
ans =
2
4
6
3.3 矩阵特殊运算
代码语言:javascript复制>> magic(4) % 生成一个幻方矩阵
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A' %A的转置
>> pinv(A) % 求矩阵的逆
ans =
-1.3333 -0.3333 0.6667
1.0833 0.3333 -0.4167
四、数据绘制
4.1 简单图形绘制
代码语言:javascript复制>> t = 0:0.01:0.98
>> y1 = sin(2*pi*4*t);
>> plot(t,y1); %绘制正弦函数(下图左)
>> hold on; %保持已经绘制的图像,在此基础上继续绘制,不加这条则会重新绘制新的图形
>> y2 = cos(2*pi*4*t);
4.2 图像有关函数
代码语言:javascript复制>> xlabel('time')
>> ylabel('value')
>> legend('sin','cos')
>> title('my plot')
>> print -dpng 'myplot.png' %保存图片
>> close % 关闭图片
代码语言:javascript复制>> figure(2); % 指定接下来的图片在figure2窗格中生成,若不存在则新建一个窗格
>> subplot(2,3,4) % 将当前窗格分成2行3列,在第4个格子里生成图片
>> axis([0.5 1 -1 1]) % 将当前图片的横坐标变成[0.5,1],纵坐标变成[-1,1]
>> clf; % 清除当前窗格内的所有图片
代码语言:javascript复制>> A = magic(5)
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
>> imagesc(A) %生成一个颜色矩阵,一个颜色代表一种数字
>> imagesc(A), colorbar, colormap gary; %生成颜色矩阵,加上颜色条,用灰度表示
五、控制语句
5.1 循环语句
for语句:
代码语言:javascript复制>> for i = 1 : 10,
v(i) = 2 ^ i
end;
%等价于:
for (int i = 1; i <= 10; i ) {
v[i] = pow(2,i);
}
while语句:
代码语言:javascript复制>> i = 1;
while i <= 5,
v(i) = 100;
i = i 1;
end;
%等价于
int i = 1;
while(i<=5) {
v[i] = 100;
i ;
}
5.2 判断语句
代码语言:javascript复制>> if x > 6,
x = x 10;
elseif x > 10,
x = x - 10;
end;
5.3 自定义函数
MATLAB中定义函数需要新建一个 ‘xxx.m’ 的文件,然后将函数的定义写在文件中,该文件要放在MATLAB打开的文件夹下,某函数定义如下,返回平方数。
代码语言:javascript复制function y = squareThisNumber(x) %定义返回值为 y ,自变量为 x
y = x^2; %函数主体
还可以返回多值:
代码语言:javascript复制function [y1,y2] = squareAndCubeThisNumber(x)
y1 = x^2;
y2 = x^3;
可以增加搜索路径:
代码语言:javascript复制addpath('路径名') %将函数所在路径添加到搜索路径中,及时当前位于别的文件夹下,也可以使用这个函数
六、向量化
比如要计算h_theta(x) = displaystylesum^{n}_{j= 0}theta_jx_j = theta^Tx ,可以选择自己写个循环计算,也可以转换成两个向量直接计算,这样代码会很简短同时更高效。
更复杂的向量化: