반복적 인 유리수 시퀀스를 생성하는 더 빠르고 우아한 방법 [닫기]

Nov 24 2020

아래에서 재귀를 공부하고 있습니다.

$$B_{N,0}=1$$

$$B_{N,k}=-\binom{N+k}{k}^{-1}\sum_{j=0}^{k-1}\binom{N+k}{j}B_{N,j}$$

이제 저는 Mathematica로 글을 쓰는 데 능숙하지 않습니다. 내가 사용한 지 오래되었습니다. 그래서 저는 오래된 작업을 찾아 Mathematica에서이 방법을 발견했습니다. 그것은 코드의 "메모리"속성이거나 그것이 나에게 설명 된 것을 기억하는 방법입니다. 그래서 나는 그것을하고 아래 코드를 작성했습니다.

 B[0]=1

 B[k]=B[k_]:=Simplify[-1/(Binomial[N+k,k])*Sum[Binomial[N+k,j]*B[j]],{j,0,k-1}]

그리고 작동합니다! 대단하지 않습니다. 그래서 저는 처음 4 개 또는 5 개를 꽤 멋지게 얻습니다. 변수의 합리적 함수입니다.$N$. 그래서 처음 5 개는 아래에 게시됩니다 (Imgur를 사용했습니다, 죄송합니다)

그러나 코드가 깨집니다. 필요한 계산이 커짐에 따라 재귀가 너무 어려워 질 것이라고 확신합니다. 다음 두 숫자는 다음과 같이 주어집니다 (다시, 이미지 죄송합니다)

그리고 여기에 질문이 있습니다. 어떻게하면 6 번째 B [6], 7 번째 B [7], ..., k 번째 숫자 B [k]가 어설픈 이항식없이 이전 5에서와 같이 우아한 인수 형식으로 작성되거나 출력됩니다. 분모의 기능? 나는 분모의 분해 분포에 관심이 있습니다.

답변

10 N0va Nov 24 2020 at 10:08
ClearAll[B];    
B[k_]:=B[k]=Simplify[FunctionExpand[-1/(Binomial[n+k,k])*Sum[Binomial[n+k,j]*B[j],{j,0,k-1}]]]

나를 위해 잘 작동합니다.

Table[{"B[" <> ToString[k] <> "]=", B[k]}, {k, 0, 7}] // TableForm

ClearAll[B]값은에 의해 캐시되므로 정의를 변경할 때 확인하십시오 B[k]:=B[k]. 계산 B[k]하는 k=7데 0.02 초가 걸렸고 최대 k=4210.7 초가 걸렸 습니다 . 그것은 나에게 합리적인 것 같습니다.

6 yawnoc Nov 24 2020 at 20:54

OP의 정의와 N0va의 차이점을 지적하십시오.

잘못된 버전

B[k] = B[k_] := <RHS>

왼쪽에서 오른쪽으로 읽으면 첫 번째 할당은 단일 같음 (Set)이고 두 번째 할당은 콜론 같음 (SetDelayed)입니다. GUI에서 k파란색으로 표시됩니다 (무료라고 가정). 의사 코드에서 :

  1. Mathematica는 먼저을보고 B[k] = <expression1>" 즉시<expression1> 결과를에 할당하고 평가 하겠습니다."라고 말합니다 B[k].
  2. 매스 매 티카는보고 <expression1>B[k_] := <RHS>, 그리고 말한다 "나는 지금 정의 할 B[k_]<RHS>,하지만 난 것이다 지연 의 평가 <RHS>내가의 실제 값을받을 때까지를 k."

두 번째 단계가 반환 Null되고 바로이 단계에 Null할당됩니다 B[k]. 실제로 이것은하는 것과 동일합니다.

B[k_] := <RHS>
B[k] = Null

즉, 즉시 (그러나 쓸모없는) 할당이 뒤 따르는 기억되지 않은 정의.

올바른 버전

B[k_] := B[k] = <RHS>

왼쪽에서 오른쪽으로 읽으면 첫 번째 할당은 콜론 같음 (SetDelayed)이고 두 번째 할당은 단일 같음 (Set)입니다. 의사 코드에서 :

  1. Mathematica는 먼저를보고 B[k_] := <expression2>"이제를로 정의 B[k_]<expression2>것이지만 <expression2>실제 값을받을 때까지 의 평가를 연기 할 것 입니다 k."라고 말합니다.

좋습니다. 실제 값을 받으면 어떻게됩니까 k?

  1. 매스 매 티카는 평가 <expression2>B[k] = <RHS>및 말한다, "나는 지금 즉시 평가합니다 <RHS> 에 결과를 할당합니다 B[k]." 암기를 달성하는 것은이 두 번째 과제입니다.