Güç Serisi Katsayılarını Hesapla


24

p(x)İntegral katsayıları ve sabit bir terim p(0) = 1 or -1ve negatif olmayan bir tamsayı içeren bir polinom verildiğinde , yani monomialin katsayısında geliştirilen güç serisinin (bazen "Taylor serisi" olarak adlandırılır) katsayısını Ndöndürür .Nf(x) = 1/p(x)x0 = 0N

Verilen koşullar, güç serilerinin varlığını ve katsayılarının tamsayılar olmasını sağlar.

ayrıntılar

Her zaman olduğu gibi polinom herhangi bir uygun formatta kabul edilebilir, örneğin bir katsayı listesi, örneğin p(x) = x^3-2x+5olarak temsil edilebilir [1,0,-2,5].

Tarafından fgeliştirilen bir işlevin güçleri0

ve- Nkatsayısı (katsayısı x^N)

burada temsil eder nve inci türevinif

Örnekler

  • Polinom p(x) = 1-xgeometrik serilerle sonuçlanır, bu f(x) = 1 + x + x^2 + ...nedenle çıktı herkes 1için olmalıdır N.

  • p(x) = (1-x)^2 = x^2 - 2x + 1geometrik dizi türevi ile sonuçlanır f(x) = 1 + 2x + 3x^2 + 4x^3 + ..., çıkış böylece Nolup N+1.

  • p(x) = 1 - x - x^2 Fibonacci dizisinin üretme işlevi ile sonuçlanır f(x) = 1 + x + 2x^2 + 3x^3 + 5x^4 + 8x^5 + 13x^6 + ...

  • p(x) = 1 - x^21,0,1,0,...yani , üreteç işlevi ile sonuçlanırf(x) = 1 + x^2 + x^4 + x^6 + ...

  • p(x) = (1 - x)^3 = 1 -3x + 3x^2 - x^33. katsayının binom katsayısı f(x) = 1 + 3x + 6x^6 + 10x^3 + 15x^4 + 21x^5 + ...olduğu anlamına gelen üçgen sayıların üretme işleviN(N+2, N)

  • p(x) = (x - 3)^2 + (x - 2)^3 = 1 + 6x - 5x^2 + x^3 sonuçlanır f(x) = 1 - 6x + 41x^2 - 277x^3 + 1873x4 - 12664x^5 + 85626x^6 - 57849x^7 + ...


Bir polinomun sınırsız güç serisi katsayıları listesi olarak kabul edilmesi uygun olur [1,-1,0,0,0,0,...]mu?
xnor

Evet, bunun kabul edilebilir bir format olduğunu düşünüyorum.
kusur

Güzel örnekler seçildi!
Greg Martin

Yanıtlar:


9

Mathematica, 24 23 bayt

Greg Martin sayesinde 1 bayt kaydedildi

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

İki değişkenli saf fonksiyon #ve #2. Polinomun #2tatmin ettiğini varsayar PolynomialQ[#2,x]. Elbette bunun için bir yerleşik var:

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

1
Yerleşik atma aferin! Sanırım #tamsayı Nve #2polinom olduğunu varsayarak bir bayt kurtarabilirsin .
Greg Martin

6

Matlab, 81 79 75 bayt

Önceki iki cevabın aksine, bu sembolik hesaplamaları kullanmaz. Buradaki fikir, katsayıları yinelemeli olarak hesaplayabilmenizdir:

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)

Çevrimiçi deneyin!

açıklama

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

GeoGebra , 28 bayt

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

Giriş, sırasıyla bir polinom ve bir tamsayının elektronik tablo hücrelerinden Al ve B1 'den alınır ve her satır ayrı olarak giriş çubuğuna girilir. Çıktı değişkene atama yoluyla yapılır a.

İşte yürütmeyi gösteren bir gif:

Taylor katsayıları

Yerleşiklerin kullanılması, 48 baytta çok daha uzun:

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

4

Haskell, 44 bayt

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

Cebirsel yerleşik olmayan doğrudan bir hesaplama. Girdiyi p = [1,-2,3,0,0,0,0...](yani p = [1,-2,3] ++ repeat 0) için olduğu gibi sonsuz güç serisi katsayıları listesi olarak alır 1-2*x+x^2. Verdiğin gibi p%3söyle -4.0.

Fikir, eğer p bir polinom ise ve q = 1 / p ters ise, o zaman p · q = 1 terimini eşitlikle ifade edebiliriz . Katsayısı x n olarak p q · katsayıların kıvrım verilir p ve q :

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

İçin p · q = 1 , yukarıda olması için tüm için sıfıra eşit tutmak için n> 0 . Burada, q n 'yi tekrarlı bir şekilde q 0 , ..., q n-1 ve p katsayıları cinsinden ifade edebiliriz .

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

Bu, ifadede hesaplanan tam olarak sum[p!!i*p%(n-i)|i<-[1..n]]/head p, başlangıç head pkatsayısı p 0'dır . Başlangıç ​​katsayısı q 0 = 1 / p 0 , 0^nbir gösterge olarak aynı ifadede aritmetik olarak tutulur n==0.


3

J, 12 bayt

1 :'(1%u)t.'

Kullanımları zarf t.bir polinomu alır pLHS'nin ve negatif olmayan tamsayı üzerinde bir fiil şeklinde krhs ve hesaplar kinci Taylor serisi katsayısı pen x = 0. Güç serisini elde etmek için, puygulanmadan önce muhabiri alınır.

Çevrimiçi deneyin!


2

Akçaağaç, 58 26 bayt

Bu bir polinomu xve bir tamsayıyı kabul eden adsız bir fonksiyondur N.

EDIT: Sadece bir yerleşik olduğunu fark ettim:

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

1

MATL , 19 bayt

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

Çevrilmesi @ flawr harika Matlab cevap .

Çevrimiçi deneyin!

Nasıl çalışır

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

JavaScript (ES6), 57 bayt

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

@ Xnor'ın Haskell cevabının limanı. Orijinal olarak yinelemeli bir sürüm denedim ancak 98 byte olduğu ortaya çıktı, ancak yinelemeli aramaları etkili bir şekilde hatırladığım için büyük N için çok daha hızlı olacak:

(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+1diziye kaydedilen terimler gerekir r. Sıfırlar rsonucu etkilemeyeceğinden başlangıçta tüm dizinin bir seferde küçülmesini sağlayan sıfırlardır. Son hesaplanan katsayı nihai sonuçtur.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.