GeezerVison is showing quickreference.pages.dev — MATLAB 备忘清单 & matlab cheatsheet & Quick Reference 介绍
MATLAB 是 matrix laboratory 的缩写形式
矩阵和数组运算
MATLAB 允许您使用单一的算术运算符或函数来处理矩阵中的所有值
a + 10
MATLAB 将执行上述语句,并返回以下结果:
ans = 3×3
11 13 15
12 14 16
17 18 20
sin(a)
MATLAB 将执行上述语句,并返回以下结果:
ans = 3×3
0.8415 0.1411 -0.9589
0.9093 -0.7568 -0.2794
0.6570 0.9894 -0.5440
要转置矩阵,请使用单引号 (')
a'
ans = 3×3
1 2 7
3 4 8
5 6 10
使用 * 运算符执行标准矩阵乘法,这将计算行与列之间的内积
p = a*inv(a)
p = 3×3
1.0000 0 0
0 1.0000 0
0 0 1.0000
串联
串联是连接数组以便形成更大数组的过程。实际上,第一个数组是通过将其各个元素串联起来而构成的。成对的方括号 [] 即为串联运算符。
A = [a,a]
A = 3×6
1 3 5 1 3 5
2 4 6 2 4 6
7 8 10 7 8 10
使用逗号将彼此相邻的数组串联起来称为水平串联。每个数组必须具有相同的行数。同样,如果各数组具有相同的列数,则可以使用分号垂直串联。
A = [a; a]
A = 6×3
1 3 5
2 4 6
7 8 10
1 3 5
2 4 6
7 8 10
矩阵和数组
要创建每行包含四个元素的数组,请使用逗号 (,) 或空格分隔各元素
a = [1 2 3 4]
MATLAB 将执行上述语句,并返回以下结果:
a = 1×4
1 2 3 4
创建包含多行的矩阵
a = [1 3 5; 2 4 6; 7 8 10]
a = 3×3
1 3 5
2 4 6
7 8 10
由零组成的 5×1 列向量
z = zeros(5,1)
z = 5×1
0
0
0
0
0
复数
复数包含实部和虚部,虚数单位是 -1 的平方根。
sqrt(-1)
ans = 0.0000 + 1.0000i
要表示复数的虚部,请使用 i 或 j。
c = [3+4i, 4+3j; -i, 10j]
c = 2×2 complex
3.0000 + 4.0000i 4.0000 + 3.0000i
0.0000 - 1.0000i 0.0000 +10.0000i
矩阵和数组
创建和合并数组
创建网格
确定大小、形状和排序
重构和重新排列
索引
数值类型
创建数值变量
在数值类型之间转换
查询类型和值
数值范围
基本算术
加法
减法
乘法
除法
| :- | :- | :- |
|---|
| ./ | 数组右除 | | | .\ | 数组左除 | | | / | 求解关于 x 的线性方程组 xA = B | | | \ | 求解关于 x 的线性方程组 Ax = B | |
幂
转置
数组符号
自定义二元函数
| :- | :- | :- |
|---|
| bsxfun | 对两个数组应用按元素运算(启用隐式扩展) | |
FITS 文件 - 标头数据单元 (HDU) 访问TCP/IP 通信 - 读取和写入
| :- | :- |
|---|
| read | 通过 TCP/IP 读取远程主机上的数据 | | readline | 通过 TCP/IP 从远程主机读取 ASCII 字符串数据行 | | write | 通过 TCP/IP 向远程主机写入数据 | | writeline | 通过 TCP/IP 向远程主机写入 ASCII 数据行 | | flush | 为通过 TCP/IP 与远程主机的通信清空缓冲区 |
FTP 文件操作
| :- | :- |
|---|
| ftp | 连接到 FTP 服务器以访问其文件 | | sftp | Connection to SFTP server to access its files | | ascii | 将 FTP 传输模式设置为 ASCII | | binary | 将 FTP 传输模式设置为二进制 | | cd | 更改或查看 SFTP 或 FTP 服务器上的当前文件夹 | | close | 关闭与 SFTP 或 FTP 服务器的连接 | | delete | 删除 SFTP 或 FTP 服务器上的文件 | | dir | 列出 SFTP 或 FTP 服务器上的文件夹内容 | | mget | 从 SFTP 或 FTP 服务器下载文件 | | mkdir | 在 SFTP 或 FTP 服务器上创建新文件夹 | | mput | 将文件或文件夹上传到 SFTP 或 FTP 服务器 | | rename | 重命名 SFTP 或 FTP 服务器上的文件 | | rmdir | 删除 SFTP 或 FTP 服务器上的文件夹 |
面向对象基础
MATLAB 支持面向对象编程,虽然很少有人使用。
MATLAB 的自定义类型可以分成全值类和句柄类,它们的区别在于句柄类相当于指针,赋值时只会进行浅拷贝,全值类总是会进行深拷贝。下面的例子只涉及全值类。
简单例子
一个简单的 point2d 类(文件名必须与类名相同:point2d.m )
classdef point2d
properties % 属性
x
y
end
methods % 方法
function obj = point2d(x0,y0) % 构造方法
if nargin == 0
obj.x = 0;
obj.y = 0;
elseif nargin == 2
obj.x = x0;
obj.y = y0;
else
error("unsupported arguments")
end
end
function obj = normalize(obj) % 普通方法
% obj 相当于 Python 的 self
r = sqrt(obj.x^2+obj.y^2);
obj.x = obj.x/r;
obj.y = obj.y/r;
end
end
end
使用例如
a = point2d(3,4);
fprintf('(%f, %f)\n',a.x,a.y);
% (3.000000, 4.000000)
b = a.normalize();
fprintf('(%f, %f)\n',b.x,b.y);
% (0.600000, 0.800000)
属性
可以给属性提供默认值
classdef point2d
properties
x = cos(pi/12);
y = sin(pi/12);
end
...
end
默认值不需要是常量,可以是任何表达式
classdef demo
properties
time_stamp = date;
end
...
end
属性的默认值在类被加载时会被计算,并不会在每一个对象创建时重新计算。
可以将属性标记为只读(Constant),不允许对其进行修改。
classdef demo
properties(Constant)
R = pi/180;
end
...
end
尝试修改会报错
s = demo();
disp(s.R)
s.R = 100; % error
构造方法和普通方法
构造方法
与类同名的方法称为构造方法。MATLAB只允许创建一个构造方法,但是我们通过nargin判断参数个数,并据此实现不同的创建行为,例如
function obj = point2d(x0,y0)
if nargin == 0
obj.x = 0;
obj.y = 0;
elseif nargin == 2
obj.x = x0;
obj.y = y0;
else
error("unsupported arguments")
end
end
例如
s1 = point2d(1,2);
s2 = point2d();
s3 = point2d;
普通方法
类的普通方法的第一个参数是对象自身,并且习惯上使用obj表示。
classdef demo
properties
x = 100;
end
methods
function z = compute(obj,y)
z = obj.x + y;
end
end
end
普通方法可以通过对象或类调用
s = demo();
s.compute(10); % 110
compute(s,20); % 120
静态方法
MATLAB 提供了静态方法,在定义时标记为 Static,静态方法没有obj参数,不绑定任何的对象,不能访问类对象的普通属性,但是可以访问类的常量属性。
例如
classdef demo
methods(Static) % 静态方法
function hello()
disp("hello,world!")
end
end
end
使用例如
>> demo.hello()
hello,world!
>> s = demo();
>> s.hello()
hello,world!
重写disp方法
可以通过提供disp方法来定制自定义类型调用disp函数时的行为,例如
classdef point2d
properties
x = 0
y = 0
end
methods
function disp(obj)
fprintf("(%f,%f)",obj.x,obj.y);
end
end
end
提供disp函数后的输出
>> s = point2d();
>> disp(s)
(0.000000,0.000000)
作为对比,默认情况下的输出
>> s = point2d();
>> disp(s)
point2d with properties:
x: 0
y: 0
R: 0.0175
重载运算符
MATLAB 支持自定义类型对运算符的重载,例如plus方法对应加法。
classdef point2d
properties
x
y
end
methods
function obj = point2d(x0,y0)
% same as before
end
function result = plus(obj, other)
result = point2d(obj.x + other.x, obj.y + other.y);
end
end
end
例如
>> a = point2d(1,0);
>> b = point2d(0,2);
>> a + b
ans =
point2d with properties:
x: 1
y: 2
属性和方法的权限
MATLAB 提供了比 C++ 和 Java 更加精细的访问权限控制,默认情况下所有的属性和方法都是public。
基本的三种权限例如
classdef demo
properties % public
x1
end
properties(Access = protected)
x2
end
properties(Access = privated)
x3
end
methods % public
function h1(obj)
end
end
methods(Access = protected)
function h2(obj)
end
end
methods(Access = privated)
function h3(obj)
end
end
end
MATLAB对属性提供了更精细的访问权限,可以将其拆分为读权限和写权限,例如
classdef demo
properties(SetAccess = private)
x1
end
properties(SetAccess = private, GetAccess = protected)
x2
end
end
类的继承
MATLAB 使用 < 表示继承关系。
基类
classdef demo
properties
Value
end
methods
function obj = demo(val)
if nargin > 0
obj.Value = val;
else
obj.Value = 0;
end
end
function displayValue(obj)
disp(['Value: ', num2str(obj.Value)]);
end
end
end
派生类
classdef demo2 < demo
properties
ExtraValue
end
methods
function obj = demo2(val, extraVal)
obj = obj@demo(val); % 调用基类构造方法
if nargin > 1
obj.ExtraValue = extraVal;
else
obj.ExtraValue = 0;
end
end
function displayValue(obj)
displayValue@demo(obj); % 调用基类的同名函数
disp(['Extra Value: ',num2str(obj.ExtraValue)]);
end
end
end
补充
抽象方法和抽象类
MATLAB提供了抽象方法和抽象类。
抽象基类(不可实例化)
classdef demo
methods(Abstract) % 抽象方法
hello(obj) % 只有接口,没有实现
end
end
继承自抽象基类的派生类(实现了抽象方法,可以实例化)
classdef demo2 < demo
methods
function hello(obj) % 实现抽象方法
disp("hello,world!")
end
end
end
禁止继承和重写
可以使用 Sealed 关键词来禁止一个类被继承,例如
classdef (Sealed) demo
...
end
可以使用 Sealed 关键词来禁止方法被派生类重写,例如
classdef demo
methods(Sealed)
...
end
end
|