Function 在函数中使用函数时for循环出错

Function 在函数中使用函数时for循环出错,function,python-3.6,Function,Python 3.6,我定义了一个函数来从数据中创建一个多项式,定义了另一个函数来在方程中使用这个多项式,然后使用for循环来运行它,直到正在计算的值等于或小于0。 当运行for循环时,当循环应该结束时,它会给出以下错误-'具有多个元素的数组的真值不明确。使用a.any()或a.all() def poly(高): 返回np.poly1d(np.polyfit(xs,ys,deg=5)) def hip1(Hi、g、e、d、dt): 返回Hi-((np.pi*d**2)*np.sqrt(2*g*(Hi+e))*dt)

我定义了一个函数来从数据中创建一个多项式,定义了另一个函数来在方程中使用这个多项式,然后使用for循环来运行它,直到正在计算的值等于或小于0。 当运行for循环时,当循环应该结束时,它会给出以下错误-'具有多个元素的数组的真值不明确。使用a.any()或a.all()

def poly(高):
返回np.poly1d(np.polyfit(xs,ys,deg=5))
def hip1(Hi、g、e、d、dt):
返回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
对于范围内的i(1000000):
t、 附加((i+1)*dt)
附加(hip1(H[i],g,e,d,dt))
如果H[i+1]<0:break
------------------------------------------------------------------------
ValueError回溯(最近的调用
最后)
在里面
2 t.附加((i+1)*dt)
3h.append(hip1(H[i],g,e,d,dt))
---->4如果H[i+1]<0:中断
ValueError:包含多个元素的数组的真值为
模棱两可的。使用a.any()或a.all()

我尝试运行您的代码以了解问题

我运行了以下代码:

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
对于最后一个问题,我刚刚使用了hip1数组返回的平均值。 数组的值似乎是闭合的,因此使用单个值是一种解决方案。在您的上下文中,这可能是错误的,但我们的想法是只有一个值,而不是数组


现在,您可以轻松地运行程序并测试您的值。

我尝试运行您的代码以了解问题

我运行了以下代码:

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
对于最后一个问题,我刚刚使用了hip1数组返回的平均值。 数组的值似乎是闭合的,因此使用单个值是一种解决方案。在您的上下文中,这可能是错误的,但我们的想法是只有一个值,而不是数组


现在,您可以轻松地运行程序并测试您的值。

如果我只使用hip1函数,而不是将多项式作为函数直接输入,则它可以工作。当达到0时,如何编辑for循环以使其中断?多项式函数有数据-xs=[6,5,4,3,2,1,0]ys=[1170097006700450032001800,0]。我忘了在函数上面显示这个。我发现问题出在函数poly(Hi)上。这个函数只是停留在多项式上,不取任何变量值。你知道我是如何给多项式赋值的吗?你想让你的函数poly(Hi)接受多个参数吗?你有你想要的例子吗?当我只有hip1函数时,如果我直接把多项式输入它,而不是作为一个函数,它就可以工作。当达到0时,如何编辑for循环以使其中断?多项式函数有数据-xs=[6,5,4,3,2,1,0]ys=[1170097006700450032001800,0]。我忘了在函数上面显示这个。我发现问题出在函数poly(Hi)上。这个函数只是停留在多项式上,不取任何变量值。你知道我是如何给多项式赋值的吗?你想让你的函数poly(Hi)接受多个参数吗?你有你想要的例子吗?
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)