2013-05-26 2 views
0

Я пытаюсь сохранить некоторые переменные на разных временных шагах в цикле while, используя команду «save». Он работал в других программах, которые я написал ранее. Это первый раз, когда он не экономит. Я пробовал много вещей, таких как переименование файла, в который сохраняются данные, переименование скрипта, но он не работает. Вот пример кода:MATLAB: команда сохранения не работает

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) 

Я не могу найти выход из этого.

ответ

2

Это, вероятно, такие условия, как 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 
    ... 

Для введения в арифметики с плавающей точкой, смотреть на Угловое статьи Клив в: Плавающие Очки (PDF)

Для более строгого и подробную информацию о арифметике с плавающей запятой, читайте What Every Computer Scientist Should Know About Floating Point Arithmetic.

Смежные вопросы