在第一天的学习中,我们掌握了 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 在科学计算和工程分析中的强大能力!