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

2024-05-10 1078阅读

 ​讲解视频:可以在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时,下面式子的结果:

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

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)斐波那契数列的递推公式为

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

求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)  % 显示新矩阵的结果

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

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

参考答案:

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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]