在第一天的学习中,我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构(嵌套 if
、switch
) 、循环类型 和 向量操作,帮助读者进一步掌握 MATLAB 的核心编程技能。
1. 条件语句进阶
1.1 嵌套 if
语句
嵌套 if
语句允许在一个条件分支中嵌入另一个条件判断,适用于处理多层级逻辑。
语法
if condition1
% 当 condition1 为 true 时执行
if condition2
% 当 condition1 和 condition2 同时为 true 时执行
end
end
示例
判断一个数是否为 正偶数:
x = 10;
if x > 0
if mod(x, 2) == 0
disp('正偶数');
else
disp('正奇数');
end
else
disp('非正数');
end
注意事项
-
避免过度嵌套(一般不超过 3 层),否则代码可读性会降低。
-
使用逻辑运算符(
&&
、||
)简化多层条件:if x > 0 && mod(x, 2) == 0 disp('正偶数'); end
1.2 switch
语句
switch
语句用于根据表达式的值执行不同的代码块,适合替代多层 if...elseif
结构。
语法
switch expression
case value1
% 当 expression == value1 时执行
case value2
% 当 expression == value2 时执行
otherwise
% 当无匹配 case 时执行
end
示例
根据星期数输出对应的名称:
day = 3;
switch day
case 1
disp('星期一');
case 2
disp('星期二');
case 3
disp('星期三');
otherwise
disp('无效输入');
end
% 输出:星期三
case
的多值匹配
一个 case
可以匹配多个值(使用元胞数组):
color = 'red';
switch color
case {'red', 'yellow'}
disp('暖色');
case {'blue', 'green'}
disp('冷色');
end
% 输出:暖色
1.3 嵌套 switch
语句
switch
语句内部可以嵌套另一个 switch
,但实际开发中较少使用(优先考虑代码结构优化)。
示例
根据用户角色和权限显示菜单:
role = 'admin';
permission = 'write';
switch role
case 'admin'
switch permission
case 'read'
disp('显示管理员只读菜单');
case 'write'
disp('显示管理员编辑菜单');
end
case 'user'
disp('显示用户菜单');
end
% 输出:显示管理员编辑菜单
2. 循环结构
2.1 while
循环
while
循环在条件为真时重复执行代码块,适合未知迭代次数的场景。
语法
while condition
% 循环体
end
示例
计算 1 到 100 的和:
sum = 0;
i = 1;
while i <= 100
sum = sum + i;
i = i + 1;
end
disp(sum); % 输出:5050
流程图
开始 → 检查条件 → 条件为真 → 执行循环体 → 更新条件 → 重复检查
↓
条件为假 → 结束循环
2.2 for
循环
for
循环用于遍历数组或指定次数的迭代,适合已知范围的循环。
语法
for index = start:step:end
% 循环体
end
示例
遍历数组元素并计算平方:
A = [2, 4, 6, 8];
for k = 1:length(A)
A(k) = A(k)^2;
end
disp(A); % 输出:[4, 16, 36, 64]
遍历矩阵
按列遍历矩阵:
matrix = [1 2; 3 4];
for col = matrix
disp(col);
end
% 输出:
% 1
% 3
% 2
% 4
2.3 嵌套循环
嵌套循环用于处理多维数据(如矩阵运算)。
示例
生成乘法表:
for i = 1:9
for j = 1:i
fprintf('%d*%d=%d\t', j, i, i*j);
end
fprintf('\n');
end
输出
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
...
2.4 break
与 continue
-
break
:立即终止当前循环,跳转到循环外。 -
continue
:跳过当前迭代,进入下一次循环。
示例
查找第一个能被 7 整除的数:
for num = 100:200
if mod(num, 7) ~= 0
continue; % 跳过非整除情况
end
disp(['找到:', num2str(num)]);
break; % 找到后退出循环
end
% 输出:找到:105
3. 向量操作
3.1 向量创建
向量是 MATLAB 的核心数据类型,分为 行向量 和 列向量。
方法 | 示例 | 说明 |
---|---|---|
直接输入 | v = [1 2 3 4] |
行向量 |
冒号运算符 | v = 1:2:10 |
生成 [1,3,5,7,9] |
linspace 函数 |
v = linspace(0,1,5) |
生成 0 到 1 的 5 等分点 |
zeros /ones |
v = zeros(1,5) |
零向量 [0,0,0,0,0] |
3.2 向量运算
加法与减法
向量维度必须一致:
A = [1 2 3];
B = [4 5 6];
C = A + B; % 输出:[5 7 9]
D = A - B; % 输出:[-3 -3 -3]
标量乘法
v = [1 2 3];
result = 2 * v; % 输出:[2 4 6]
转置向量
使用单引号 '
或 transpose()
函数:
row = [1 2 3];
col = row'; % 转置为列向量 [1; 2; 3]
3.3 向量高级操作
追加向量
使用方括号 []
或 cat()
函数:
v1 = [1 2];
v2 = [3 4];
v3 = [v1 v2]; % 输出:[1 2 3 4]
v4 = cat(2, v1, v2); % 水平拼接(同 [v1 v2])
向量模长
计算向量的欧几里得范数:
v = [3 4];
magnitude = norm(v); % 输出:5
向量点积
使用 dot()
函数或运算符 .*
配合 sum()
:
A = [1 2 3];
B = [4 5 6];
dot_product = dot(A, B); % 输出:32
dot_product_manual = sum(A .* B); % 输出:32
4. 应用案例
4.1 斐波那契数列生成
使用 for
循环生成前 10 项:
fib = zeros(1, 10);
fib(1:2) = [1 1];
for i = 3:10
fib(i) = fib(i-1) + fib(i-2);
end
disp(fib); % 输出:[1 1 2 3 5 8 13 21 34 55]
4.2 向量化计算
避免显式循环,提升代码效率:
% 计算向量元素的平方和
v = 1:100;
sum_squares = sum(v.^2); % 输出:338350
5. 总结与练习
5.1 核心知识点
主题 | 关键内容 |
---|---|
嵌套 if |
多层级逻辑判断,避免过度嵌套 |
switch |
多分支条件匹配,支持多值 case |
while /for |
循环控制,break 与 continue 的使用 |
向量操作 | 创建、运算、模长与点积计算 |
5.2 练习题目
-
编写一个
switch
语句,根据月份返回季节(如 1-3 月为春季)。 -
使用嵌套循环生成一个 5x5 的矩阵,其中对角线元素为 1,其余为 0。
-
计算两个向量的夹角(公式:θ = arccos( (A·B) / (||A|| ||B||) ))。
6. 下一步学习建议
-
矩阵操作:学习矩阵乘法、逆矩阵和特征值计算。
-
函数编写:掌握函数参数传递与返回值处理。
-
数据可视化 :使用
plot()
和scatter()
绘制二维/三维图形。
通过实践巩固知识,逐步掌握 MATLAB 在科学计算和工程分析中的强大能力!