내가 이해하는 한, RyA
및 현재 오른쪽에있는 기타 변수를 처리하도록 시스템의 행렬을 조정해야합니다. 수동으로 할 수 있습니다.이 경우이 질문은이 사이트의 범위를 벗어나지 만 순전히 수학적인 시험입니다.
from sympy import Matrix, symbols, solve
x1, x2, f1 = symbols('x1 x2 f1')
X = Matrix([0, x1, x2])
B = Matrix([f1, 50, 60])
M = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
solve(M * X - B, [x1, x2, f1])
# {f1: 40, x2: 100/3, x1: -30}
주 sympy
그 numpy.linalg
보다 숫자 선형 시스템을 해결 속도가 느려질 수 있습니다, 그래서 당신의 대수 부분을 할 sympy
을 사용할 수 있습니다 : 당신을 위해 문제의 대수 부분을 할 수있는 대신 np.linalg.solve()
의 sympy 작업, 행렬과 오른편을 계산 한 다음 numpy.linalg.solve
을 사용하여 해결하십시오.
import numpy as np
from sympy import expand
def symbolic_to_matrix(F, variables):
"""
F is a symbolic vector function that is a left hand side of equation F = 0
variables is a list of variables (sympy.Symbol's) which F depends on.
Assuming that there exists numeric matrix A such that equation F = 0
is equivalent to linear equation Ax = b, this function returns
tuple (A, b)
"""
A = []
b = []
for row in F:
coeffs = expand(row).as_coefficients_dict()
A.append([float(coeffs[x]) for x in variables])
b.append(-float(coeffs[1]))
return np.array(A), np.array(b)
A, b = symbolic_to_matrix(M * X - B, [x1, x2, f1])
# A
# array([[ 2., 3., -1.],
# [ 5., 6., 0.],
# [ 8., 9., 0.]])
# b
# array([ -0., 50., 60.])
np.linalg.solve(A, b)
# array([-30. , 33.33333333, 40. ])
# the same answer
RyA, rho1, A, L 등으로 W_2, Phi_2, W_3 등을 표현해야합니다. –
@ IlyaV.Schurov 나는 나 자신이 나쁘지 않다는 것을 알 수있다. 변수는'변수 = [RyA, RMA, W_2, Phi_2, W_3, Phi_3, RyB, Phi_4, W_5, Phi_5] '이므로 일부는 RHS에있는 반면 다른 변수는 RHS에 있습니다. 저는 어떻게해서 num.linalg.solve()를 사용하기 위해 5:30에 첨부 된 비디오 에서처럼 변수를 한쪽에서 다른쪽으로 옮겨야합니다. – skrat
수학적 용어로 시스템을 작성할 수 있습니까 (아마도 단순화 된 형태로)? –