numpy 相互依赖函数[重复]

w8biq8rn  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(122)

此问题已在此处有答案

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()(10个答案)
What is the maximum recursion depth, and how to increase it?(19回答)
13天前关闭。

def rabbit(t):

    num = r0*(e**(rb*t))+ fox(t-1)*0.3

    return num

def fox(t):

    num = f0*(e**(rf*t))+ rabbit(t-1)*0.15

    return num

所以我试图在matplotlib中绘制上面的两个函数,正如你所看到的,这两个函数是相互依赖的,兔子被狐狸吃掉了,如果狐狸有更多的兔子吃它,它会长得更快。
问题是,这将抛出一个递归深度错误(很明显)
RecursionError: maximum recursion depth exceeded
但是如果我加上basecase和recursive case

def rabbit(t):

    if(t>0):
        num = r0*(e**(rb*t))+ fox(t-1)*0.3
    else:
        num = r0
    return num

def fox(t):

    if(t>0):    
        num = f0*(e**(rf*t))+ rabbit(t-1)*0.15
    else:
        num = f0
    return num

我得到这个错误
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

cgvd09ve

cgvd09ve1#

祝你愉快只要您定义了变量并对一个数字调用它,您提供的函数就可以工作。举个例子,这在我的机器上运行得很好:

r0 = 1
rb = 1
f0 = 1
rf = 3
e = 2.818
def rabbit(t):
    if(t>0):
        num = r0*(e**(rb*t))+ fox(t-1)*0.3
    else:
        num = r0
    return num

def fox(t):
    if(t>0):    
        num = f0*(e**(rf*t))+ rabbit(t-1)*0.15
    else:
        num = f0
    return num
print(rabbit(30),fox(30))

你得到的错误消息看起来像一个numpy错误消息,我认为你试图将t作为一个numpy数组传递。这导致了一个问题,因为如果(t> 0)变得模糊…t包含多个元素!如果你的目的是绘制rabbit和fox在一个区间上的图(比如从-10到10),那么你可以使用列表解析(你需要将matplotlib. pyplot导入为plt,将numpy导入为np):

x = np.linspace(-10,10,1000)
rabbit_values = np.array([rabbit(t) for t in x])
fox_values = np.array([fox(t) for t in x])
plt.plot(x,fox_values, label='fox')
plt.plot(x,rabbit_values,label='rabbit')
plt.legend()
plt.show()

有用吗?

相关问题