当前位置: 主页 > 生物技术 > 软件与科研工具 > 生信分析与编程

MATLAB 程式设计与应用

2026-04-05 11:53 holiday816 本站原创 阅读 0
核心摘要: MATLAB 是一种强大的程式设计语言,用于数学运算、向量和矩阵运算。它提供了大量的内置函数和工具,方便用户进行各种计算和分析。MATLAB 的强大功能使其成为科学计算和数据分析的理想工具。

1-1、基本运算与函数

在 MATLAB 下进行基本数学运算,只需将运算式直接打入提示号(>>)之后,并按 Enter 键即可。

基本运算示例

matlab
>> (5*2+1.3-0.8)*10/25
ans = 4.2000

MATLAB 会将运算结果直接存入变量 ans(代表 Answer),并显示其数值于屏幕上。

小提示>> 是 MATLAB 的提示符号(Prompt),但在 PC 中文视窗系统下,由于编码方式不同,此提示符号常会消失不见,但这并不会影响到 MATLAB 的运算结果。

变量赋值

可将运算式的结果设定给另一个变量 x

matlab
x = (5*2+1.3-0.8)*10^2/25
x = 42

MATLAB 认识所有常用到的数学运算符号:

  • 加(+

  • 减(-

  • 乘(*

  • 除(/

  • 幂次运算(^

小提示:MATLAB 将所有变量均存成 double 的形式,所以不需经过变量宣告(Variable declaration)。MATLAB 同时也会自动进行内存的使用和回收,而不必像 C 语言必须由使用者一一指定。这些功能使 MATLAB 易学易用,使用者可专心致力于撰写程式,而不必被软件枝节问题所干扰。

抑制输出

若不想让 MATLAB 每次都显示运算结果,只需在运算式最后加上分号(;)即可:

matlab
y = sin(10)*exp(-0.3*4^2);

若要显示变量 y 的值,直接键入 y 即可:

matlab
>> y
y = -0.0045

上例中,sin 是正弦函数,exp 是指数函数,这些都是 MATLAB 常用到的数学函数。


MATLAB 常用函数汇总

基本数学函数

 
 
函数 说明
abs(x) 纯量的绝对值或向量的长度
angle(z) 复数 z 的相角
sqrt(x) 开平方
real(z) 复数 z 的实部
imag(z) 复数 z 的虚部
conj(z) 复数 z 的共轭复数
round(x) 四舍五入至最近整数
fix(x) 无论正负,舍去小数至最近整数
floor(x) 地板函数,舍去正小数至最近整数
ceil(x) 天花板函数,加入正小数至最近整数
rat(x) 将实数 x 化为分数表示
rats(x) 将实数 x 化为多项分数展开
sign(x) 符号函数:x<0时=-1,x=0时=0,x>0时=1
rem(x,y) 求 x 除以 y 的余数
gcd(x,y) 整数 x 和 y 的最大公因数
lcm(x,y) 整数 x 和 y 的最小公倍数
exp(x) 自然指数
pow2(x) 2 的指数
log(x) 以 e 为底的对数(自然对数)
log2(x) 以 2 为底的对数
log10(x) 以 10 为底的对数

三角函数

 
 
函数 说明
sin(x) 正弦函数
cos(x) 余弦函数
tan(x) 正切函数
asin(x) 反正弦函数
acos(x) 反余弦函数
atan(x) 反正切函数
atan2(x,y) 四象限的反正切函数
sinh(x) 双曲正弦函数
cosh(x) 双曲余弦函数
tanh(x) 双曲正切函数
asinh(x) 反双曲正弦函数
acosh(x) 反双曲余弦函数
atanh(x) 反双曲正切函数

向量与矩阵运算

向量操作

变量也可用来存放向量或矩阵,并进行各种运算:

matlab
x = [1 3 5 2];
y = 2*x + 1
y = 3 7 11 5

变量命名规则

  1. 第一个字母必须是英文字母

  2. 字母间不可留空格

  3. 最多只能有 19 个字母,MATLAB 会忽略多余字母

向量元素的修改

matlab
y(3) = 2          % 更改第三个元素
y = 3 7 2 5

y(6) = 10         % 加入第六个元素
y = 3 7 2 5 0 10

y(4) = []         % 删除第四个元素
y = 3 7 2 0 10

MATLAB 会忽略所有在百分比符号(%)之后的文字,因此百分比之后的文字均可视为程式的注释(Comments)。

向量元素运算

matlab
x(2)*3 + y(4)     % 取出 x 的第二个元素和 y 的第四个元素运算
ans = 9

y(2:4) - 1        % 取出 y 的第二至第四个元素运算
ans = 6 1 -1

等差数列的生成

matlab
x = 7:16          % 公差为 1
x = 7 8 9 10 11 12 13 14 15 16

x = 7:3:16        % 公差为 3
x = 7 10 13 16

使用 linspace 产生任意等差数列:

matlab
x = linspace(4, 10, 6)   % 首项4,末项10,项数6
x = 4.0000 5.2000 6.4000 7.6000 8.8000 10.0000

转置操作

matlab
z = x'            % 列向量转置为行向量
z = 4.0000 5.2000 6.4000 7.6000 8.8000 10.0000

向量常用函数

 
 
函数 说明
min(x) 向量 x 的元素的最小值
max(x) 向量 x 的元素的最大值
mean(x) 向量 x 的元素的平均值
median(x) 向量 x 的元素的中位数
std(x) 向量 x 的元素的标准差
diff(x) 向量 x 的相邻元素的差
sort(x) 对向量 x 的元素进行排序
length(x) 向量 x 的元素个数
norm(x) 向量 x 的欧氏(Euclidean)长度
sum(x) 向量 x 的元素总和
prod(x) 向量 x 的元素总乘积
cumsum(x) 向量 x 的累计元素总和
cumprod(x) 向量 x 的累计元素总乘积
dot(x, y) 向量 x 和 y 的内积
cross(x, y) 向量 x 和 y 的外积

大部分向量函数也可适用于矩阵。

矩阵的输入与操作

输入矩阵时,必须在每一列结尾加上分号(;):

matlab
A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
A
A = 1 2 3 4
    5 6 7 8
    9 10 11 12

矩阵元素操作

matlab
A(2,3) = 5        % 改变位于第二列、第三行的元素值
A = 1 2 3 4
    5 6 5 8
    9 10 11 12

B = A(2, 1:3)     % 取出部分矩阵 B
B = 5 6 5

A = [A B']        % 将 B 转置后以行向量并入 A

A(:, 2) = []      % 删除第二行(:代表所有列)
A = 1 3 4 5
    5 5 8 6
    9 11 12 5

A = [A; 4 3 2 1] % 加入第四列
A = 1 3 4 5
    5 5 8 6
    9 11 12 5
    4 3 2 1

A([1 4], :) = []  % 删除第一和第四列
A = 5 5 8 6
    9 11 12 5

小提示:在 MATLAB 的内部数据结构中,每一个矩阵都是一个以行为主(Column-oriented)的阵列(Array)。对矩阵元素的存取,可用一维或二维的索引来定址。例如,上述矩阵 A 中位于第二列、第三行的元素可写为 A(2,3)(二维索引)或 A(6)(一维索引)。

矩阵形状重排

matlab
B = reshape(A, 4, 2)   % 4是新矩阵的列数,2是新矩阵的行数
B = 5 8
    9 12
    5 6
    11 5

A(:) 将矩阵 A 每一列堆叠起来,成为一个行向量,这也是 MATLAB 变量的内部储存方式。

多命令执行与续行

MATLAB 可在同时执行数个命令,以逗号或分号隔开:

matlab
x = sin(pi/3); y = x^2; z = y*10,
z = 7.5000

若数学运算太长,可用三个句点(...)延伸到下一行:

matlab
z = 10*sin(pi/3) * ...
    sin(pi/3);

工作空间管理

检视现存于工作空间(Workspace)的变量:

matlab
who           % 列出变量名称
whos          % 列出变量详细资料
clear A       % 删除变量 A

MATLAB 永久常数

 
 
常数 说明
i 或 j 基本虚数单位
eps 系统的浮点精确度
inf 无限大(如 1/0)
nan 或 NaN 非数值(如 0/0)
pi 圆周率 π
realmax 系统所能表示的最大数值
realmin 系统所能表示的最小数值
nargin 函数的输入引数个数
nargout 函数的输出引数个数

1-2、重复命令(流程控制)

for 循环

基本形式:

matlab
for 变量 = 矩阵
    运算式
end

示例:产生长度为6的调和数列

matlab
x = zeros(1,6);    % x 是一个 1×6 的零矩阵
for i = 1:6
    x(i) = 1/i;
end

format rat        % 使用分数来表示数值
disp(x)
1 1/2 1/3 1/4 1/5 1/6

嵌套循环:产生 6×6 的 Hilbert 矩阵

matlab
h = zeros(6);
for i = 1:6
    for j = 1:6
        h(i,j) = 1/(i+j-1);
    end
end
disp(h)

小提示:预先配置矩阵(使用 zeros 或 ones)可提高程式执行效率,避免 MATLAB 动态增减矩阵大小。

逐行操作

matlab
for i = h
    disp(norm(i)^2);   % 印出每一行的平方和
end

while 循环

基本形式:

matlab
while 条件式
    运算式
end

示例:产生调和数列

matlab
x = zeros(1,6);
i = 1;
while i <= 6
    x(i) = 1/i;
    i = i + 1;
end
format short

1-3、逻辑命令(条件控制)

if 语句

基本形式:

matlab
if 条件式
    运算式
end

示例:

matlab
if rand(1,1) > 0.5
    disp('Given random number is greater than 0.5.');
end

1-4、M 档案(Scripts 与 Functions)

命令集(Scripts)

将大量 MATLAB 命令存放于副档名为 .m 的档案中,在 MATLAB 提示号下键入主档名即可执行。

示例 test.m:

matlab
% This is my first test M-file.
% Roger Jang, March 3, 1997

fprintf('Start of test.m!\n');
for i = 1:3
    fprintf('i = %d ---> i^3 = %d\n', i, i^3);
end
fprintf('End of test.m!\n');

执行:

matlab
>> test
Start of test.m!
i = 1 ---> i^3 = 1
i = 2 ---> i^3 = 8
i = 3 ---> i^3 = 27
End of test.m!

小提示:第一注解行(H1 help line)通常用来简短说明 M 档案的功能,以便 lookfor 能以关键字比对方式找出此 M 档案。

函数(Functions)

函数需要输入引数和输出引数来传递信息。

示例:阶乘函数 fact.m

matlab
function output = fact(n)
% FACT Calculate factorial of a given positive integer.
output = 1;
for i = 1:n
    output = output * i;
end

使用:

matlab
y = fact(5)
y = 120

递归函数示例:

matlab
function output = fact(n)
% FACT Calculate factorial recursively.
if n == 1                    % Terminating condition
    output = 1;
    return;
end
output = n * fact(n-1);

重要提示:递归函数必须包含结束条件(Terminating condition),否则会无限调用直到内存耗尽。

函数与脚本的区别

 
 
特性 脚本(Script) 函数(Function)
变量空间 使用基本工作空间 使用临时工作空间
输入参数 不需要 需要
输出参数 不需要 需要
变量持久性 变量保留在工作空间 临时变量随函数结束消失

1-5、搜寻路径(Path)

查看与设置路径

matlab
path              % 查看 MATLAB 搜寻路径
which expo        % 查询命令所在位置

添加路径

matlab
path(path, 'c:\datamlbook');

MATLAB 命令搜索顺序

  1. 视为使用者定义的变量

  2. 视为永久常数

  3. 检查是否为目前工作目录下的 M 档案

  4. 由搜寻路径寻找 M 档案

  5. 若找不到,发出错误讯息

自动设定搜寻路径的方法

  1. 修改 matlabrc.m:MATLAB 每次启动后自动执行此档案

  2. 建立 startup.m:在预设搜寻路径中放置此档案,存放启动时需执行的命令


1-6、资料的储存与载入

save 命令

matlab
save                      % 储存所有变量至 matlab.mat
save filename             % 储存所有变量至 filename.mat
save filename x y z       % 储存变量 x,y,z 至 filename.mat
save filename x -ascii    % 以 ASCII 格式储存(八位数)
save filename x -ascii -double  % 以 ASCII 格式储存(十六位数)

load 命令

matlab
load filename             % 载入 filename.mat(二进制)或 filename(ASCII)
load filename -ascii      % 以 ASCII 格式载入

二进制与 ASCII 格式比较

 
 
特性 二进制格式 ASCII 格式
文件扩展名 .mat 无固定扩展名
文件大小 较小 较大
载入速度 较快 较慢
可读性 不可读 可用文本编辑器查看
变量名保留 否(以文件名作为变量名)
复数支持 完整 仅实部

示例:

matlab
clear all;
x = 1:10;
save testfile.dat x -ascii    % 以 ASCII 格式储存
load testfile.dat             % 载入档案

    发表评论