전력 계열 계수 계산


24

다항식을 감안할 때 p(x)통합 계수와의 일정한 기간 p(0) = 1 or -1및 음수가 아닌 정수 N반환 N의 (때로는 "테일러 시리즈"라고 함) 전원 seris의 번째 계수 f(x) = 1/p(x)에서 개발 x0 = 0, 즉, 정도의 단항식의 계수 N.

주어진 조건은 전력 계열이 존재하고 계수가 정수임을 보장합니다.

세부

다항식은 항상 편리한 형식, 예를 들어 계수 목록으로 받아 들여질 p(x) = x^3-2x+5수 있습니다 [1,0,-2,5].

함수의 powerseries은 f에서 개발 0주어진다

그리고- N번째 계수 (의 계수 x^N)는

여기서 -의 미분을 나타냅니다.nf

  • 다항식 p(x) = 1-x은 기하 급수의 결과 f(x) = 1 + x + x^2 + ...이므로 1모든 결과가 출력되어야 합니다 N.

  • p(x) = (1-x)^2 = x^2 - 2x + 1기하 계열의 미분 결과를 나타내 f(x) = 1 + 2x + 3x^2 + 4x^3 + ...므로에 대한 출력은 N입니다 N+1.

  • p(x) = 1 - x - x^2 피보나치 시퀀스의 생성 기능 f(x) = 1 + x + 2x^2 + 3x^3 + 5x^4 + 8x^5 + 13x^6 + ...

  • p(x) = 1 - x^21,0,1,0,...즉 , 생성 기능의 결과f(x) = 1 + x^2 + x^4 + x^6 + ...

  • p(x) = (1 - x)^3 = 1 -3x + 3x^2 - x^3-이 계수가 이항 계수 f(x) = 1 + 3x + 6x^6 + 10x^3 + 15x^4 + 21x^5 + ...임을 의미하는 삼각형 숫자의 생성 함수를 생성합니다.N(N+2, N)

  • p(x) = (x - 3)^2 + (x - 2)^3 = 1 + 6x - 5x^2 + x^3 결과 f(x) = 1 - 6x + 41x^2 - 277x^3 + 1873x4 - 12664x^5 + 85626x^6 - 57849x^7 + ...


다항식을 무한대와 같은 거듭 제곱 계수의 목록으로 취하는 것이 허용 [1,-1,0,0,0,0,...]됩니까?
xnor

예, 이것이 허용되는 형식이라고 생각합니다.
flawr

좋은 예가 선택되었습니다!
Greg Martin

감사합니다. 감사합니다. =)
flawr

답변:


9

매스 매 티카, 24 23 바이트

Greg Martin 덕분에 1 바이트 절약

