0

我正在尝试使用“保存”命令在 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)

我无法找到解决办法。

4

1 回答 1

2

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

当您尝试比较两个浮点数时,请务必小心使用==to 这样做。例如,当您尝试:

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 )

有关浮点运算的更严格和详细的信息,请阅读 每个计算机科学家应该了解的关于浮点运算的知识。

于 2013-05-26T05:54:05.090 回答