【问题标题】:Error evaluating a derivative on Python (with .subs, .evalf and .lambdify)在 Python 上评估导数时出错(使用 .subs、.evalf 和 .lambdify)
【发布时间】:2018-09-14 11:28:05
【问题描述】:

我试图单独计算泰勒展开的元素,但没有得到我应该得到的结果。逼近的函数是 x**321,围绕 x=1 的泰勒展开式的前三个元素应该是: 1 + 321(x-1) + 51360(x-1)**2 出于某种原因,与第二个术语关联的代码不起作用。 请参阅下面的代码。

import sympy as sy
import numpy as np
import math
import matplotlib.pyplot as plt

x = sy.Symbol('x')
f = x**321
x0 = 1
func0 = f.diff(x,0).subs(x,x0)*((x-x0)**0/factorial(0))
print(func0)
func1 = f.diff(x,1).subs(x,x0)*((x-x0)**1/factorial(1))
print(func1)
func2 = f.diff(x,2).subs(x,x0)*((x-x0)**2/factorial(2))
print(func2)

我运行这段代码得到的打印结果是

1
321x - 321
51360*(x - 1)**2

我也使用了 .evalf 和 .lambdify 但结果是一样的。我不明白错误来自哪里。

f = x**321
x = sy.Symbol('x')

def fprime(x):
    return sy.diff(f,x)

DerivativeOfF = sy.lambdify((x),fprime(x),"numpy")
print(DerivativeOfF(1)*((x-x0)**1/factorial(1)))
321*x - 321

我显然只是从语言开始,所以谢谢你的帮助。

【问题讨论】:

  • 你的 sy 后面是什么包?您可以在代码的开头包含您的导入吗?
  • 错误在哪里?从您的输出看来,一切正常。您已经打印了正确的输出
  • 不,我认为她的意思是在第二行应该有 321*(x-1)
  • 但这只是输出的打印问题,而不是错误。两种形式是等价的
  • 告诉她不是我。哦,等等,你刚刚做了:P

标签: python evaluate lambdify evalf


【解决方案1】:

我找到了一个初学者指南,如何在 python 中进行 Taylor 扩展。看看吧,也许你所有的问题都在那里得到解答:

http://firsttimeprogrammer.blogspot.com/2015/03/taylor-series-with-python-and-sympy.html

我测试了您的代码,它运行良好。就像 Bazingaa 在 cmets 中指出的那样,python 如何在内部保存函数只是一个问题。有人可能会争辩说,对于一台计算机来说,保存321*x - 321 而不是321*(x - 1)**1 需要更少的RAM。 在您的第一行输出中,它还为您提供 1 而不是 (x - 1)**0

【讨论】:

  • 我的代码实际上是从一个非常相似的循环开始的,按照这些说明但只更改了函数,我得到了所描述的错误。
  • 我刚刚意识到@Bazingaa 和你在说什么。太明显了,现在很尴尬。
猜你喜欢
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多