小地瓜重新去华容道工作 2023-09-06 10:54 采纳率: 100%
浏览 17
已结题

MATLAB中for循环和while循环,当步进为小数时为什么得到的结果不一致

MATLAB中for循环和while循环,当步进为小数时得到的结果不一致。

%%
clc; close all;
% for循环,整数步进
sum=0;
for n=1:1:2
   sum=sum+1;
end
fprintf('\n[for] step by int, sum=%d, n=%d\n', sum, n);

% while循环,整数步进
sum=0;
n=1;
while n<=2
   sum=sum+1;
   n=n+1;
end
fprintf('\n[while] step by int, sum=%d, n=%d\n', sum, n);

% for循环,小数步进
sum=0;
for n=1:0.1:2
   sum=sum+1;
end
fprintf('\n[for] step by double, sum=%f, n=%f\n', sum, n);

% while循环,小数步进
sum=0;
n=1;
while n<=2
   sum=sum+1;
   n=n+0.1;
end
fprintf('\n[while] step by double, sum=%f, n=%f\n', sum, n);

输出结果:



[for] step by int, sum=2, n=2

[while] step by int, sum=2, n=3

[for] step by double, sum=11.000000, n=2.000000

[while] step by double, sum=10.000000, n=2.000000
  • 写回答

2条回答 默认 最新

  • 配电网和matlab 2023-09-06 13:49
    关注

    要找到问题很简单,你令迭代完成后n-2的取值都显示在命令行,代码如下:

    %% 相关参数设置
    %%
    clc; close all;
    % for循环,整数步进
    sum=0;
    for n=1:1:2
        sum=sum+1;
    end
    fprintf('\n[for] step by int, sum=%d, n=%d\n', sum, n);
    
    % while循环,整数步进
    sum=0;
    n=1;
    while n<=2
        sum=sum+1;
        n=n+1;
    end
    fprintf('\n[while] step by int, sum=%d, n=%d\n', sum, n);
    
    % for循环,小数步进
    sum=0;
    for n=1:0.1:2
        sum=sum+1;
    end
    fprintf('\n[for] step by double, sum=%f, n=%f\n', sum, n);
    n-2
    % while循环,小数步进
    sum=0;
    n=1;
    while n<=2
        sum=sum+1;
        n=n+0.1;
    end
    n-2
    fprintf('\n[while] step by double, sum=%f, n=%f\n', sum, n);
    
    

    运行结果:

    [for] step by int, sum=2, n=2
    
    [while] step by int, sum=2, n=3
    
    [for] step by double, sum=11.000000, n=2.000000
    
    ans =
    
         0
    
    
    ans =
    
       8.8818e-16
    
    
    [while] step by double, sum=10.000000, n=2.000000
    
    

    结果显示while循环出现了数值精度问题(matlab中最小能识别的数为eps=2.2204e-16),也就是每次小数计算时会有误差,误差可能多了也可能少了2.2204e-16,多次累计下来就导致最终结果超过了2。
    有用希望可以采纳一下哈!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月15日
  • 已采纳回答 9月7日
  • 创建了问题 9月6日

悬赏问题

  • ¥100 复现论文:matlab仿真代码编写
  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题