2013-06-01 59 views
7

Trong sage nó là khá dễ dàng để làm một khai triển Taylor của một người vô danh chức năng f (x),

x = var('x') 
h = var('h') 
f = function('f',x) 
g1 = taylor(f,x,h,2) 

Làm thế nào điều này có thể được thực hiện trong sympy?


Cập nhật

asmeurer chỉ ra rằng đây là một tính năng mà sẽ sớm được cung cấp trong sympy từ yêu cầu kéo http://github.com/sympy/sympy/pull/1888. Tôi đã cài đặt chi nhánh sử dụng pip,

pip install -e [email protected]:renatocoutinho/[email protected]#egg=sympy --upgrade 

Tuy nhiên, khi tôi cố gắng để tính toán hàng loạt các f (x),

x, h = symbols("x,h") 
f = Function("f") 
series(f,x,x+h) 

tôi nhận được lỗi sau,

TypeError: unbound method series() must be called with f instance as first argument (got Symbol instance instead)

+0

Bạn không thể. Chỉ cần sử dụng một vòng lặp và 'diff'. Và hàm này được gọi là 'chuỗi' không phải là' taylor'. – Krastanov

+1

Có một yêu cầu kéo để thực hiện công việc này tại https://github.com/sympy/sympy/pull/1888. – asmeurer

+0

@asmeurer tuyệt vời! Điều này chưa được sáp nhập vào nhánh chính, vẫn có thể cài đặt nó bằng pip. Hoặc tôi cần phải sao chép các repo, áp dụng các bản vá và sau đó xây dựng từ nguồn? –

Trả lời

5

Không có chức năng nào cho tính năng này trong sympy, nhưng thật dễ dàng để làm điều đó "bằng tay":

In [3]: from sympy import * 
     x, h = symbols('x, h') 
     f = Function('f') 
     sum(h**i/factorial(i) * f(x).diff(x, i) for i in range(4)) 

Out[3]: h**3*Derivative(f(x), x, x, x)/6 + h**2*Derivative(f(x), x, x)/2 + h*Derivative(f(x), x) + f(x) 

Lưu ý rằng sympy thường hoạt động với các biểu thức (như f(x)) và không có chức năng trần (như f).

8

Như @asmeurer mô tả, đây là bây giờ có thể với

from sympy import init_printing, symbols, Function 
init_printing() 

x, h = symbols("x,h") 
f = Function("f") 

pprint(f(x).series(x, x0=h, n=3)) 

hoặc

from sympy import series 
pprint(series(f(x), x, x0=h, n=3)) 

cả lợi nhuận

           ⎛ 2  ⎞│       
              2 ⎜ d   ⎟│       
            (-h + x) ⋅⎜────(f(ξ₁))⎟│       
               ⎜ 2  ⎟│       
       ⎛ d  ⎞│     ⎝dξ₁  ⎠│ξ₁=h ⎛  3  ⎞ 
f(h) + (-h + x)⋅⎜───(f(ξ₁))⎟│  + ──────────────────────────── + O⎝(-h + x) ; x → h⎠ 
       ⎝dξ₁  ⎠│ξ₁=h    2          

Nếu bạn muốn có một xấp xỉ sai phân hữu hạn, bạn có thể cho ví dụ viết

FW = f(x+h).series(x+h, x0=x0, n=3) 
FW = FW.subs(x-x0,0) 
pprint(FW) 

để có được xấp xỉ về phía trước, mà trả về

        ⎛ 2  ⎞│ 
           2 ⎜ d   ⎟│ 
           h ⋅⎜────(f(ξ₁))⎟│ 
            ⎜ 2  ⎟│ 
      ⎛ d  ⎞│   ⎝dξ₁  ⎠│ξ₁=x₀ ⎛ 3 2  2 3     ⎞ 
f(x₀) + h⋅⎜───(f(ξ₁))⎟│  + ────────────────────── + O⎝h + h ⋅x + h⋅x + x ; (h, x) → (0, 0)⎠ 
      ⎝dξ₁  ⎠│ξ₁=x₀    2