常用操作
clc清除命令窗口内容clear清除工作区中的变量%或%%注释- 用 %% 来做注释,将其下的多行代码划分为一个
section节,每个小节可以单独运行run section 运行节
- 用 %% 来做注释,将其下的多行代码划分为一个
ln --> log√开根号 --> ()^0.5 或 sqrt()π --> pie --> exp()e的多少次方

whowhos- 直接输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...endif 条件语句end
if...elseif...else...endswitch... case... end没有breakbreak
逻辑判断
< <= > >= == ~=(不等于) && ||
tips for ecripts writing
- 在程式开始时,写上
clear allclose 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 onhold 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文件
