#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:
У меня тоже была эта проблема. Проверьте эту страницу. Это позволяет вам лучше контролировать стиль ваших выходных данных.