Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Fortran中exp(x)/sin(x)的泰勒级数展开_Fortran_Fortran90_Taylor Series - Fatal编程技术网

Fortran中exp(x)/sin(x)的泰勒级数展开

Fortran中exp(x)/sin(x)的泰勒级数展开,fortran,fortran90,taylor-series,Fortran,Fortran90,Taylor Series,我试图使用fortran为expx/sinx编写泰勒级数展开式,但当我测试我的实现时,发现它的数值很小,分别为n=3和X=1.0,并手动添加,结果与我的预期不符。我用手工计算了4.444..,用这个程序我找到了7.54113。请你检查一下我的密码,如果我有什么错误请告诉我 以下是wolframalpha中e^x/sinx的展开式: 我在Wolfram的扩展中没有看到任何复数项,所以我想知道为什么你认为你需要指数项中的复数。你不能用编程的方式得到1/x项。你需要一个x**-1.0术语 您的阶乘实现

我试图使用fortran为expx/sinx编写泰勒级数展开式,但当我测试我的实现时,发现它的数值很小,分别为n=3和X=1.0,并手动添加,结果与我的预期不符。我用手工计算了4.444..,用这个程序我找到了7.54113。请你检查一下我的密码,如果我有什么错误请告诉我

以下是wolframalpha中e^x/sinx的展开式:


我在Wolfram的扩展中没有看到任何复数项,所以我想知道为什么你认为你需要指数项中的复数。你不能用编程的方式得到1/x项。你需要一个x**-1.0术语

您的阶乘实现也相当幼稚


我建议您忘记循环和阶乘,从多项式、系数和霍纳的求值方法开始。让它工作起来,然后看看你是否能整理出这个循环。

Wolfram的文章有一个用q=e**ix表示的展开式,因此有一个复杂的术语。因此,总和应声明为复数

如前所述,阶乘函数过于简单。小心溢出

最好将您的过程放入一个模块中,并从主程序中使用该模块。使用尽可能多的编译器调试选项。例如,当使用适当的警告选项时,gfortran会警告sum的类型:warning:从COMPLEX4到REAL4的转换中可能发生的值更改。如果您使用的是gfortran,请尝试:-O2-fimplicit none-Wall-Wline truncation-Wcharacter truncation-Wsurprising-Waliasing-Wimplicit interface-Wunused参数-fwhole file-fcheck=all-std=f2008-pedantic-fbacktrace


由于您可以手动解决此问题,请尝试使用write语句输出每个步骤,并与手动计算进行比较。您可能很快就会看到计算的分歧。如果不清楚为什么计算不同,请将其分解成若干部分。

尝试在Excel或其他软件中编写泰勒项。。。然后用Fortran重写它。这不是一个真正的Fortran问题,而是一个理解如何将函数展开成展开式的问题。您是在尝试计算复杂或实值情况下的泰勒级数展开式吗?复杂::i=0.0,0.1 Oops?不是在我看到的关于x=0的级数展开式中。其他形式当然有。我从顶部往下看第九个方框。看起来海报使用了第十五个方框中的双倍和,序列表示,而不是级数展开中的和,大约为零。我没有走那么远;我在9号包厢停了下来。我来看看。
 PROGRAM Taylor
 IMPLICIT NONE


 INTEGER ::Count1,Count2,N=3
 REAL:: X=1.0,Sum=0.0
 COMPLEX ::i=(0.0,0.1)
 INTEGER:: FACT

  DO Count1=1,N,1
    DO Count2=0,N,1
       Sum=Sum+EXP(i*X*(-1+2*Count1))*(X**Count2)/FACT(Count2)
    END DO

 END DO

 PRINT*,Sum

 END PROGRAM Taylor  

 INTEGER FUNCTION FACT(n)
   IMPLICIT NONE
   INTEGER, INTENT(IN) :: n
   INTEGER :: i, Ans
   Ans = 1
   DO i = 1, n
     Ans = Ans * i
   END DO
   FACT = Ans
END FUNCTION FACT