Я здесь новый.Сбой кода MATLAB в конце
Описание сценария:
Я написал MATLAB код, чтобы использовать частичную сумму S_n (х) = Sum от у = 0 до п (-1)^J * х^(2j + 1)/(2j + 1)! для аппроксимации sin x. Я написал компьютерную программу, чтобы оценить эту частичную сумму методов
LS: вычислительные и суммируя условия от наибольшего члена первого наименьшему срока последнего
и
SL: делать расчет в обратный порядок.
Я использовал свою программу для вычисления S_n (x) для x = 0,1, 1 и 10 с помощью обоих методов LS и SL и сравнил результаты с sin x. Я использовал n = 10, 100 и 1000.
Вопрос: Я столкнулся с проблемой в последних двух строках моего кода. Он говорит «NaN» (не число), но также показывает отклоняющиеся числа в предыдущем столбце. Что я делаю не так? Может кто-нибудь мне помочь?
Вот мой код:
Первая функция:
function ret = hw1_6_1(x,n)
ret=((-1)^n)*((x^((2*n)+1))/(factorial((2*n)+1)));
end
Вторая функция:
function ret = partialsum(x,n,log)
%% Begin code
% j=n
% 1 to n+1
% LS 0 to n
% SL n to 0
%((-1)^n)*((x^((2*n)+1))/(factorial((2*n)+1)))
clear sum
ret = 0;
if log == 1
for i=0:1:n
ret= ret + hw1_6_1(x,i) ;
i=i+1;
end
elseif log == 0
for i=n:-1:0
ret= ret + hw1_6_1(x,i) ;
i=i+1;
end
end
end
Наконец, мой основной код:
%% Hw 1 Problem 6
% Running approximation of sin x
% LS and SL
% LS == log=1, SL == log=0
% x = 0.1, 1, 10
% n = 10,100,1000
clear all
clc
format long %displays more decimal points
%% For x = 0.1
sin1 = sin(0.1);
% LS
% n = 10, 100, 1000 Generated in array format
LS1 = [partialsum(0.1,10,1);partialsum(0.1,100,1);partialsum(0.1,1000,1)];
% Now SL
SL1 = [partialsum(0.1,10,0);partialsum(0.1,100,0);partialsum(0.1,1000,0)];
%% For x = 1
sin2 = sin(1);
% LS
% n = 10, 100, 1000 Generated in array format
LS2 = [partialsum(1,10,1);partialsum(1,100,1);partialsum(1,1000,1)];
% Now SL
SL2 = [partialsum(1,10,0);partialsum(1,100,0);partialsum(1,1000,0)];
%% For x = 10
sin3 = sin(10);
% LS
% n = 10, 100, 1000 Generated in array format
LS3 = [partialsum(10,10,1);partialsum(10,100,1);partialsum(10,1000,1)];
% Now SL
SL3 = [partialsum(10,10,0);partialsum(10,100,0);partialsum(10,1000,0)];
%% Comparison stage
Sines = [sin1;sin2;sin3]
Approxs = [LS1 SL1 LS2 SL2 LS3 SL3]'
Мой выход :
Sines =
0.099833416646828
0.841470984807897
-0.544021110889370
Approxs =
0.099833416646828 0.099833416646828 0.099833416646828
0.099833416646828 0.099833416646828 0.099833416646828
0.841470984807897 0.841470984807897 0.841470984807897
0.841470984807897 0.841470984807897 0.841470984807897
2.761090925979680 -0.544021110889270 NaN
2.761090925979687 -0.544021110889190 NaN
Заранее спасибо.
(k) * 10^1000/1000! = Inf/Inf = NaN –
Что относительно 2.761090925979680 -0.544021110889270? – Anonymous
2.76 состоит в том, что полином 10-й степени расходится с синусом в гораздо более ранней точке - попробуйте построить sin (0: 0,01: 10) по сравнению с LS (10,10,0: 0,01: 10); (Может потребоваться векторизация). –