0

余弦関数を Maple Taylor 級数で書きたいと思います。これが私のコードです:

better_cos := proc (x) options operator, arrow; sum((-1)^n*x^(2*n)/factorial(2*n), n = 0 .. 20) end proc;

better_cos(0) は、1 ではなく 0 を返します (cos(0) == 1)。おそらく、x^(2*n) が 1 ではなく常に 0 を返すためです。たとえば、次のようになります。

fun_sum := proc (x) options operator, arrow; sum(x^(2*n), n = 0 .. 0) end proc

x == 1 の場合は 0 を返します。

0^0 が 1 を返すので、それは奇妙です。cosinus のテイラー級数を正しく実装する方法を知っていますか?

4

2 に答える 2

5

演算子addの代わりにsum使用することで、必要なものを取得できるはずです。better_cos

add数列の有限数の項を合計するには、 を使用する方が適切な場合が多く、 にaddは Maple のいわゆる特別な評価規則があることにも注意してください。

一定数の項 (つまり、0 から 20 までの n) の合計を取るつもりなら、各入力引数 (つまり、 の各値x) の階乗を計算する手続きを書くべきではありません。代わりに、切り捨てられた系列を 1 回だけunapply生成してから、演算子を生成するために使用します。1このアプローチは、シンボルxが使用されているためx^0 項になるため、元の問題にも対処できます。

また、多項式 (切り捨てられた級数) をホーナー形式になるように再配置して、後で x のさまざまな数値で評価するときに算術ステップを最小限に抑えようとすることもできます。

たとえば、簡潔にするために 20 語ではなく 5 語を使用すると、

convert(add((-1)^n*x^(2*n)/factorial(2*n), n = 0 .. 5),horner);

     /  1   /1    /   1    /  1        1     2\  2\  2\  2\  2
 1 + |- - + |-- + |- --- + |----- - ------- x | x | x | x | x 
     \  2   \24   \  720   \40320   3628800   /   /   /   /   

bc := unapply(%,x):

bcシンボリック引数または数値引数のいずれかを使用して、必要に応じてプロシージャを適用できるようになりました。

expand(bc(x));

       1  2   1   4    1   6     1    8      1     10
   1 - - x  + -- x  - --- x  + ----- x  - ------- x  
       2      24      720      40320      3628800    

bc(0);
                           1

bc(1.2);
                      0.3623577360

項の数が可変になるようにプロシージャbetter_cosに引数のペアを使用させたい場合でもadd、元の問題を処理するために を使用することを検討できます。例えば、

bc := (x,N)->add((-1)^n*x^(2*n)/(2*n)!, n = 0 .. N):

これは宿題であり、既存のシステム コマンドを使用しtaylorたりseries、同じ結果を得ることができることを認識していると思います。

convert(series(cos(x),x=0,10),polynom);

              1  2   1   4    1   6     1    8
          1 - - x  + -- x  - --- x  + ----- x 
              2      24      720      40320   

convert(taylor(cos(x),x=0,10),polynom);

              1  2   1   4    1   6     1    8
          1 - - x  + -- x  - --- x  + ----- x 
              2      24      720      40320   
于 2013-10-28T04:27:58.950 に答える
2

テイラー級数の定義は次のとおりです。

ここに画像の説明を入力

ゼロからループを開始しないでください。1 で初期化し、2 で開始します。

階乗も非効率的です。

于 2013-10-27T23:31:12.667 に答える