2013-10-27 1 views
0

cosinus 함수에 대해 Maple Taylor 시리즈로 쓰고 싶습니다. 내 코드는 다음과 같습니다.Taylor series for cosinus 0에 대한 잘못된 결과를 반환합니다.

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 (cos (0) == 1) 대신 0을 반환합니다. 0^0 반환 1.를 수행하기 때문에 1

그것은 이상한 X의 ==에 대한

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

반환 0 :이 X^(2 * n은) 예를 들어 1 대신으로 항상 0을 반환하기 때문에 아마 내가 어떻게 코사인을위한 테일러 시리즈를 올바르게 구현할 수 있을지 생각해 보라.

+0

오, 너무 잘못되었습니다. 0^0은 정의되지 않아야합니다. – duffymo

+0

그들은 학교에서 똑같이 가르쳐 줬지만 위키피디아는 다른 말을하고 있습니다 : http : //en.wikipedia.org/wiki/Exponentiation # Zero_to_the_power_of_zero;) Horner의 경우 – tch

답변

5

better_cos 연산자에서 sum 대신 add을 사용하여 원하는 것을 얻을 수 있어야합니다.

add을 사용하면 숫자 시퀀스의 한정된 수의 조건을 더 합하고, add에는 Maple의 소위 특별 평가 규칙이 있음을 알 수 있습니다.

고정 된 수의 합계 (즉, n은 0에서 20까지)를 얻으려는 경우 각 입력 인수 (즉, 각 값 x)에 대한 계승 값을 계산하는 절차를 작성하면 안됩니다. . 대신 절단 된 계열을 한 번만 생성 한 다음 unapply을 사용하여 연산자를 생성하십시오. 이 접근법은 원래의 문제를 다루기도합니다. 왜냐하면 x 심볼이 사용되기 때문에 x^0 용어는 1이되기 때문입니다.

다항식 (잘린 시리즈)을 Horner 형식으로 재 배열하여 이후 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 

당신이 용어의 수가 변수 수 있도록, 당신은 여전히 ​​원래의 문제를 해결하기 위해 add를 사용하여 고려할 수, 인수 한 쌍을 better_cos 프로 시저를 선호하는 경우

. 예를 들어,

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

+1입니다. – duffymo

2

다음은 테일러 급수의 정의입니다 :

enter image description here

이 0으로 루프를 시작하지 마십시오; 1로 초기화하고 2에서 시작하십시오.

요인도 비효율적입니다.

관련 문제