如何在python中将float作为字符串传递给mpmath?

2024-07-05 10:26:24 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我想向mpmath.mpf传递一个float并用mp.findroot找到根,我会遇到一些麻烦。在

问题继续前面一个问题的故事:Polynomial function cannot be solved by Python sympy

import sympy
omega = sympy.symbols('omega')
from sympy import I 
import mpmath as mp
import numpy as np

# Definition of simplified function
def function(omega):
    return sympy.Poly((-1.16*omega**4), omega)

# This function does not work
def doesntwork(omega):
    return (mp.mpf(str(np.real(sympy.lambdify( (I),function(omega).coeffs()[0])(1j)))) * omega ** 4)

# This function does work, but I need to handover the value due to its not constant
def doeswork(omega):
    return (mp.mpf('-1.16') * omega ** 4)

#print mp.findroot(doesntwork, 1)   # error message
print mp.findroot(doeswork, 1)      # result is obtained

如果我用字符串输入系数,mp.findroot命令可以工作,但如果我通过自动过程读取系数,则不起作用。问题似乎是由mpmath.mpf的输入引起的,该输入未被识别为字符串。我需要这个自动的过程,因为系数并不像这个简单的例子中那样是恒定的。在

函数doesnwork的错误消息是:

^{pr2}$

谢谢你的帮助!在


Tags: importreturndefasnpfunctionmpthis
1条回答
网友
1楼 · 发布于 2024-07-05 10:26:24

我解决了问题。显然,如果之前将系数存储在变量中,则会有所不同。在

coefficient = str(np.real(sympy.lambdify( (I),function(omega).coeffs()[0])(1j)))
def doesntwork(omega):
    return (mp.mpf(coefficient) * omega ** 4)

print mp.findroot(doesntwork, 1) 

输出

^{pr2}$

相关问题 更多 >