您應該能夠在better_cos
運營商中使用add
而不是sum
獲得您想要的。
使用add
通常更合適於累加有限數量的數字序列項,並且還要注意add
具有Maple的所謂的特殊評估規則。
如果您打算獲取固定數量的術語(即n從0到20)的總和,那麼您不應該編寫計算每個輸入參數的階乘的過程(即每個值爲x
) 。相反,只產生一次截斷的系列,然後使用unapply
來生成一個運算符。這種方法也適用於處理原始問題,因爲使用了符號x
,因此x^0項變爲1
。
您也可以重新排列多項式(截斷序列)以使其處於Horner形式,以便在隨後評估x的各種數值時嘗試並最小化算術步驟。
例如,使用5項爲簡潔,而不是20,你有它,
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
哦,這是錯誤的。 0^0應該是未定義的。 – duffymo
他們在學校教會了我,但維基百科說了別的:http://en.wikipedia。org/wiki/Exponentiation#Zero_to_the_power_of_zero;) – tch