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^0은 정의되지 않아야합니다. – duffymo
그들은 학교에서 똑같이 가르쳐 줬지만 위키피디아는 다른 말을하고 있습니다 : http : //en.wikipedia.org/wiki/Exponentiation # Zero_to_the_power_of_zero;) Horner의 경우 – tch