在python中使用taylor系列遇到麻烦(同情)

时间:2016-11-22 03:59:53

标签: python sympy taylor-series

我试图为这个功能获得泰勒系列

考虑到d居中或围绕rs,这应该与此类似

然而,当我尝试以@Saullo为例来解决我的问题时, enter image description here

正如您所看到的,结果是消除了" d"来自泰勒系列,这不应该是我的目标。

关于该功能的另一个额外信息实际上是: enter image description here

我做错了什么?有没有办法在没有删除" d"的情况下获得我的结果? ??

感谢任何帮助

代码

  

感谢您的回复和对我的帮助,这是我的代码直到现在@asmeurer

import sympy as sy
#import numpy as np

from sympy import init_printing
init_printing(use_latex=True)

# Define the variable and the function to approximate
z, d, r_s, N_e, r_t, r_s, r_b = sy.symbols('z  d r_s N_e r_t r_s r_b')

# Define W_model
def W_model(r_t=r_t, r_b=r_b, r_s=r_s, z=z):

    s_model = sy.sqrt(pow(r_t, 2) - pow(r_s*sy.sin(z), 2)) - sy.sqrt(pow(r_b, 2) - pow(r_s*sy.sin(z), 2))
    d_model = r_t - r_b

    STEC_approx = N_e * s_model
    VTEC_approx = N_e * d_model

    return STEC_approx/VTEC_approx

f = W_model() 
# printing Standard model
f

# Some considerations for modify Standard model
rb = r_s - d/2
rt = r_s + d/2

f = W_model(r_b=rb, r_t=rt, r_s=r_s, z=z) 
# printing My model
f

## Finding taylor series aproximmation for W_model
num_of_terms = 2
# creates a generator
taylor_series = f.series(x=d, n=None)

# takes the number of terms desired for your generator
taylor_series = sum([next(taylor_series) for i in range(num_of_terms)])
taylor_series

1 个答案:

答案 0 :(得分:1)

问题是你的表达式很复杂,series不知道奇数顺序项是零(你得到了复杂的表达式,但如果你对它们调用simplify(),它们就是转到0)。考虑

In [62]: s = f.series(d, n=None)

In [63]: a1 = next(s)

In [64]: a2 = next(s)

In [65]: simplify(a0)
Out[65]:
       rₛ
────────────────
   _____________
  ╱   2    2
╲╱  rₛ ⋅cos (z)

In [66]: simplify(a1)
Out[66]: 0

如果您打印a0a1,则它们都是复杂的表达式。实际上,在系列获得不取消为0的术语之前,您需要获得多个术语(最多a3):

In [73]: simplify(a3)
Out[73]:
      _____________
 2   ╱   2    2        2
d ⋅╲╱  rₛ ⋅cos (z) ⋅sin (z)
───────────────────────────
           3    6
       8⋅rₛ ⋅cos (z)

如果您执行f.series(d, n=3),则会将扩展提升至d**2n=3表示+ O(d**3))。您可以使用

简化表达式
collect(expr.removeO(), d, simplify)

在内部,当您为系列提供明确的n时,它会使用逐项生成器来获取所需的任意数量的术语,以便进行正确的O(d**n)扩展。如果您自己使用生成器(n=None),则需要手动执行此操作。

通常,迭代器不能保证为您提供下一个订单条款。如果您希望保证拥有所有条款,则需要提供明确的nO返回的series字词始终正确(表示所有低阶字词都已完成)。