gpt4 book ai didi

python - 通过迭代输入数组来获取耦合非线性方程的值数组

转载 作者:行者123 更新时间:2023-12-01 04:49:34 25 4
gpt4 key购买 nike

我正在尝试求解非线性方程组的耦合:

x(x+2y)/(1-x-y) = A

y(x+2y)/x = B

其中 A 和 B 是两个大小相同的不同数组中的元素。

我在一个数组中有 10,000 个 A 值,在另一个数组中有 10,000 个 B 值。

我需要使用 A[i] 和 B[i] 确定 x[i] 和 y[i]。但是,当我执行以下操作时:

def Eqs(z):
x, y = z
for i in A and B:
return (x*(x + 2*y) - A[i]*(1 - x - y), y*(x + 2*y) - B[i]*x)

x, y = scopt.fsolve(Eqs, (1,1))

我收到以下错误消息:

ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

对 A 和 B 使用适当大小的随机数组,有人可以 (1) 解释为什么我收到该特定错误消息,并 (2) 建议解决方法吗?

最佳答案

for i in A and B:没有多大意义。 A 和 B 是对数组 AB 的二元逻辑运算,它既无效,也不是您需要的运算。

您想要做的可能类似于 for a, b in zip(A, B):。这会在每次迭代中生成标量 ab。所以 a = A[i] 且 b = B[i]。 zipAB 创建值对,然后可用作 ab 在 for 循环中。

或者,您可以使用索引i进行迭代:for i in range(len(A)):

<小时/>

代码还有另一个问题:return 将停止循环并将方法保留在第一次迭代中。因此,您可以为返回值创建两个列表,在整个 for 循环中填充它,并在 Eqs 末尾返回它。或者您使用列表理解来缩短它:

return [x*(x + 2*y) - a*(1 - x - y) for a in A], [y*(x + 2*y) - b*x for b in B]

这应该产生两个列表。

关于python - 通过迭代输入数组来获取耦合非线性方程的值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28748936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com