MATLAB—从入门到精通的第二天

在第一天的学习中,我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构(嵌套 ifswitch循环类型向量操作,帮助读者进一步掌握 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 breakcontinue

  • 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 循环控制,breakcontinue 的使用
向量操作 创建、运算、模长与点积计算

5.2 练习题目

  1. 编写一个 switch 语句,根据月份返回季节(如 1-3 月为春季)。

  2. 使用嵌套循环生成一个 5x5 的矩阵,其中对角线元素为 1,其余为 0。

  3. 计算两个向量的夹角(公式:θ = arccos( (A·B) / (||A|| ||B||) ))。


6. 下一步学习建议

  1. 矩阵操作:学习矩阵乘法、逆矩阵和特征值计算。

  2. 函数编写:掌握函数参数传递与返回值处理。

  3. 数据可视化 :使用 plot()scatter() 绘制二维/三维图形。

通过实践巩固知识,逐步掌握 MATLAB 在科学计算和工程分析中的强大能力!

相关推荐
Doopny@10 分钟前
数字组合(信息学奥赛一本通-1291)
数据结构·算法·动态规划
君莫愁。17 分钟前
【Unity】搭建基于字典(Dictionary)和泛型列表(List)的音频系统
数据结构·unity·c#·游戏引擎·音频
原来是猿1 小时前
蓝桥备赛(13)- 链表和 list(上)
开发语言·数据结构·c++·算法·链表·list
项目申报小狂人1 小时前
高性能算法NGO!北方苍鹰优化算法(Northern Goshawk Optimization,NGO)
算法·数学建模
且听风吟ayan1 小时前
leetcode day26 重复的子字符串
算法·leetcode·c#
仟濹1 小时前
【算法 C/C++】二维差分
c语言·c++·算法
*星星之火*2 小时前
【GPT入门】第9课 思维树概念与原理
gpt·算法·深度优先
总斯霖2 小时前
题解:士兵排列
数据结构·c++·算法
稳兽龙2 小时前
P4268 [USACO18FEB] Directory Traversal G
c++·算法·换根dp
平谷一勺3 小时前
go切片定义和初始化
数据结构·golang·数组·切片