线性代数方程的数组中怎么写(5-x)**2?

问题描述 投票:0回答:1

我试图解决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.]

我想做同样的事情,但我的三个方程。 谢谢你的帮助!

python numpy
1个回答
1
投票

像这样。

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]])

0
投票

我找到了一个解决方案使用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)

这给出了正确的答案,并且运行得更快。

© www.soinside.com 2019 - 2024. All rights reserved.