官方资源:
MATLAB 简明教程
目录
1. MATLAB 简介
MATLAB(Matrix Laboratory)是一种用于数值计算、可视化和编程的高级语言和交互式环境。
1.1 MATLAB 环境
% 查看当前工作目录
pwd
% 列出当前目录下的文件
dir % 或 ls
% 改变工作目录
cd 'C:\Users\YourName\Documents'
% 清理命令窗口
clc
% 清理工作空间变量
clear
% 关闭所有图形窗口
close all1.2 获取帮助
% 查看函数帮助
help function_name
% 详细文档
doc function_name
% 查找相关函数
lookfor keyword2. 基础语法与操作
2.1 变量与数据类型
% 基本变量赋值
a = 10; % 标量
b = 3.14159; % 浮点数
c = 'Hello MATLAB'; % 字符串
d = true; % 逻辑值
% 查看变量信息
whos % 显示所有变量信息
class(a) % 查看变量类型
% 特殊变量
pi % 圆周率 π
eps % 机器精度
inf % 无穷大
NaN % 非数字
i 或 j % 虚数单位
% 清除特定变量
clear a b2.2 基本运算
% 算术运算
x = 10 + 5; % 加法
y = 10 - 5; % 减法
z = 10 * 5; % 乘法
w = 10 / 5; % 除法
v = 10 ^ 2; % 幂运算
u = mod(10, 3); % 取模运算
% 关系运算
a == b % 等于
a ~= b % 不等于
a > b % 大于
a < b % 小于
a >= b % 大于等于
a <= b % 小于等于
% 逻辑运算
~a % 非
a & b % 与
a | b % 或
xor(a, b) % 异或3. 矩阵与数组操作
3.1 创建矩阵
% 直接创建
A = [1 2 3; 4 5 6; 7 8 9] % 3×3矩阵
% 特殊矩阵
zeros(3, 4) % 3×4零矩阵
ones(2, 3) % 2×3全1矩阵
eye(4) % 4×4单位矩阵
rand(3, 3) % 3×3随机矩阵(0-1)
randn(2, 2) % 2×2正态分布随机矩阵
magic(3) % 3阶魔方阵
% 序列生成
1:5 % [1 2 3 4 5]
1:0.5:3 % [1 1.5 2 2.5 3]
linspace(0, 10, 5) % [0 2.5 5 7.5 10]
logspace(0, 2, 5) % 对数间隔序列3.2 矩阵操作
A = [1 2 3; 4 5 6; 7 8 9];
% 索引与切片
A(2, 3) % 第2行第3列元素
A(2, :) % 第2行所有元素
A(:, 3) % 第3列所有元素
A(1:2, 2:3) % 子矩阵
A(end, :) % 最后一行
A(:) % 展开为列向量
% 矩阵运算
A + B % 矩阵加法
A - B % 矩阵减法
A * B % 矩阵乘法
A .* B % 逐元素乘法
A / B % 矩阵右除
A \ B % 矩阵左除
A' % 转置
inv(A) % 逆矩阵
det(A) % 行列式
eig(A) % 特征值3.3 数组函数
A = [1 4 3; 2 5 6];
% 统计函数
max(A) % 每列最大值
min(A) % 每列最小值
mean(A) % 每列平均值
median(A) % 每列中位数
std(A) % 标准差
sum(A) % 每列求和
prod(A) % 每列乘积
% 排序
sort(A) % 每列升序排序
sort(A, 'descend') % 降序排序
sortrows(A, 1) % 按第1列排序行
% 形状操作
size(A) % 矩阵大小
length(A) % 最大维度长度
numel(A) % 元素总数
reshape(A, 3, 2) % 改变形状
repmat(A, 2, 3) % 重复矩阵4. 控制流与函数
4.1 条件语句
% if-elseif-else
x = 10;
if x > 0
disp('正数');
elseif x < 0
disp('负数');
else
disp('零');
end
% switch-case
day = 3;
switch day
case 1
disp('星期一');
case 2
disp('星期二');
otherwise
disp('其他日子');
end4.2 循环
% for 循环
for i = 1:5
fprintf('i = %d\n', i);
end
% while 循环
n = 1;
while n <= 5
fprintf('n = %d\n', n);
n = n + 1;
end
% 提前退出循环
for i = 1:10
if i == 5
break; % 退出循环
end
if mod(i, 2) == 0
continue; % 跳过本次迭代
end
fprintf('%d ', i);
end4.3 函数
% 创建函数文件 myfunction.m
function [output1, output2] = myfunction(input1, input2)
% 函数说明
% 输入: input1, input2
% 输出: output1, output2
output1 = input1 + input2;
output2 = input1 * input2;
end
% 匿名函数
f = @(x) x^2 + 2*x + 1;
result = f(3); % 计算 f(3)
% 函数句柄
g = @sin;
y = g(pi/2); % 计算 sin(π/2)5. 数据可视化
5.1 基本绘图
% 线图
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y);
title('正弦函数');
xlabel('x');
ylabel('sin(x)');
grid on;
legend('sin(x)');
% 多条曲线
y1 = sin(x);
y2 = cos(x);
plot(x, y1, 'r-', x, y2, 'b--');
legend('sin(x)', 'cos(x)');
% 子图
subplot(2, 2, 1); plot(x, sin(x));
subplot(2, 2, 2); plot(x, cos(x));
subplot(2, 2, 3); plot(x, tan(x));
subplot(2, 2, 4); plot(x, exp(-x));5.2 其他图形
% 散点图
x = randn(100, 1);
y = randn(100, 1);
scatter(x, y);
title('随机散点图');
% 柱状图
data = [10, 20, 15, 25, 30];
bar(data);
title('柱状图示例');
% 直方图
data = randn(1000, 1);
histogram(data, 20);
title('正态分布直方图');
% 3D图形
[X, Y] = meshgrid(-2:0.1:2, -2:0.1:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X, Y, Z);
title('3D曲面图');
xlabel('X'); ylabel('Y'); zlabel('Z');5.3 图形属性设置
x = 0:0.1:10;
y = sin(x);
% 线型和颜色
plot(x, y, 'r--', 'LineWidth', 2, 'Marker', 'o');
% 设置坐标轴
xlim([0, 10]);
ylim([-1.5, 1.5]);
axis equal; % 等比例坐标轴
axis tight; % 紧致坐标轴
% 添加文本
text(5, 0, '零点', 'FontSize', 12);
% 保存图形
saveas(gcf, 'myplot.png');
print(gcf, '-dpdf', 'myplot.pdf');6. 文件操作
6.1 读写文本文件
% 写入文本文件
data = [1 2 3; 4 5 6; 7 8 9];
dlmwrite('data.txt', data, 'delimiter', '\t');
% 读取文本文件
loaded_data = dlmread('data.txt');
% 写入CSV
csvwrite('data.csv', data);
% 读取CSV
csv_data = csvread('data.csv');6.2 Excel文件操作
% 读取Excel文件
[num, txt, raw] = xlsread('data.xlsx');
% 写入Excel文件
data = {'Name', 'Age', 'Score'; 'Alice', 25, 85; 'Bob', 30, 90};
xlswrite('output.xlsx', data);6.3 MAT文件操作
% 保存变量到MAT文件
save('mydata.mat', 'A', 'B', 'C');
save('alldata.mat'); % 保存所有变量
% 加载MAT文件
load('mydata.mat');
% 保存为ASCII格式
save('data.txt', 'A', '-ascii');6.4 文件管理
% 检查文件是否存在
exist('filename.txt', 'file')
% 获取文件信息
info = dir('*.m');
% 复制文件
copyfile('source.txt', 'destination.txt');
% 删除文件
delete('filename.txt');
% 创建目录
mkdir('newfolder');7. 实用技巧
7.1 调试技巧
% 设置断点
dbstop if error % 出错时暂停
dbstop in function_name at line_number
% 调试命令
dbstep % 单步执行
dbcont % 继续执行
dbquit % 退出调试模式
% 显示变量值
disp(variable_name)
fprintf('变量值: %f\n', variable)
% 测量执行时间
tic
% 执行代码
toc7.2 性能优化
% 预分配数组
n = 10000;
A = zeros(n, n); % 预分配内存
% 向量化操作(避免循环)
% 慢的方式
for i = 1:n
B(i) = A(i)^2;
end
% 快的方式
B = A.^2;
% 使用逻辑索引
idx = A > 0;
B = A(idx);
% 稀疏矩阵
S = sparse(A); % 转换为稀疏矩阵7.3 常用工具箱函数
% 符号计算
syms x y
f = x^2 + y^2;
diff(f, x) % 对x求导
int(f, x) % 对x积分
% 图像处理
img = imread('image.jpg');
imshow(img);
gray_img = rgb2gray(img);
% 信号处理
fs = 1000; % 采样频率
t = 0:1/fs:1;
signal = sin(2*pi*50*t);
spectrum = fft(signal);
% 优化求解
f = @(x) x^2 + 2*x + 1;
x0 = 0;
x_opt = fminsearch(f, x0);7.4 实用小技巧
% 获取当前时间
datetime('now')
date
% 暂停执行
pause(2) % 暂停2秒
% 声音提示
beep
% 错误处理
try
% 可能出错的代码
catch ME
disp(['错误: ' ME.message]);
end
% 格式化输出
fprintf('π = %.4f\n', pi);
fprintf('结果: %d, 时间: %s\n', result, datestr(now));

