คำนวณค่าสัมประสิทธิ์พาวเวอร์ซีรีส์


24

ได้รับพหุนามp(x)ที่มีสัมประสิทธิ์หนึ่งและระยะคงที่p(0) = 1 or -1และติดลบNกลับNค่าสัมประสิทธิ์ของ -th seris อำนาจ (บางครั้งเรียกว่า "ซีรีส์เทย์เลอร์") ของf(x) = 1/p(x)การพัฒนาที่x0 = 0คือค่าสัมประสิทธิ์ของ monomial Nปริญญาที่

เงื่อนไขที่กำหนดให้แน่ใจว่าชุดไฟมีอยู่และค่าสัมประสิทธิ์เป็นจำนวนเต็ม

รายละเอียด

และเช่นเคยพหุนามสามารถเป็นที่ยอมรับในรูปแบบที่สะดวกใด ๆ เช่นรายการของสัมประสิทธิ์ตัวอย่างเช่นอาจจะแสดงเป็นp(x) = x^3-2x+5[1,0,-2,5]

พลังของฟังก์ชั่นที่fพัฒนาที่0ได้รับจาก

และNค่าสัมประสิทธิ์ -th (ค่าสัมประสิทธิ์ของx^N) จะได้รับจาก

โดยที่ซึกnอนุพันธ์ของ -thf

ตัวอย่าง

  • พหุนามp(x) = 1-xผลในชุดเรขาคณิตf(x) = 1 + x + x^2 + ...เพื่อการส่งออกที่ควรจะเป็นสำหรับทุก1N

  • p(x) = (1-x)^2 = x^2 - 2x + 1ผลลัพธ์ในอนุพันธ์ของชุดเรขาคณิตf(x) = 1 + 2x + 3x^2 + 4x^3 + ...เพื่อการส่งออกสำหรับการมีNN+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^2ส่งผลให้ฟังก์ชั่นการสร้างของ1,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ค่าสัมประสิทธิ์ -th คือสัมประสิทธิ์ทวินาม(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

ใช่ฉันคิดว่านี่เป็นรูปแบบที่ยอมรับได้
ข้อบกพร่อง

เลือกตัวอย่างที่ดี!
Greg Martin

ฉันดีใจที่คุณขอบคุณมันขอบคุณ =)
ข้อผิดพลาด

คำตอบ:


9

Mathematica, 24 23 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ Greg Martin

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

GeoGebraขนาด 28 ไบต์

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

อินพุตถูกนำมาจากเซลล์สเปรดชีต A1 และ B1 ของพหุนามและจำนวนเต็มตามลำดับและแต่ละบรรทัดจะถูกป้อนแยกกันในแถบป้อนข้อมูล aการส่งออกผ่านทางมอบหมายให้ตัวแปร

นี่คือ gif แสดงการดำเนินการ:

ค่าสัมประสิทธิ์เทย์เลอร์

การใช้ builtins นั้นมีความยาวกว่ามากที่ 48 ไบต์

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

4

Haskell, 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 0) 1-2*x+x^2สำหรับ เรียกว่าชอบp%3-4.0ซึ่งจะช่วยให้

ความคิดคือถ้าpเป็นพหุนามและq = 1 / pมันคือการผกผันจากนั้นเราสามารถแสดงความเท่าเทียมกันp · q = 1คำต่อคำ สัมประสิทธิ์ของx nในp · qได้มาจากการสังสรรของสัมประสิทธิ์ในpและq :

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

สำหรับพี· q = 1จะถือต้องข้างต้นเท่ากับศูนย์ในทุกn> 0 สำหรับที่นี่เราสามารถแสดงQ nซ้ำในแง่ของQ 0 , ... , Q n-1และค่าสัมประสิทธิ์ของP

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ค่าสัมประสิทธิ์นำหน้า 0 เริ่มต้นค่าสัมประสิทธิ์Q 0 = 1 / p 0จะถูกจัดการในการแสดงออกของ arithmetically เดียวกันโดยใช้เป็นตัวบ่งชี้สำหรับ0^nn==0


3

J, 12 ไบต์

1 :'(1%u)t.'

การใช้คำวิเศษณ์t.ซึ่งจะใช้เวลาพหุนามpในรูปแบบของคำกริยาใน LHS และติดลบที่kบน RHS และคำนวณkTHค่าสัมประสิทธิ์ของซีรีส์เทย์เลอร์ที่p x = 0เพื่อให้ได้พลังงานแบบต่าง ๆpจะถูกนำมาใช้ก่อนที่จะใช้มัน

ลองออนไลน์!


2

เมเปิ้ล, 58 26 ไบต์

นี่คือฟังก์ชันที่ไม่มีชื่อที่ยอมรับพหุนามในxและจำนวนเต็มNและจำนวนเต็ม

แก้ไข: ฉันเพิ่งสังเกตเห็นว่ามี builtin:

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

1

MATL , 19 ไบต์

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

แปลของ@ flawr คำตอบของ

ลองออนไลน์!

มันทำงานอย่างไร

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 ไบต์

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

คำตอบพอร์ตของ @ xnor's 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+1rเงื่อนไขจะต้องซึ่งจะถูกบันทึกไว้ในอาร์เรย์ มันคือค่าเริ่มต้นที่เป็นศูนย์ซึ่งจะช่วยลดจำนวนอาร์เรย์ทั้งหมดrในครั้งเดียวเนื่องจากค่าศูนย์จะไม่ส่งผลต่อผลลัพธ์ สัมประสิทธิ์ที่คำนวณล่าสุดคือผลลัพธ์สุดท้าย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.