我正在定义一个从数据创建多项式的函数,定义另一个函数以在方程式中使用该多项式,然后使用for循环让它运行直到所计算的值等于或小于0。 在运行for循环时,如果循环应结束,则会产生以下错误-'具有多个元素的数组的真值不明确。使用a.any()或a.all()'
def poly(Hi):
return np.poly1d(np.polyfit(xs, ys, deg=5))
def hip1(Hi,g,e,d,dt):
return Hi -((np.pi*d**2)*np.sqrt(2*g*(Hi + e))*dt) / (4*poly(Hi))
H = [6]
t = [0]
dt = 1
d = 0.25
e = 1
g = 9.81
for i in range(1000000):
t.append((i+1)*dt)
H.append(hip1(H[i],g,e,d,dt))
if H[i+1] < 0: break
------------------------------------------------------------------------
ValueError Traceback (most recent call
last)
<ipython-input-11-a17bdee03e19> in <module>
2 t.append((i+1)*dt)
3 H.append(hip1(H[i],g,e,d,dt))
----> 4 if H[i+1] < 0: break
ValueError: The truth value of an array with more than one element is
ambiguous. Use a.any() or a.all()
答案 0 :(得分:2)
我试图运行您的代码以了解问题。
我运行了这段代码:
for i in range(1000000):
t.append((i+1)*dt)
H.append(hip1(H[i],g,e,d,dt))
print(H)
print(i)
if H[i+1] < 0:
break
我已经测试过可以打印H
和i
。因此,循环在第一次迭代时崩溃
并打印:
H = [6, array([2.54840628, 2.54840628, 2.54840628, 2.54840628, 2.54840628, 2.54840628])]
因此,看到H [i + 1]是一个数组,就无法访问它。
您的函数hip1
返回另一个数组,而不是单个值。
编辑:
代码的新版本:
H = [6]
t = [0]
dt = 1
d = 0.25
e = 1
g = 9.81
xs = [6, 5, 4, 3, 2, 1, 0]
ys = [11700, 9700, 6700, 4500, 3200, 1800, 0]
for i in range(10000):
t.append((i+1)*dt)
H.append(np.mean(hip1(H[i],g,e,d,dt)))
if H[i+1] < 0:
break
print(H)
对于最后一个问题,我只使用了hip1返回的数组平均值。 数组的值似乎是封闭的,因此具有单个值是一种解决方案。在您的情况下,也许这是错误的,但其想法是拥有唯一的价值,而不是一个数组。
现在,您可以轻松运行程序并测试您的值。