Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB代码最后出现了小故障_Matlab - Fatal编程技术网

MATLAB代码最后出现了小故障

MATLAB代码最后出现了小故障,matlab,Matlab,我是新来的。 场景描述: 我已经编写了MATLAB代码来使用部分和sn(x)=从j=0到n的和(-1)^j*x^(2j+1)/(2j+1)!近似sinx。我已经编写了一个计算机程序,用各种方法计算这个部分和 LS:计算并求和从最大项fi rst到最后最小项的项 及 SL:按相反的顺序进行计算 我用我的程序用LS和SL两种方法计算了x=0.1、1和10的S_n(x),并将结果与sin x进行了比较。我使用了n=10、100和1000 问题:我在代码的最后两行遇到了问题。它表示“NaN”(不是一

我是新来的。

场景描述:

我已经编写了MATLAB代码来使用部分和sn(x)=从j=0到n的和(-1)^j*x^(2j+1)/(2j+1)!近似sinx。我已经编写了一个计算机程序,用各种方法计算这个部分和

LS:计算并求和从最大项fi rst到最后最小项的项

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
第二个功能:

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)sin_taylor(10)=2.76是因为20次多项式近似值与正弦值的偏差要小得多


2) 序列x^n/n!对于| x |>1,它不是单调的,但在n=6左右有一个最大值;因此,与| x |(k)*10^1000/1000!=Inf/Inf=nan那么2.761090925979680-0.54402110889270呢?2.76是因为10次多项式在更早的点从正弦发散——试着绘制sin(0:0.01:10)和LS(10,10,0:0.01:10);(可能需要矢量化)。只是一个注释:尽量避免使用
log
作为变量名,因为它实际上是@Anonymous的名称-同样,它也是最好的。