MATLAB代码故障最后

时间:2013-09-30 04:28:00

标签: matlab

我是新来的。

方案说明:

我编写了MATLAB代码,使用部分和S_n(x)=从j = 0到n的和(-1)^ j * x ^(2j + 1)/(2j + 1)!接近罪x。我编写了一个计算机程序来通过方法

来评估这个部分和

LS:计算和总结最后一个词到最后一个词最后一个词

SL:按相反顺序进行计算。

我使用我的程序通过方法LS和SL计算x = 0.1,1和10的S_n(x),并将结果与​​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

提前致谢。

1 个答案:

答案 0 :(得分:2)

1)sin_taylor(10)== 2.76是因为20度多项式近似与 x 的小得多的正弦偏离。

2)序列x ^ n / n!对于| x |&gt; 1,不是单调的,但在n = 6时具有最大值;因此,与情况相比,将存在一些舍入差异,其中| x | <= 1且一个正在总结快速消失的序列。

3)当 n 很大时,分母和分母(10 ^ n,n!)都将表示为无穷大。 Inf / Inf 定义为 NaN NaN +任何东西== NaN 。 这与partial_sum(10,100)不同,其中一个总结了术语(x / inf == 0)。