我试图在一个区间中创建线性函数,而另一个区间是0。并将其添加到数组中。
所以我尝试了这段代码
import numpy as np
import sympy as sp
import matplotlib as plt # This is all the library's i need
import mpmath
x = sp.symbols('x')
n = 10
xx = (np.array([np.linspace(0, 1, n+1)]))
i = 0
N = []
N[0] = sp.Piecewise( ((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), xx[0, i] <= x),
((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), x <= xx[0, i + 1]),
(0, True)
)
它总是会回来
line 511, in __bool__
raise TypeError("cannot determine truth value of Relational")
TypeError: cannot determine truth value of Relational
编辑:在我把x加到符号上后,我尝试在循环中的区间中生成一个线性函数向量,我不知道它为什么拒绝确定真值,即使在上面的行中很难确定它成功的原因:
import sympy as sp
import matplotlib as plt # This is all the library's i need
import mpmath
x = sp.symbols('x', positive=True)
n = 10
xx = (np.array([np.linspace(0, 1, n+1)]))
i = 0
N = []
a = sp.Piecewise(
((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), (xx[0, i]) <= x),
((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), (x <= (xx[0, i + 1]))),
(0, True)
)
N.append(a)
for i in range(1, n):
a = sp.Piecewise(
(0, x < xx[0, i - 1]),
((xx[0, i - 1] - x) / (xx[0, i - 1] - xx[0, i]), ((xx[0, i - 1]) <= x)),
((xx[0, i - 1] - x) / (xx[0, i - 1] - xx[0, i]), (x <= (xx[0, i]))),
((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), ((xx[0, i]) <= x)),
((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), (x <= (xx[0, i + 1]))),
(0, True)
)
N.append(a)
我也犯了同样的错误:
文件"",第23行,文件"pythonProjectFEANew\venv\lib\site-packages\sympy\core\relational.py",第511行,bool TypeError(“无法确定关系的真值”) TypeError:无法确定关系的真值
发布于 2022-11-05 12:41:13
这是numpy float64中的一个bug:
In [48]: xx[0,1]
Out[48]: 0.1
In [49]: type(xx[0,1])
Out[49]: numpy.float64
In [50]: xx[0,1] < x
---------------------------------------------------------------------------
TypeError
sympy/core/relational.py in __bool__(self)
509
510 def __bool__(self):
--> 511 raise TypeError("cannot determine truth value of Relational")
512
513 def _eval_as_set(self):
TypeError: cannot determine truth value of Relational
错误来自同情,但这是因为numpy.float64.__lt__
出于某种原因调用了x.__gt__
返回的不等式的bool
。如果您扭转了不等式的方向,或者将numpy.float64
转换为普通的Python float
,那么它将运行得很好:
In [51]: x > xx[0,1]
Out[51]: x > 0.1
In [52]: float(xx[0,1]) < x
Out[52]: x > 0.1
问题是,numpy.float64.__lt__
应该在某个地方返回NotImplemented
,但是却做了一些奇怪的事情。
发布于 2022-11-05 08:08:07
我相信那是个窃听器。
您可以通过首先将数值转换为Float
来解决这个问题,如下所示:
sp.Piecewise(
((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), sp.Float(xx[0, i]) <= x),
((xx[0, i + 1] - x) / (xx[0, i + 1] - xx[0, i]), x <= xx[0, i + 1]),
(0, True)
)
https://stackoverflow.com/questions/74326008
复制相似问题