gpt4 book ai didi

python - 在 Python 中使用 Sympy 评估符号微分

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:38 24 4
gpt4 key购买 nike

我正在使用 Sympy 库在 python 中编写 NewtonRaphson 算法,这是我的算法实现:

def NewtonRaphson(fx,p0,tolerancia,iteracionesMaximas):
print
fx = S(fx)
x = Symbol('x')
i = 1
p = 0.0

while i<= iteracionesMaximas:

y = fx.subs(x,p0)
yy = diff(fx,x).subs(x,p0)
p = p0 - (y/yy)

if absolute(p-p0) < tolerancia:
print "Se encontró la raíz y={raiz} luego de {n} iteraciones".format(raiz=p, n=i-1)
return

i += 1
print "{i}\t{p}\t{p0}".format(i=i-1,p=p,p0=p0)
p = p0

print "El método falló luego de {i} iteraciones".format(i=i-1)

我通过以下消息获得加薪:

line 18, in NewtonRaphson    
yy = diff(fx,x).subs(x,p0)
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 984, in diff
if n < 0:
File "/usr/local/lib/python2.7/dist-packages/sympy/core/relational.py", line 226, in __nonzero__
raise TypeError("symbolic boolean expression has no truth value.")
TypeError: symbolic boolean expression has no truth value.

我将函数 fx 称为等于 'x**3-x-1' 的字符串,并输入调用 NewtonRaphson(fx,1.7,10 **(-4),17).

我做错了什么?

最佳答案

看起来您正在将符号表达式传递给 numpy 的绝对函数。从你的代码来看,我敢打赌你的导入语句是

from pylab import *
from sympy import *

如果是这种情况,您应该将 absolute 替换为 Abs,这样您就可以使用 sympy 内置的绝对值函数,而不是 numpy 的绝对值函数数组。

此外,您需要将 p = p0 替换为 p0 = p 以使算法正常运行。

这是一个工作版本,导入语句有所更改。我还删除了一些不必要的语句。

import sympy as sy

x = sy.symbols('x')
fx = x**3 - x - 1

def NewtonRaphson(fx,p0,tolerancia,iteracionesMaximas):

for i in xrange(iteracionesMaximas):

y = fx.subs(x, p0)
yy = sy.diff(fx,x).subs(x, p0)
p = p0 - (y / yy)

if sy.Abs(p-p0) < tolerancia:
print "Se encontró la raíz y={raiz} luego de {n} iteraciones".format(raiz=p, n=i-1)
return

print "{i}\t{p}\t{p0}".format(i=i+1,p=p,p0=p0)
p0 = p

print "El método falló luego de {i} iteraciones".format(i=i-1)

NewtonRaphson(fx,1.7,10**(-4),17)

关于python - 在 Python 中使用 Sympy 评估符号微分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21646037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com