Matlab常见快捷键的使用
快捷键组合 | 功能 |
---|---|
ctrl+r | 注释 |
ctrl+t | 取消注释 |
ctrl+a | 全选 |
ctrl+i | 自动整理代码对齐格式 |
ctrl+z | 撤销改动 |
ctrl+y | 取消撤销 |
Tab | 多行代码右移 |
shift+tab | 多行代码左移 |
函数前几个字母+tab | 自动补齐代码 |
ctrl+f | 查找替换 |
ctrl+w | 关闭当前的.m代码框 |
F5 | 保存并运行程序 |
F9 | 执行选中的代码块 |
F10 | 单步执行 |
F11 | 遇到函数时候,进入函数内部 |
ctrl+c | 强制中断运行 |
命令窗口按下ctrl+q | 退出matlab |
Matlab基本使用规则
- 标点符号必须是英文的;
- 分号
;
作用不在命令窗口输出结果; - 除号有
/ 或 \
,它两个的关系是:a除以b表示为a/b,或 b\a - 命令窗口输入运算的时候,不想输一个计算一个,利用
shift+enter
可换行输入 - clear+变量名,清除工作空间的指定变量;
- 命令窗口输入
doc+函数名
,查看函数帮助文档;类似help+函数名
clear all
清除Workspace(工作区)中的所有变量clc
清除Command Window(命令行窗口)中的所有命令- matlab下标是从1开始的,区分其他语言。
Matlab变量命名规则
1、变量名长度不超过63位
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567 = 3
会自动截断为63字符。
2、变量区分大小写
A = 2
a = 3
工作区显示两个,表示A和a是两个变量。
3、变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点
4、 变量名应简洁明了,通过变量名可以直观看出变量所表示的物理意义
A = rand(3,5) %rand函数就是随机生成0-1之间的数
rows = size(A, 1) %行数
cols = size(A, 2) %列数
Matlab数据类型
数字
数字之间的四则运算
字符和字符串char
num2str()函数:
把数值转换成字符串, 转换后可以使用fprintf或disp函数进行输出
%把数组A中的数转换成字符串表示形式。
A=123;
str = num2str(A)
A=[1 2 3]
str = num2str(A)
A=[1 2 3;4 5 6]
str = num2str(A)
str = num2str(A, precision)
把数组A转换成字符串形式表示,precision表示精度, 比如precision为3表示保留最多3位有效数字, 例如0.5345转换后为0.534,1.2345转换后为1.23。即从左边第一个不为0的数开始保留3个数值。
A=[1.456 2 3;4 5.214 0.167]
str = num2str(A,2)
str = num2str(A, format)
按format指定格式进行格式化转换,通常’%11.4g’是默认的。
A=[1.456 2 3;4 5.214 0.167]
str = num2str(A,'%.5f ')
s = 'a' % 引号可用来定义字符类型,char ‘a‘
abs(s) % 求字符的AccII码 97
char(65) % 将AccII码转换成字符类型 'A'
num2str(65) % 将数字类型转化成字符类型 '65'
str = 'I Love MATLAB & Machine Learning.' %定义字符串类型
length(str) %求字符串长度,包括空格和句号 33
矩阵
A = [1 2 3 6; 4 5 2 1; 3 2 7 9] % 三行四列
B = A' % 转置,四行三列
C = A(:) % 按列取A得值,构成一个列向量
A = [1 2 3 ; 4 5 2 ; 3 2 7 ]
D = inv(A) % inv函数真能对方阵进行求逆运算
A * D
randi 生成均匀分布的伪随机整数
主要语法:randi(iMax)在开区间(0,iMax] 生成均匀分布的伪随机整数
randi(iMax,m,n)在区间(0,iMax] 生成m行n列型随机矩阵
r = randi([iMin,iMax],m,n)在开区间[iMin,iMax] 生成m行n列随机矩阵
randi(5)
randi(5, 3,3)
randi([5,8],4,2)
E = zeros(10,5,3) %创建10*5*3的零矩阵,3个10行5列的零矩阵
E(:,:,1) = rand(10,5) % 将E的第一个零矩阵填充一个10行5列的0-1随机矩阵
E(:,:,2) = randi(5, 10,5) % 在区间(0,5]内生成10行5列整数矩阵
E(:,:,3) = randn(10,5) %randn生成随机数(均值为0,方差为1)
元胞数组,多维数组的另一种表示方式cell
A = cell(2, 6) % A初始化为一个2行6列的空cell类型数据。
A{1,2} = eye(3) %eye生成3*3标准矩阵,填充到第一行第二个
A{2,1} = eye(3)
%magic生成一个n*n的矩阵,矩阵元素是由
% 整数1到n^2组成的并且任何行任何列的和都相等,阶数n必须是大于等于3的标量
A{1,5} = magic(5)
B = A{1,5}
C=A{1,2}
结构体struct
books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30 40])
books.name
books.name(1)
books.name{1}
Matlab矩阵操作
矩阵的构建
A = [1 2 3 5 8 5 4 6]
B = 1:2:9
D = ones(2, 4) %2行4列全为1
C = repmat(B, 3, 1) %复制B为三行一列
C = repmat(B, 3, 2) %复制B为三行2列
矩阵四则运算
定义两个矩阵:
C = A + B %对应元素相加
D = A - B %对应元素相减
E = A * B' %矩阵正常相乘,第一行乘以第一列
逆矩阵:
1.对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
2.对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆
若A为非奇异矩阵,请不要使用pinv求逆,虽然计算结果相同,即inv( A ) = pinv( A )但pinv的计算复杂度较高。
G = A / B % G * B = A G * B * pinv(B) = A * pinv(B) G = A * pinv(B)
点乘和点除:对应位置计算
F = A .* B %对应位置相乘
H = A ./ B
矩阵的下标
从1开始计数的,并不是从零开始。
筛选的结果:
m为按行索引符合条件的下标,比如2表示第一行第二个元素
n为an列索引符合条件的列数。比如1表示第一列有符合条件的
Matlab逻辑与流程控制
1、if … else … end
A = rand(1,10) %0-1之间
limit = 0.75;
B = (A > limit); % B为1*10的表,符合A > limit的记为1否则为0,B为logical格式
if any(B) %any判断是否为非零,非零为true记为1
fprintf('Indices of values > %4.2f: \n', limit);
disp(find(B))
else
disp('All values are below the limit.')
end
2、for … end
k = 10;
hilbert = zeros(k,k); % Preallocate matrix
for m = 1:k
for n = 1:k
hilbert(m,n) = 1/(m+n -1);
end
end
hilbert
3、while … end
定义一个70以内的求阶乘的函数。
n = 1;
nFactorial = 1;
while nFactorial < 1e100 %1*10^100
n = n + 1;
nFactorial = nFactorial * n;
end
n
nFactorial
上面函数可以用matlab自带的函数实现。
factorial(70)
prob()函数
如果A是向量,prod(A)返回A向量的乘积。
如果A是矩阵,prod(A)将A看作列向量,返回每一列元素的乘积并组成一个行向量B。
如果A是多维数组,prod(A)沿着第一个非单例作为向量,返回一个行向量数组。
B = prod(A,dim)
沿着指定的dim标量的维计算A矩阵的乘积。注:dim=2表示沿行计算。
prod(1:70) %将1-70的乘积返回
M = magic(3)
prod(M)%计算矩阵A的每一列元素的乘积
prod(A,2)%计算矩阵A每一行元素的乘积, dim=2表示按行计算
4、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
MATLAB脚本与函数文件
1、脚本文件
先定义一个脚本文件:命名为myScript.m
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
然后主程序直接输入名称就可以使用:
% 1. 脚本文件,可直接执行
myScript
2、函数文件
定义一个函数文件,名字为myFunction.m
function output = myFunction(input)
switch input
case -1
output = 'negative one';
case 0
output = 'zero';
case 1
output = 'positive one';
otherwise
output = 'other value';
end
end
使用时候需要输出函数名字和对应的参数:
output = myFunction(input('Enter a number:'))
MATLAB基本绘图
1. 二维平面绘图
x = 0:0.01:2*pi; %[0,2pi]每次增加0.01步长,x取值为离散的
y = sin(x);
figure %对应一个空的画表
plot(x, y) %y=sin(x)画出来
title('y = sin(x)')
xlabel('x')
ylabel('sin(x)')
xlim([0 2*pi]) %横坐标的范围
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');
set(get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time (\musec)')
title('Multiple Decay Rates')
set(H1,'LineStyle','--') %线条
set(H2,'LineStyle',':')
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 %当前坐标系图形设置为方形
3.图形的保存和导出
(1) Edit → Copy Figure 编辑→复制图窗
然后粘贴即可
(2) Toolbar → Save 菜单栏保存按钮
(3) File → Export Setup %设置像素点200
适用于论文写作
MATLAB保存与读取外部文件
1. mat格式
将工作区的x,y1,y2保存为data.mat
save data.mat x y1 y2
读取
load data.mat
2. txt格式
建立一个txt文档
然后读取
M = importdata('myfile.txt');
S = M.data; %将值赋值给S
save 'data.txt' S -ascii %将S保存为txt文档,Ascii为读取格式
T = load('data.txt'); % 读取
isequal(S, T) %判断S和T是不是一样
3. xls格式,同理xlsx格式
利用S建立xls文件
xlswrite('data.xls',S)
W = xlsread('data.xls');
isequal(S, W)
4. csv格式
csvwrite('data.csv',S)
V = csvread('data.csv');
isequal(S, V)