常用操作
clc
清除命令窗口内容clear
清除工作区中的变量%
或%%
注释- 用 %% 来做注释,将其下的多行代码划分为一个
section节
,每个小节可以单独运行run section 运行节
- 用 %% 来做注释,将其下的多行代码划分为一个
ln --> log
√开根号 --> ()^0.5 或 sqrt()
π --> pi
e --> exp()
e的多少次方
who
whos
- 直接输whos 回车,可以显示工作区中的所有变量的一些属性
- 在编辑器写代码要输出到窗口,用
fprintf(输出格式, 数)
fprintf('d=%d\t', n^2)
- 输入
x = input(提示语句)
数据类型
数字
matlab里面数字的默认类型为double
可以使用int8(20)
定义一个8位整型数20int8() uint8() int16() single()...
字符和字符串
'字符或字符串'
用单引号
串联多个字符(串)h = [字符1 字符串2]
中间用空格隔开abs(a)
求绝对值,也可以输出一个字符所对应的ASCII码值char(97)
把一个数字转换为其在ASCII码中对于的字符num2str(65)
把这个数字作为一个字符串 ‘65’length(str)
长度,空格也算进去
矩阵
矩阵的下标从1开始A = [1 2 3; 4 5 6]
同行以空格或逗号隔开,以分号分列
- 可读可写
A(1)
取第一个元素,竖着数的A(1,2)
取第一行第二列的数A([1 3 5])
取第1 3 5 个数构成一个向量A([1 3; 4 6])
构成一个矩阵,取第1 3个数为第一行、第4 6个数为第二行A([1 3, 4 5])
构成向量A([1 3], [1 2])
前一组表示行,后一组表示列,取相交的元素构成矩阵A(选填) = []
去掉指定的行或列B = [2 3 4; 4 5 6]'; C = A'
最后的一撇表示转置C = A(:)
以列排 排成一列C = A(1, :)
取第一行 全部列,构成一个向量D = inv(A)
求逆矩阵,原矩阵必须是方阵E = zeros(行数,列数,维数)
初始化一个全是0的矩阵
S = zeros(3, 4,2)
S(:,:,1) = rand(3,4)
S(:,:,1)=randn(3,4)
S(:,:,1)=randi(5,3,4)
A = eye(3,4); B = eye(3)
生成对角线为1的矩阵D = magic(5)
生成一个5*5的幻方
等差级数 A = [1:2:11] % A = 1 3 5 7 9 11
以开始:步长:结束 自动生成数组B = repmat(A, 行的重复次数,列的重复次数)
A = [1,3,5,7,9,11]
B = repmat(A, 1,2) % = 1 3 5 7 9 11 1 3 5 7 9 11
或者 B = repmat(A, 行与列的重复次数)
D = ones(2,4)
生成一个24的元素值都为1的矩阵diag([1,2,3])
生成对角线矩阵C = [A, B]
左右连接 构成增广矩阵,需要行数相同C = [A; B]
上下连接,需要列数相同
*cat() 将两个矩阵拼接
cat(1, A, B)
上下cat(2, A, B)
左右cat(3, A, B)
前后,三维
矩阵操作C = A+B
对应元素相加或相减C = A*B
叉乘,第一个矩阵的列数要与第二个矩阵的行数相同,形成一个新的矩阵C = A.*B
对应元素相乘,需要两个矩阵行列相同C = A / B
相当于A*inv(B)
,A乘以B的逆C = A./B
对应元素相除C = A.^2
每个元素取平方
以每列计算
- max(A) 列出A中每列的最大的数
- max(max(A)) A中最大的数
- min(A)
- sum(A)
- mean(A)
- sort(A)
- sortrows(A) 把每一行按第一个元素排序
[m,n] = find(A>1)
从A中查找元 素值大于1的,并把其行列号赋给m,nfind(A==5)
查找A中元素值等于5的元素的位置size(A)
输出矩阵的行数和列数reshape(矩阵1,新的行数,新的列数)
将一个矩阵重构为另一个矩阵
元胞数组 cell
cell
中的每个元素都可以包含任意类型的数据cell
也是一个矩阵,每一个位置相当于是一个指针,指向各个不同类型的数据
- 使用
()
来指示该位置指向的是哪种数据 - 使用
{}
来访问元胞的具体内容
A = cell(2,3)
返回空的23的元胞数组A = cell(4)
返回空的44的元胞数组A = {'2017-08-16',[56 67 78]}
直接创建并写入内容A(1,:)
对第一行进行索引A{1, 2}或A{3}
用{}
表示查找指定元胞中的数据段A{3} = eye(3)
将指定元胞设置为33的单位矩阵
*定义cell中的元素
A(1,1) = {[1 2; 3 4]};
A{1,2} = 'Smith';
num2cell
将一个矩阵转成cell,每一个数字单独成一个mat2cell
将一个矩阵转成cell,自定义划分大小
结构体 structure
相当于Python里面的字典structure
里面的每一组数据成为一个field
book = struct('name', {{'11', '22'}}, 'price', [40,50])
book.name % cell类型
book.name(1) % cell类型
book.name{1} % 字符串类型
book.where = 'here' % 写入元素
移除field
,rmfield(结构名,键名)
rmfield(book, 'where')
cell2struct
把cell转成structstruct2cell
语句结构
每一块都需要一个**end**
来结束
for
,for 变量 = 开始 :步长:结束
```matlab sum = 0; for n = 1:5 % 循环条件 sum = sum+n^2; end
2. `while`
```matlab
%% 计算奇数和
x = 1; sum = 0;
while x<101 % 循环条件
sum = aum+x;
x = x+2;
end
if...end
if 条件
语句
end
if...elseif...else...end
switch... case... end
没有breakbreak
逻辑判断
< <= > >= == ~=(不等于) && ||
tips for ecripts writing
- 在程式开始时,写上
clear all
close all
清除前面程序留下的遗骸 - 在每句末尾加上
;
让工作区不要显示该语句的结果 - 一条语句在一行显示太长的话,使用
...
换行 - 按
Ctrl+C
中止程序执行
Function
- 定义
function y = 函数名称(参数) 代码块
y
为输出- 函数的定义要在整个文件的末尾
- 若要在其他文件或命令行窗口使用该函数,需要把函数定义的所在文件命名为与该函数名相同。
注意:函数的参数很有可能是矩阵,运算符的选取。如下面的
.*
function x = freebody(x0, v0, t)
x = x0+v0.*t + 1/2*9.8*t.*t;
end
多个输出,
function [a1 a2] = name(arguments) ...
文件
保存工作区中的变量
save 文件名.mat
经过压缩,其他文件无法正常显示save 文件名.mat -ascii
在其他文件中也可以显示,不过有些数据类型无法这样保存
加载文件及其中的数据,上下方式对应
load('文件名.mat')
load('文件名.mat', 'ascii')
读excel文件
score = xlsread('文件名.xlsx')
score = xlsread('文件名.xlsx', 'B2:D4')
读指定范围的数据[score header] = xlsread('score.xlsx')
将内容和标题分别读取
写excel文件
xlswrite('文件名.xlsx', 写入的数据,第几页,'第几格:第几格')
xlswrite('文件名.xlsx', '表头',第几页,'第几格')
作图
绘图函数
plot(x, y, 'str')
str可以设置线条的样式plot(cos(0:pi/20:2*pi))
当有多个图形在同一个Figure
中显示时,会自动把前面的图形清除而只保留最后一个图形hold on
hold off
可以取消自动清除,让有多个图形在同一个Figure
中显示
多条线在同一个plot,plot(x1, y1, 'l1', x2, y2, 'l2',..., xn, yn, 'ln')
在图的旁边标注每条线的名字,用legend('sin(x)', 'cos(y)', 'Sigmoid')
添加标题、x轴、y轴titlr('')
xlabel('')
ylabel('')
使用LaTex
语法可以写出数学公式
图像调整
- 获取图像上的每一部分的handle
get
查看其对应的属性set
设置需要的属性
如:set(gca, 'XLim', [0, 2*pi]);
gca是坐标轴的一个handle,改变属性XLim 即x轴的范围
另外一种形式 xlim([0, 2*pi]);
常用属性
set(gca, 'FontSize', 25);
set(gca, 'XTick', 0:pi/2:2*pi);
set(gca, 'XTickLabel', 0:90:360);
设置x轴显示的文字,或{'0', 'p/2', 'p'}
set(gca, 'FontName', 'symbol');
设置字体set(h, 'LineStyle', '-', 'Color', 'g');
h 是线条的handle- 可以一次写多个,属性名,对应值 ……
t = 1 : 1/20 : 2;
f = t.^2;
g = sin(2*pi*t);
plot(t, f, '-k', t, g, 'or');
xlabel('Time(ms)');
ylabel('f(t)');
title('Mini Assignment #1');
legend('t^2', 'sin(2pit)');
多个图像画在不同的figure中
通过figure, plot();
有了多个figure时,默认的handle只作用在最后一个figure上
设置新figure的位置与大小
把一个figure划分成多份区域subplot(行数,列数,第几个)
把图像保存进文件saveas(gcf, '<文件名>', '格式');
格式有:jpeg png titf , 向量格式:pdf eps meta
保存高解析度的,需要用print
GUI
handles
存储所有控件- 保存一个数值到全局,
handles.myData = 一个局部变量
- 使用
deploytool
打包程序为.exe
文件