python - python 中的泰勒级数问题 (sympy)

标签 python sympy taylor-series

我正在尝试获取此函数的泰勒级数

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

但是,当我尝试以 @Saullo 为例时对于我的问题, enter image description here

正如你所看到的,结果是从泰勒级数中消除“d”,这不应该是我的目标。

实际上有关该函数的另一个附加信息是: enter image description here

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

感谢任何帮助

代码

Thank you for your response and interest in helping me, here is my code until nowdays @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

最佳答案

问题是你的表达式足够复杂,以至于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,它们都是复杂的表达式。事实上,您需要先获取多个项(最多 a3),然后系列才能获取不取消到 0 的项:

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**2 (n=3 code> 表示 + O(d**3))。您可以使用以下方式大大简化表达式:

collect(expr.removeO(), d, simplify)

在内部,当您为系列提供显式 n 时,它会使用逐项生成器来获取所需的尽可能多的项,以给出正确的 O(d**n ) 扩展。如果您自己使用生成器 (n=None),则需要手动执行此操作。

一般来说,迭代器不能保证为您提供下一个阶项。如果您想保证拥有所有条款,则需要提供明确的 nseries 返回的 O 项始终是正确的(意味着所有低阶项都是完整的)。

关于python - python 中的泰勒级数问题 (sympy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733545/

相关文章:

python - 假设函数未完全集成到 SymPy 中

python - Sympy - 从三角方程中得到两个解,我原本期望只有一个

java - 沉迷于 Java 中计算指数(泰勒级数)

python - Scala:带参数的python脚本的系统命令

python:将父类中的每个方法包装在 "with"中的最干净的方法

python - 强制 SymPy 保持术语的顺序

c++ - 当满足两个条件时,如何在 C++ 中停止 For 循环?

python - 如何在keras中实现麦克劳林系列?

用于读取 LANDSAT XML 图元文件的 Python 脚本

python - Metaflow 数据对象未存储在 S3 中