Я пытаюсь построить полином Тейлора для sin(x)
в a=0
с вводом m
градусов в октаве GNU. sin(x)
отображается вместе с оценкой.
m = int8(input('Input integer m in [0,10]: '));
if m<0 || m>10
disp('Thanks for playing');
return;
end
x = [-5:0.01:5];
y1 = sin(x);
for n=0:m
y2 = ((-1).^n/factorial(2*n+1))*x.^(2*n+1);
plot(y2);
hold on;
end
plot(y1,'linewidth',4)
ylim([-1.5,1.5]);
Код выше печатает следующее изображение:
Что заставляет каждую оценку иметь так мало точек перегиба? Я попытался установить xlim([-5,5])
, но это не решило мою проблему.
В настоящее время вы только оцениваете каждый термин без суммирования.
Вам нужно инициализировать y2
и обновить сумму за итерацию:
y2 = 0 % initialize y2
for n = 0:m
y2 = (-1).^n/factorial(2*n+1) * x.^(2*n+1) + y2; % add to previous y2
plot(y2);
hold on;
end
Здесь это просто проблема программирования. Если y2
не инициализируется перед циклом, y2
будет неопределенным на первой итерации и выдаст ошибку, когда мы попытаемся выполнить ... + y2
.
А, понял. Я смешивал ваш метод с суммированием ряда Тейлора, но также понял, что это не имеет смысла / не требуется только для одного значения m
.
Спасибо за исправление. Чтобы задать, возможно, очевидный вопрос, возникает ли необходимость инициализации из определения самого ряда Тейлора?