Ряд Тейлора, использующий цикл while в Matlab
Я пытаюсь приблизить cos(x), используя Маклауринскую серию. Значение x и границы ошибки должны быть пользовательскими, а пользователю необходимо увидеть приблизительное значение и количество итераций, необходимых для получения этого ответа. Я пытаюсь продемонстрировать это, используя x=2 и ошибку<=.001. С этими параметрами мой код всегда возвращает 8 итераций и ответ -.0476. Что я сделал не так?
function [CosApprox, Numberofterms] = cos_approx(x, E)
k(1)=1;
T=1;
cos_approx(1)=1
while T>=E
k=k+1;
cos_approx(k)= cos_approx(k-1) + ((-1)^(k-1))*(x^(2*(k-1)))/(2*(factorial(k-1)));
T=abs(cos_approx(k) - cos(x));
end
CosApprox=cos_approx(k)
Numberofterms=k
Я действительно новичок в Matlab, поэтому я прошу прощения, если я пропустил что-то очевидное.
1 ответ
Ваш код не возвращает 8 итераций, он возвращает 513 итерации на моем компьютере и завершается, потому что мы делим очень большое число, более 2^(512) в числителе и еще одно очень большое число 512! который оценивается как Inf в знаменателе.
Вы используете неправильную математическую формулу.
2*(factorial(k-1))
в знаменателе должно было быть
factorial(2*(k-1))
Простое изменение даст ответ -0,4159, в то время как cos(2) приблизительно равен -0,4161.
Теперь, когда вы поймете, что не так, вы можете попытаться улучшить код с точки зрения скорости и читабельности.
Примечание: старайтесь не давать одно и то же имя вектору и функции, это сбивает с толку.