【问题标题】:MATLAB: Save command not workingMATLAB:保存命令不起作用
【发布时间】:2013-05-26 01:57:37
【问题描述】:

我正在尝试使用“保存”命令在 while 循环中的不同时间步保存一些变量。它在我之前编写的其他程序中工作。这是第一次不保存。我尝试了很多事情,例如重命名保存数据的文件,重命名脚本,但它不起作用。这是示例代码:

T=0;
while T<300 (time loop)
loop1

loop2
.
.
.
if T==0.01
save('arbit100x100ht10e-3results.txt','Pnew','unew','-ascii','-append')
else if T==0.02
    save('arbit100x100ht10e-3results.txt','Pnew','unew','-ascii','-append')
else if T==0.04
        save('arbit100x100ht10e-3results.txt','Pnew','unew','-ascii','-append')
.
.
. (all the if-if else statements have their respective "end")


T=T+ht; %ht is time step

end (while loop)

我想不出办法。

【问题讨论】:

    标签: matlab while-loop save floating-accuracy


    【解决方案1】:

    可能是像if T==0.01 这样的情况由于浮点精度限制而永远不会发生,导致文件无法保存。

    当您尝试比较两个浮点数时,在使用 == 时要非常小心。例如,当您尝试:

    T=0.9-0.8;
    T==0.1
    ans =
         0
    

    您会看到 T 永远不会是 ==0.1 因为双精度如何以二进制形式表示:

    T-0.1
    ans =
       -2.7756e-17
    

    另一种比较方法是检查您要比较的两个数字是否“足够接近”(以容差表示)。尝试将if 条件更改为包含阈值容差的内容,例如:

    if abs(T-0.01)<1e-10
        ...
    

    有关浮点运算的介绍,请查看 Cleve 的文章:浮点 (PDF)

    有关浮点运算的更严格和详细的信息,请阅读What Every Computer Scientist Should Know About Floating Point Arithmetic

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多