常用操作

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

image.png

  • who whos
    • 直接输whos 回车,可以显示工作区中的所有变量的一些属性
  • 在编辑器写代码要输出到窗口,用 fprintf(输出格式, 数) fprintf('d=%d\t', n^2)
  • 输入 x = input(提示语句)

数据类型

不需要定义数据类型

数字

matlab里面数字的默认类型为double
可以使用int8(20) 定义一个8位整型数20
int8() 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的矩阵

  1. S = zeros(3, 4,2)
  2. S(:,:,1) = rand(3,4)
  3. S(:,:,1)=randn(3,4)
  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, 行的重复次数,列的重复次数)

  1. A = [1,3,5,7,9,11]
  2. 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,n
find(A==5) 查找A中元素值等于5的元素的位置
size(A) 输出矩阵的行数和列数
reshape(矩阵1,新的行数,新的列数) 将一个矩阵重构为另一个矩阵

元胞数组 cell

cell 中的每个元素都可以包含任意类型的数据
cell 也是一个矩阵,每一个位置相当于是一个指针,指向各个不同类型的数据

  • 使用()来指示该位置指向的是哪种数据
  • 使用{}来访问元胞的具体内容

A = cell(2,3) 返回空的23的元胞数组
A = cell(4) 返回空的4
4的元胞数组
A = {'2017-08-16',[56 67 78]} 直接创建并写入内容
A(1,:) 对第一行进行索引
A{1, 2}或A{3}{}表示查找指定元胞中的数据段
A{3} = eye(3)将指定元胞设置为33的单位矩阵
*定义cell中的元素

  1. A(1,1) = {[1 2; 3 4]};
  2. A{1,2} = 'Smith';

num2cell 将一个矩阵转成cell,每一个数字单独成一个
mat2cell 将一个矩阵转成cell,自定义划分大小

结构体 structure

相当于Python里面的字典
structure里面的每一组数据成为一个field

  1. book = struct('name', {{'11', '22'}}, 'price', [40,50])
  2. book.name % cell类型
  3. book.name(1) % cell类型
  4. book.name{1} % 字符串类型
  5. book.where = 'here' % 写入元素

移除fieldrmfield(结构名,键名) rmfield(book, 'where')

  • cell2struct 把cell转成struct
  • struct2cell

语句结构

每一块都需要一个**end**来结束

  1. forfor 变量 = 开始 :步长:结束 ```matlab sum = 0; for n = 1:5 % 循环条件 sum = sum+n^2; end
  1. 2. `while`
  2. ```matlab
  3. %% 计算奇数和
  4. x = 1; sum = 0;
  5. while x<101 % 循环条件
  6. sum = aum+x;
  7. x = x+2;
  8. end
  1. if...end

    1. if 条件
    2. 语句
    3. end
  2. if...elseif...else...end

  3. switch... case... end 没有break
  4. break

逻辑判断

< <= > >= == ~=(不等于) && ||

tips for ecripts writing

  • 在程式开始时,写上 clear all close all 清除前面程序留下的遗骸
  • 在每句末尾加上; 让工作区不要显示该语句的结果
  • 一条语句在一行显示太长的话,使用...换行
  • Ctrl+C中止程序执行

Function

  • 定义 function y = 函数名称(参数) 代码块
  • y为输出
  • 函数的定义要在整个文件的末尾
  • 若要在其他文件或命令行窗口使用该函数,需要把函数定义的所在文件命名为与该函数名相同。
  • 注意:函数的参数很有可能是矩阵,运算符的选取。如下面的.*

    1. function x = freebody(x0, v0, t)
    2. x = x0+v0.*t + 1/2*9.8*t.*t;
    3. 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语法可以写出数学公式

图像调整

  1. 获取图像上的每一部分的handle
  2. get查看其对应的属性
  3. 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
  • 可以一次写多个,属性名,对应值 ……
  1. t = 1 : 1/20 : 2;
  2. f = t.^2;
  3. g = sin(2*pi*t);
  4. plot(t, f, '-k', t, g, 'or');
  5. xlabel('Time(ms)');
  6. ylabel('f(t)');
  7. title('Mini Assignment #1');
  8. legend('t^2', 'sin(2pit)');

多个图像画在不同的figure中
通过figure, plot();
有了多个figure时,默认的handle只作用在最后一个figure上
设置新figure的位置与大小
image.png

把一个figure划分成多份区域
subplot(行数,列数,第几个)

把图像保存进文件
saveas(gcf, '<文件名>', '格式');
格式有:jpeg png titf , 向量格式:pdf eps meta
保存高解析度的,需要用print

GUI

  1. handles 存储所有控件
  2. 保存一个数值到全局,handles.myData = 一个局部变量
  3. 使用deploytool打包程序为.exe文件