Почему Matlab округляется до 4 знаков после запятой?
У меня есть следующий код, который печатает / выводит на график результат приближения ряда Тейлора.
close all;
clear;
clc;
fprintf('#\tf(pi/3)\t\t\t\tfn(pi/3)\t\t\tEt\n');
% actual function
syms x;
f(x)=exp(-x)*cos(x);
h = ezplot(f);
grid on;
hold on;
set(h,'Color','b', 'LineWidth', 3);
% presets for Taylor.
a=1;
maxorder=10;
% Taylor Series
y(x)=f(a);
for n=1:maxorder
d(x) = diff(f(x),x,n);
y(x) = y(x) + d(a)*((x-a)^n)/factorial(n);
error=double(f(pi/3))-double(y(pi/3));
fprintf('%.0f\t%.14f\t%.14f\t%.14f\n',n,double(f(pi/3)),double(y(pi/3)),error);
end
h = ezplot(y);
axis([0, 4.5,-1, 1]);
set(h,'Color','r', 'LineWidth', 3);
set(gca,'FontSize', 15');
title('Taylor Series of e^{-x}cos(x)');
Однако распечатанная таблица по какой-то причине усекается на 4 знака после десятичной точки. Typing:
get(0,'format')
в терминал Matlab говорит мне, что форматирование установлено на долго. Я понятия не имею, почему это может происходить.
Вот как выглядит таблица:
# f(pi/3) fn(pi/3) Et
1 0.17550000000000 0.17480000000000 0.00070000000000
2 0.17550000000000 0.17550000000000 0.00000000000000
3 0.17550000000000 0.17550000000000 0.00000000000000
4 0.17550000000000 0.17550000000000 0.00000000000000
5 0.17550000000000 0.17550000000000 0.00000000000000
6 0.17550000000000 0.17550000000000 0.00000000000000
7 0.17550000000000 0.17550000000000 0.00000000000000
8 0.17550000000000 0.17550000000000 0.00000000000000
9 0.17550000000000 0.17550000000000 0.00000000000000
10 0.17550000000000 0.17550000000000 0.00000000000000
Это округление, кажется, происходит только с символическими функциями. Это случается, когда они не используются. Есть идеи, почему и как я могу это исправить?
1 ответ
Я могу воспроизвести ваши настройки вывода digits(4)
, Установите его обратно на 32, и все должно быть в порядке.
digits
Функция позволяет установить точность арифметики переменной точности mupad. Точность была уменьшена до 4 цифр по некоторым причинам.