Python 3.x can';t将表达式转换为浮点问题

Python 3.x can';t将表达式转换为浮点问题,python-3.x,Python 3.x,我试图用“subs”函数来解微分方程 但我得到了错误:“无法将表达式转换为浮点” 我试图检查数组的类型,但它们都是浮动的 import sympy as sym from sympy.integrals import inverse_laplace_transform from sympy.abc import s,t,y import numpy as np U = 1 G =(s+1)/(s*(s+2)) Y = G*U y = inverse_laplace_transform(Y, s

我试图用“subs”函数来解微分方程 但我得到了错误:“无法将表达式转换为浮点”

我试图检查数组的类型,但它们都是浮动的

import sympy as sym
from sympy.integrals import inverse_laplace_transform
from sympy.abc import s,t,y
import numpy as np

U = 1
G =(s+1)/(s*(s+2))
Y = G*U
y = inverse_laplace_transform(Y, s, t)
tm = np.linspace(0,2,3)
y_val = np.zeros(len(tm))
for i in range(len(tm)):
    y_val[i] = y.subs(t, tm[i])

print(y)
print(y_val)
第17行 y_val[i]=y.subs(t,tm[i])
TypeError:无法将表达式转换为float

这里的问题是,因为
tm[0]==0
,循环的第一次迭代中计算的
y
Heaviside(0)
,默认情况下没有定义的实数值(请参阅)。这是因为你有

从sympy.functions导入exp,Heaviside
断言y==Heaviside(t)/2+exp(-2*t)*Heaviside(t)/2
这里最简单的解决方法是定义一个线性空间,例如不包括
0

epsilon=1e-15
tm=np.linspace(ε,2,3)

这里的问题是,因为
tm[0]==0
,在循环的第一次迭代中计算的
y
Heaviside(0)
,默认情况下它没有定义的实际值(请参阅)。这是因为你有

从sympy.functions导入exp,Heaviside
断言y==Heaviside(t)/2+exp(-2*t)*Heaviside(t)/2
这里最简单的解决方法是定义一个线性空间,例如不包括
0

epsilon=1e-15
tm=np.linspace(ε,2,3)

使用
y_val=np.zeros(len(tm))
,数组的默认数据类型为。修改代码后,您会发现
y_val
元素之一是一个,而不是一个浮点。您可以使用列表对象作为占位符,也可以将
numpy
数组的数据类型指定为
object

import sympy as sym
from sympy.integrals import inverse_laplace_transform
from sympy.abc import s,t,y
import numpy as np

U = 1
G =(s+1)/(s*(s+2))
Y = G*U
y = inverse_laplace_transform(Y, s, t)
tm = np.linspace(0,2,3)
# y_val = [0 for _ in range(len(tm))]
y_val = np.zeros(len(tm), dtype=object)
for i in range(len(tm)):
    y_val[i] = y.subs(t, tm[i])

print(y_val)

结果:
[Heaviside(0.0)0.567667641618306 0.509157819444367]
使用
y_val=np.zeros(len(tm))
,数组的默认数据类型为。修改代码后,您会发现
y_val
元素之一是一个,而不是一个浮点。您可以使用列表对象作为占位符,也可以将
numpy
数组的数据类型指定为
object

import sympy as sym
from sympy.integrals import inverse_laplace_transform
from sympy.abc import s,t,y
import numpy as np

U = 1
G =(s+1)/(s*(s+2))
Y = G*U
y = inverse_laplace_transform(Y, s, t)
tm = np.linspace(0,2,3)
# y_val = [0 for _ in range(len(tm))]
y_val = np.zeros(len(tm), dtype=object)
for i in range(len(tm)):
    y_val[i] = y.subs(t, tm[i])

print(y_val)

结果:
[Heaviside(0.0)0.567667641618306 0.509157819444367]
我有类似的问题,您的答案对我有效,但我仍然需要将数据放入图表中。。我修改了这个问题的问题:

import sympy as sym
from sympy.integrals import inverse_laplace_transform
from sympy.abc import s,t,y
import numpy as np
import matplotlib.pyplot as plt

Y = (5*(1 - 5*s))/(s*(4*(s**2) + s + 1))*(1/s)

y = inverse_laplace_transform(Y, s, t)
tm = np.linspace(1e-15, 20, 100)

y_val = np.zeros(len(tm), dtype=object)
for i in range(len(tm)):
    y_val[i] = y.subs(t, tm[i])

plt.plot(y_val, tm)
plt.show()
运行此代码时,我遇到了相同的错误:

TypeError: can't convert expression to float

我也有类似的问题,你们的答案对我很有用,但我仍然需要把数据放到图表中。。我修改了这个问题的问题:

import sympy as sym
from sympy.integrals import inverse_laplace_transform
from sympy.abc import s,t,y
import numpy as np
import matplotlib.pyplot as plt

Y = (5*(1 - 5*s))/(s*(4*(s**2) + s + 1))*(1/s)

y = inverse_laplace_transform(Y, s, t)
tm = np.linspace(1e-15, 20, 100)

y_val = np.zeros(len(tm), dtype=object)
for i in range(len(tm)):
    y_val[i] = y.subs(t, tm[i])

plt.plot(y_val, tm)
plt.show()
运行此代码时,我遇到了相同的错误:

TypeError: can't convert expression to float

欢迎来到SO!请不要在问题中添加其他问题(特别是旧问题):打开一个新问题,如果有用,链接到另一个问题。欢迎使用SO!请不要在问题中添加其他问题(尤其是旧问题):打开一个新问题,如果有用,链接到另一个问题。