MATLAB知识点:for循环的七道经典例题

文章介绍了MATLAB编程中基础的for循环结构,包括计算向量元素和、斐波那契数列、判断闰年以及查找水仙花数等实例,强调了循环在处理数学问题中的重要性。
摘要由CSDN通过智能技术生成

 ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili


节选自​第4章:MATLAB程序流程控制

(1)不使用sum函数,计算行向量x中所有元素的和。  

x = [5 8 9 1 4 3 7]; 
s = 0;  % 初始化最终的求和结果为0
for ii = x
    s = s + ii;
end
disp(s)

在这个示例中,for 循环遍历了向量 x 中的每个元素,将它们逐个加到变量 s 中,最终得到了所有元素的和。

思考:如果x是一个列向量,左侧的代码输出的s是什么,应该如何修改代码?

(2)计算当n等于100时,下面式子的结果:

y\left( n \right) \,\,=\,\,1+\frac{1}{2^2}+\frac{1}{3^2}+\cdots +\frac{1}{n^2}

n = 100;  % 设置n的值
y = 0;    % 初始化y的值为0
for k = 1:n
% 计算每一项并累加到y中
y = y + 1 / (k^2);  
end
disp(y)

在这个示例中,for 循环从 1 到 n 遍历每个整数   k,并计算每一项 1 / (k^2),然后将它们累加到变量 y 中。最终,y 的值将是整个表达式的结果。

思考:使用上一章的知识点,如何通过一行代码直接计算y的值?

参考答案: y = sum(1./(1:100).^2)

(3)计算当n从1一直取到100时,上一小问式子的计算结果,并将计算结果保存到一个长度为100的行向量S中(S中第i个元素表示y(i)的结果)。

S = zeros(1, 100); 
for n = 1:100
    y = 0;    % 初始化y的值为0
    for k = 1:n
        y = y + 1 / (k^2);  
    end
    S(n) = y;
end
disp(S)

这里使用了循环的嵌套,上一问的代码可用来求出任意一个具体的n对应的y。因此,这一问我们只需要使用循环让n从1遍历到100,并将每次的计算结果保存到向量S中。

请大家思考:(1)y = 0;这行代码能否放在循环的外面? (2)能否优化上面的代码,使得通过一次循环就得到S。

这两个问题留作本章最后的课后习题。

(4)计算从公元1年到公元9999年间,有多少个闰年。闰年的判读条件是年份能够被4整除,但不能被100整除,或者年份能够被400整除。

% 初始化闰年计数器
leap_year_count = 0;
% 循环遍历从公元1年到公元9999年的每一年
for year = 1:9999
    % 检查是否为闰年的条件
    if (mod(year, 4) == 0 && mod(year, 100) ~= 0) || (mod(year, 400) == 0)
        % 如果是闰年,增加计数器
        leap_year_count = leap_year_count + 1;
    end
end
disp(leap_year_count)

(5)一个三位正整数各位数字的立方和等于该数本身则称该数为水仙花数,例如:1^3 + 5^3+ 3^3 = 153,则153是水仙花数。请你找出所有的水仙花数并将其保存到向量S中。

% 初始化存储水仙花数的向量S为空
S = [];
% 循环遍历所有的三位整数
for num = 100:999
    % 拆解数字
    digit1 = floor(num / 100);     % 百位
    digit2 = floor(mod(num, 100) / 10);  % 十位
    digit3 = mod(num, 10);          % 个位
    % 检查是否为水仙花数的条件
    if num == digit1^3 + digit2^3 + digit3^3
        S = [S, num];  % 若是水仙花数,则添加到向量S中
    end
end
% 显示所有的水仙花数
disp(S)

(6)斐波那契数列的递推公式为

求F(30).

n = 30;
F = ones(1,n);   % 初始化用来保存中间计算结果的向量全为1
for k = 3:n
     F(k) = F(k-1) + F(k-2);
end
Fn = F(n)
% 832040

(7)生成一个5行8列的矩阵,矩阵中每个元素都是在区间[1, 10]上取值的随机整数。接下来请循环每一列,若发现同一列的五个元素各不相同,则保留该列;若该列中有重复的元素则删除该列。

% 生成随机整数矩阵
matrix = randi([1, 10], 5, 8);
% 输出生成的随机整数矩阵
disp(matrix)
% 初始化新矩阵,用于存储五个元素各不相同的列
new_matrix = [];
% 循环遍历每一列
for column = matrix 
    % 使用unique函数取当前列的唯一值
    unique_column = unique(column);
    % 若取完唯一值后还是5个元素,则添加到新矩阵中
    if length(unique_column) == 5
        new_matrix = [new_matrix, column];
    end
end
disp(new_matrix)  % 显示新矩阵的结果

思考题:你能不使用循环语句求解这个问题吗?

参考答案:

matrix(:,all(diff(sort(matrix))))

  • 59
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,for循环是一种常用的循环语句,主要用于重复执行一段代码,直到满足某个条件为止。for循环通常包含一个循环变量、循环范围和循环体三个部分。 for循环的基本语法为: ``` for 循环变量 = 循环范围 循环体 end ``` 其中,循环变量是一个变量,循环范围是一个数组或向量,循环体是需要执行的代码。for循环会按照循环范围中元素的顺序依次执行循环体。 例如,以下代码使用for循环输出1到10的整数: ``` for i = 1:10 disp(i) end ``` 在这个例子中,循环变量i从1到10依次取值,每次循环都会执行disp(i),即输出i的值。 在for循环中,循环范围可以是一个向量或矩阵。如果循环范围是一个向量,则循环变量会依次取向量中的每个元素;如果循环范围是一个矩阵,则循环变量会按照列优先的顺序依次取矩阵中的每个元素。 例如,以下代码使用for循环计算一个3x3矩阵的行和: ``` A = [1 2 3; 4 5 6; 7 8 9]; row_sum = zeros(1, 3); for i = 1:3 for j = 1:3 row_sum(i) = row_sum(i) + A(i, j); end end disp(row_sum) ``` 在这个例子中,外层循环变量i取值为1到3,内层循环变量j也取值为1到3,每次内层循环会将A(i,j)加到row_sum(i)中,最终得到每行的和。 除了基本语法外,for循环还支持break和continue语句。break语句用于跳出循环,continue语句用于跳过本次循环。 例如,以下代码使用for循环输出1到10的整数,但跳过偶数: ``` for i = 1:10 if mod(i, 2) == 0 continue end disp(i) end ``` 在这个例子中,如果i是偶数,则跳过本次循环,否则输出i的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值