2012-03-28 64 views
-1

私はfortranを使ってexp(x)/ sin(x)のテイラー級数展開を書こうとしましたが、 = 3、X = 1.0)、それらを手動で追加すると、結果は期待したものと一致しません。手で私は4.444 ..を計算し、プログラムで私は7.54113を見つけた。私のコードをチェックして、何かが間違っているかどうか教えてください。 http://www.wolframalpha.com/input/?i=e%5Ex%2Fsin%28x%29Fortranでのexp(x)/ sin(x)のテイラー級数の拡張

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 
+4

テーラー用語をExcelなどで記述してから、Fortranで書き直してみてください。これは実際にはFortranの問題ではありませんが、機能を拡張して拡張する方法を理解する上での問題です。 – Rook

+0

複雑なまたは実数の大文字小文字のテイラー級数展開を計算しようとしていますか? – talonmies

+0

'COMPLEX :: i =(0.0,0.1)'おっと? – steabert

答えて

2

Wolframの記事には、q = e **(ix)を使用して拡張式が記述されているため、複雑な用語があります。したがって、 "sum"は複合語として宣言する必要があります。

すでに述べたように、階乗関数は単純です。オーバーフローに注意してください。

プロシージャをモジュールに配置し、メインプログラムからそのモジュールを「使用する」ことをお勧めします。できるだけ多くのコンパイラデバッグオプションを使用してください。たとえば、適切な警告オプションが使用されている場合、gfortranは、「合計」のタイプについて警告します。「警告:COMPLEX(4)からREAL(4)への変換で値が変更される可能性があります。 gfortranを使用している場合は、次のように試してみてください:-O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused-parameter -fwhole-file -fcheck=all -std=f2008 -pedantic -fbacktrace

この問題は手作業で行うことができるので、各ステップをwriteステートメントで出力し、手計算と比較してみてください。あなたはおそらく、計算がどこに分かれるのかをすぐに知るでしょう。なぜ計算が異なるのか明確でない場合は、分割してください。

+0

私が見るx = 0についてのシリーズ展開ではありません。代わりのフォームは確かにそれを持っています。私は上から9番目のボックスを見ています。 – duffymo

+0

ポスターが「系列展開」の合計ではなく、15番目のボックス「二重表現」で二重合計を使用しているようです。 –

+0

私はそれほど遠かったわけではありません。私はボックス9で止まった。私は一見を与えるだろう。 – duffymo

3

私はヴォルフラムすることにより、その展開中の任意の複雑な条件が表示されていないので、私はなぜあなたを不思議に思うだろう。ここでは

がe^xを/罪のための拡張式(x)がwolframalphaでありますあなたは指数関数的な項で複素数が必要だと思います。そして、あなたはそれをプログラムした方法で1/xの言葉を得ることができません。あなたはどこかにx **( - 1.0)の言葉が必要です。

あなたの階乗実装はかなり単純です。

ループと階乗について忘れて、多項式と係数とHornerの評価方法から始めることをお勧めします。その作業をして、ループを整理できるかどうかを確認してください。

関連する問題