Запретить Matlab округлять выходные данные?

#matlab #rounding #number-formatting #newtons-method

#matlab #округление #форматирование чисел #метод ньютонов

Вопрос:

Я запускаю простой скрипт для оценки корней функции. Все работает отлично, каждая итерация алгоритма выводит текущие значения x и f(x), но когда скрипт завершается и устанавливает окончательную оценку x в качестве выходных данных функции, значение возвращается и округляется до 3 знаков после запятой…

 while k < maxit
    k = k   1;
    dx = b - a;
    xm = a   0.5*dx;       %  Minimize roundoff in computing the midpoint

    fm = feval(fun, xm, diameter, roughness, reynolds);

    fprintf('M  .20e  .4en',k,xm,fm); 

    if (abs(fm)/fref < feps) | (abs(dx)/xref < xeps) % True when root is found
        r = xm;  
    return;
end
  

вот хвостовой бит выходных данных:

 k       xm            fm
45  6.77444446476613980000e-003   1.3891e-012
46  6.77444446478035060000e-003  -1.3380e-011
47  6.77444446477324520000e-003  -5.9952e-012
48  6.77444446476969250000e-003  -2.3022e-012
49  6.77444446476791610000e-003  -4.5830e-013

    ans =

        0.0068
  

я не знаю, почему он округляет выходные данные…. как мне это предотвратить?

Комментарии:

1. просто выведите возвращаемое значение так же, как вы это делали внутри функции: x = myRootsFunction(...); fprintf('.20en',x)

Ответ №1:

попробуйте ввести ‘format longE’ в командной строке перед запуском скрипта

Комментарии:

1. или поместите его в начало скрипта. Это просто меняет способ отображения значений в окне командной строки — я полагаю, что если бы вы использовали ‘ans’ в последующих вычислениях, он использует его полную точность

Ответ №2:

У меня тоже была эта проблема. Проверьте эту страницу. Это позволяет вам лучше контролировать стиль ваших выходных данных.

http://www.mathworks.co.uk/help/techdoc/ref/format.html