温馨提示:这篇文章已超过441天没有更新,请注意相关的内容是否还可用!
摘要:本文介绍了MATLAB中for循环的七道经典例题。这些例题涵盖了for循环的基本用法、嵌套循环、数组操作、函数迭代等方面。通过解析这些例题,读者可以更好地理解for循环在MATLAB中的实现方式和应用场景,提高编程效率和代码质量。
讲解视频
可以在Bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。
(1)不使用sum函数,计算行向量x中所有元素的和。
x = [5 8 9 1 4 3 7]; s = 0; % 初始化最终的求和结果为0 for ii = x s = s + ii; % 循环遍历向量x中的每个元素并累加至变量s中 end disp(s) % 输出累加结果
在这个示例中,for循环遍历了向量x中的每个元素,将它们逐个加到变量s中,最终得到了所有元素的和,思考:如果x是一个列向量,该如何修改代码?请考虑使用MATLAB的向量化操作来简化计算。
(2)计算当n等于100时,特定数列的和,公式如下: y = 1 + 1/2² + 1/3² + … + 1/n²,使用循环计算累加结果,同时提供一行代码直接计算y的值。
n = 100; % 设置n的值 y = 0; % 初始化y的值为0 for k = 1:n % 循环遍历从1到n的每个整数k y = y + 1 / (k^2); % 计算每一项并累加到y中 end disp(y) % 输出累加结果y的值 ``参考答案:使用上一章的知识点,可以通过一行代码直接计算y的值:
y = sum(1./(1:n).^2),解释:使用MATLAB的向量化操作,将序列
(1:n)的每个元素平方后取倒数,然后求和,这种方法更加简洁高效,请尝试理解并应用这一技巧。 (3)计算当n从1到100时,上一小问式子的计算结果,并将结果保存到一个长度为100的行向量S中,同时提供优化后的代码实现,思考两个问题:(a)能否将初始化y的代码放在循环外面?(b)能否通过一次循环得到S?
`matlabS = zeros(1, 100); % 初始化一个长度为100的零向量for n = 1:100 y = 0; % 每次循环开始时重置y的值 for k = 1:n y = y + 1 / (k^2); % 计算每一项并累加到y中 end S(n) = y; % 将计算结果保存到向量S中enddisp(S)思考:(a)理论上可以将初始化y的代码放在循环外面,但考虑到每次循环都要计算新的结果,放在循环内部更为合适。(b)可以通过一次循环得到S,但需要存储中间结果,可能会增加内存消耗,一种可能的优化方法是使用数组函数和向量化操作来简化计算过程。
`(4)计算从公元1年到公元9999年间,有多少个闰年,给出循环遍历的实现方式,思考如何优化代码效率。
`matlableap_year_count = 0; % 初始化闰年计数器for year = 1:9999 % 循环遍历从公元1年到公元9999年的每一年 if (mod(year, 4) == 0 && mod(year, 100) ~= 0) || (mod(year, 400) == 0) % 检查是否为闰年的条件 leap_year_count = leap_year_count + 1; % 如果是闰年,增加计数器 endenddisp(leap_year_count)思考:可以通过预编译条件表达式来提高代码效率,避免在循环内部进行复杂的模运算,可以考虑使用向量化操作来进一步加速计算过程。
`#### (5)寻找所有的水仙花数并将其保存到向量S中,水仙花数是指一个三位正整数各位数字的立方和等于该数本身。
``matlabS = []; % 初始化存储水仙花数的向量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 % 检查是否为水仙花数的条件
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...