我试图解决3个有3个变量的方程。到目前为止,我已经成功地使用GEKKO来解决这个问题,但是对于我的应用来说,GEKKO的计算速度太慢了。因此,我试图让方程在numpy中工作。
我的问题是如何将方程分解成数组。我将把我的代码复制到下面,以帮助更好地解释我的问题。第一个是GECKO的代码,第二个是numpy的尝试。
该方程试图求解Xn,Yn,Zn。
Xn = m.Var()
Yn = m.Var()
Zn = m.Var()
m.Equation((X3 - Xn)**2 + (Y3 - Yn)**2 + (Z3 - Zn)**2 == chord_2**2)
m.Equation((Xc - Xn)**2 + (Yc - Yn)**2 + (Zc - Zn)**2 == R**2)
m.Equation((X1 - Xn)**2 + (Y1 - Yn)**2 + (Z1 - Zn)**2 == chord_3**2)
m.solve(disp=False)
print(Xn.value)
print(Yn.value)
print(Zn.value)
print()
returns: [2.1594220718]
[1.9266668526]
[4.7244269684]
请原谅numpy的尝试,因为我现阶段只是在玩。
A = np.array([[(X3-1)**2, (Y3-1)**2, (Z3-1)**2],
[(Xc-1)**2, (Yc-1)**2, (Zc-1)**2],
[(X1-1)**2, (Y1-1)**2, (Z -1)**2]])
B = np.array([chord_2**2, R**2, chord_3**2])
ans = np.linalg.solve(A,B)
print(ans)
returns: [0.6453685 2.11823391 0.02638476]
如你所见,答案显然不正确。
任何帮助将是非常感激的。谢谢你的回复。
感谢您的回复,我会在下面添加变量值。
X1 = 2.0
Y1 = 1.5
Z1 = 6.0
X3 = 11.75
Y3 = 6.25
Z3 = 0.0
Xc = 9.44449509
Yc = 3.50380186
Zc = 6.88156432
chord_2 = 11.532155223590282
R = 7.759696168825623
chord_3 = 1.3544541258839005
比如说如果这三个方程为。
x + 2y + z = 2
2x - 3y + z = -1
5x - y - 2z = -3
我会在数组中填入如下内容
A = np.array([[1, 2, 1],
[2, -3, 1],
[5, -1, -2]])
B = np.array([2, -1, -3])
ans = np.linalg.solve(A,B)
print(ans)
returns: [1. 2. 3.]
我想做同样的事情,但我的三个方程。 谢谢你的帮助!
像这样。
import numpy as np
arr = np.arange(1, 9 + 1).reshape(3, 3)
例如数组
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
等式:
np.power(np.subtract(5, arr), 2)
array([[16, 9, 4],
[ 1, 0, 1],
[ 4, 9, 16]])
我找到了一个解决方案使用scipy。 代码如下。
from scipy.optimize import fsolve
def equations(p):
Xn, Yn, Zn = p
return ((X3 - Xn)**2 + (Y3 - Yn)**2 + (Z3 - Zn)**2 - chord_2**2,
(Xc - Xn)**2 + (Yc - Yn)**2 + (Zc - Zn)**2 - R**2,
(X1 - Xn)**2 + (Y1 - Yn)**2 + (Z1 - Zn)**2 - chord_3**2)
Xn, Yn, Zn = fsolve(equations, (1,1,1))
print(Xn)
print(Yn)
print(Zn)
这给出了正确的答案,并且运行得更快。