Tính hệ số dòng điện


24

Cho một đa thức p(x)với các hệ số tích phân và một số hạng không đổi p(0) = 1 or -1và một số nguyên không âm N, trả về Nhệ số thứ cấp của seris công suất (đôi khi được gọi là "chuỗi Taylor") f(x) = 1/p(x)được phát triển tại x0 = 0, tức là hệ số của đơn thức độ N.

Các điều kiện đã cho đảm bảo rằng chuỗi lũy thừa tồn tại và các hệ số của nó là các số nguyên.

Chi tiết

Như mọi khi đa thức có thể được chấp nhận ở bất kỳ định dạng thuận tiện nào, ví dụ như một danh sách các hệ số, ví dụ p(x) = x^3-2x+5có thể được biểu diễn dưới dạng [1,0,-2,5].

Các quyền hạn của một chức năng fđược phát triển tại 0được đưa ra bởi

Nhệ số -th (hệ số x^N) được cho bởi

trong đó biểu thị nđạo hàm -th củaf

Ví dụ

  • Các p(x) = 1-xkết quả đa thức trong chuỗi hình học f(x) = 1 + x + x^2 + ...vì vậy đầu ra phải 1dành cho tất cả N.

  • p(x) = (1-x)^2 = x^2 - 2x + 1kết quả trong đạo hàm của chuỗi hình học f(x) = 1 + 2x + 3x^2 + 4x^3 + ..., vì vậy đầu ra cho NN+1.

  • p(x) = 1 - x - x^2 dẫn đến chức năng tạo ra chuỗi Fibonacci f(x) = 1 + x + 2x^2 + 3x^3 + 5x^4 + 8x^5 + 13x^6 + ...

  • p(x) = 1 - x^2kết quả trong hàm tạo của 1,0,1,0,...ví dụf(x) = 1 + x^2 + x^4 + x^6 + ...

  • p(x) = (1 - x)^3 = 1 -3x + 3x^2 - x^3dẫn đến hàm tạo ra các số tam giác f(x) = 1 + 3x + 6x^6 + 10x^3 + 15x^4 + 21x^5 + ...có nghĩa là Nhệ số -th là hệ số nhị thức(N+2, N)

  • p(x) = (x - 3)^2 + (x - 2)^3 = 1 + 6x - 5x^2 + x^3 kết quả trong f(x) = 1 - 6x + 41x^2 - 277x^3 + 1873x4 - 12664x^5 + 85626x^6 - 57849x^7 + ...


Có thể chấp nhận lấy một đa thức làm một danh sách vô hạn các hệ số chuỗi lũy thừa như thế [1,-1,0,0,0,0,...]nào không?
xnor

Vâng, tôi nghĩ rằng đây là một định dạng chấp nhận được.
flawr

Ví dụ đẹp được chọn!
Greg Martin

Tôi rất vui vì bạn đánh giá cao nó, cảm ơn bạn =)
flawr

Câu trả lời:


9

Toán học, 24 23 byte

Đã lưu 1 byte nhờ Greg Martin

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

Hàm thuần túy với hai đối số ##2. Giả sử đa thức #2thỏa mãn PolynomialQ[#2,x]. Tất nhiên có tích hợp sẵn cho việc này:

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

1
Hoàn thành tốt việc đánh bại tích hợp! Tôi đoán bạn có thể lưu một byte bằng cách giả sử đó #là số nguyên N#2là đa thức.
Greg Martin

6

Matlab, 81 79 75 byte

Không giống như hai câu trả lời trước, điều này không sử dụng các phép tính tượng trưng. Ý tưởng là bạn có thể tính toán các hệ số:

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)

Hãy thử trực tuyến!

Giải trình

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 byte

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

Đầu vào được lấy từ các ô bảng tính A1 và B1 của một đa thức và một số nguyên tương ứng, và mỗi dòng được nhập riêng vào thanh đầu vào. Đầu ra là thông qua gán cho biến a.

Đây là một gif hiển thị việc thực thi:

Hệ số Taylor

Sử dụng nội dung dài hơn nhiều, ở mức 48 byte:

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

4

Haskell, 44 byte

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

Một tính toán trực tiếp không có tích hợp đại số. Đưa đầu vào thành một danh sách vô hạn các hệ số chuỗi lũy thừa, như p = [1,-2,3,0,0,0,0...](tức là p = [1,-2,3] ++ repeat 0) cho 1-2*x+x^2. Gọi nó như thế p%3, mà cho -4.0.

Ý tưởng là nếu p là một đa thức và q = 1 / p là nghịch đảo, thì chúng ta có thể biểu thị đẳng thức p · q = 1 kỳ hạn. Hệ số của x n trong p · q được cho bởi tích chập của các hệ số tính theo pq :

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

Để p · q = 1 giữ, giá trị trên phải bằng 0 với mọi n> 0 . Ở đây, chúng ta có thể biểu diễn q n đệ quy theo q 0 , ..., q n-1 và các hệ số của p .

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

Đây chính xác là những gì được tính toán trong biểu thức sum[p!!i*p%(n-i)|i<-[1..n]]/head p, với head phệ số hàng đầu p 0 . Hệ số ban đầu q 0 = 1 / p 0 được xử lý một cách hợp lý trong cùng một biểu thức sử dụng 0^nlàm chỉ báo cho n==0.


3

J, 12 byte

1 :'(1%u)t.'

Sử dụng trạng từ t.lấy đa thức pdưới dạng động từ trên LHS và số nguyên không âm ktrên RHS và tính hệ số kthứ tự của chuỗi Taylor ptại x = 0. Để có được chuỗi lũy thừa, đối ứng pđược thực hiện trước khi áp dụng nó.

Hãy thử trực tuyến!


2

Maple, 58 26 byte

Đây là một hàm không tên, chấp nhận đa thức trong xvà một số nguyên N.

EDIT: Tôi chỉ nhận thấy rằng có một nội dung:

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

1

MATL , 19 byte

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

Bản dịch của câu trả lời Matlab tuyệt vời của @ flawr .

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 byte

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

Cổng câu trả lời Haskell của @ xnor. Ban đầu tôi đã thử một phiên bản lặp nhưng hóa ra là 98 byte, tuy nhiên nó sẽ nhanh hơn nhiều đối với N lớn, vì tôi đang ghi nhớ một cách hiệu quả các cuộc gọi đệ quy:

(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+1các điều khoản được yêu cầu, được lưu trong mảng r. Đó là các số 0 ban đầu cho phép giảm trên toàn bộ mảng rcùng một lúc, vì các số 0 sẽ không ảnh hưởng đến kết quả. Hệ số tính toán cuối cùng là kết quả cuối cùng.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.