D[1/#2,{x,#}]/#!/.x->0&

두 개의 인수가있는 순수 함수 ##2. 다항식이 #2만족 한다고 가정합니다 PolynomialQ[#2,x]. 물론 이것에 대한 내장 기능이 있습니다 :

SeriesCoefficient[1/#2,{x,0,#}]&

1
내장을 두들겨 맞았습니다! #정수 N이고 #2다항식 이라고 가정하여 바이트를 절약 할 수 있다고 생각합니다 .
Greg Martin

6

Matlab, 81 79 75 바이트

앞의 두 답변과 달리 이것은 기호 계산을 사용하지 않습니다. 아이디어는 반복적으로 계수를 계산할 수 있다는 것입니다.

function C=f(p,N);s=p(end);for k=1:N;q=conv(p,s);s=[-q(end-k),s];end;C=s(1)

온라인으로 사용해보십시오!

설명

function C=f(p,N);
s=p(end);            % get the first (constant coefficient)
for k=1:N;           
    q=conv(p,s);     % multiply the known coefficients with the polynomial
    s=[-q(end-k),s]; % determine the new coefficient to make the the product get "closer" 
end;
C=s(1)           % output the N-th coefficient

4

지오 지브라 , 28 바이트

Derivative[1/A1,B1]/B1!
f(0)

입력은 다항식과 정수의 스프레드 시트 셀 A1과 B1에서 각각 취해지며 각 줄은 입력 막대에 개별적으로 입력됩니다. 변수에 대한 할당을 통해 출력됩니다 a.

다음은 실행을 보여주는 gif입니다.

테일러 계수

내장을 사용하면 48 바이트에서 훨씬 길어집니다.

First[Coefficients[TaylorPolynomial[1/A1,0,B1]]]

4

하스켈, 44 바이트

p%n=(0^n-sum[p!!i*p%(n-i)|i<-[1..n]])/head p

대수 내장없이 직접 계산. 에 대한 p = [1,-2,3,0,0,0,0...](예 :)와 같은 무한대 전력 계열 계수 목록으로 입력 p = [1,-2,3] ++ repeat 01-2*x+x^2받습니다. 처럼 호출 p%3합니다 -4.0.

p 가 다항식이고 q = 1 / p 가 역 이라면 아이디어는 항등 p · q = 1을 기간별로 표현할 수 있습니다 . 계수 X의 NP는 Q는 * 의 계수의 컨볼 루션에 의해 부여되는 PQ :

p 0 · q n + p 1 · q n-1 + ... + p n · q 0

들면 P · Q = 1 위 반드시 모두에 대해 0과 동일, 잡아 N> 0 . 여기서 우리는 q 0 , ..., q n-1p 계수로 q n을 재귀 적으로 표현할 수 있습니다 .

q n =-1 / p 0 · (p 1 · q n-1 + ... + p n · q 0 )

이 표현에서 계산 있는지 정확히 sum[p!!i*p%(n-i)|i<-[1..n]]/head p으로, head p선두 계수 P 0 . 초기 계수 q 0 = 1 / p 0 는에 0^n대한 지표로 동일한 식으로 산술적으로 처리 됩니다 n==0.


3

J, 12 바이트

1 :'(1%u)t.'

사용 부사 t.다항식 소요 p좌변과 음이 아닌 정수에 대한 동사의 형태 k우변에 상기 계산 k번째 의 테일러 급수의 계수 p에서를 x = 0. 파워 시리즈를 얻기 위해 p그것을 적용하기 전에 의 역수를 취합니다.

온라인으로 사용해보십시오!


2

메이플, 58 26 바이트

이 함수는 다항식 x과 정수 를 허용하는 명명되지 않은 함수입니다 N.

편집 : 방금 내장이 있음을 알았습니다.

(p,N)->coeftayl(1/p,x=0,N)

1

MATL , 19 바이트

0)i:"1GY+@_)_8Mh]1)

@flawr의 위대한 Matlab 답변 번역 .

온라인으로 사용해보십시오!

작동 원리

0)      % Implicitly input vector of polynomial coefficients and get last entry
i       % Input N
:"      % For k in [1 2 ... N]
  1G    %   Push vector of polynomial coefficients
  Y+    %   Convolution, full size
  @     %   Push k
  _     %   Negate
  )     %   Index. This produces the end-k coefficient
  _     %   Negate
  8M    %   Push first input of the latest convolution
  h     %   Concatenate horizontally
]       % End
1)      % Get first entry. Implicitly display

1

자바 스크립트 (ES6), 57 바이트

(a,n)=>a.reduce((s,p,i)=>!i|i>n?s:s-p*f(a,n-i),!n)/a[0]

@xnor의 Haskell 포트 답변. 원래 반복 버전을 시도했지만 98 바이트로 판명되었지만 재귀 호출을 효과적으로 기억하기 때문에 큰 N의 경우 훨씬 빠릅니다.

(a,n)=>[...Array(n+1)].fill(0).map((_,i,r)=>r[i]=r.reduce((s,p,j)=>s-p*(a[i-j]||0),!i)/a[0]).pop()

n+1배열에 저장된 용어가 필요합니다 r. r0은 결과에 영향을 미치지 않으므로 처음에는 전체 배열 을 한 번에 줄일 수 있는 0입니다. 마지막으로 계산 된 계수가 최종 결과입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.