I think you have to adjust the matrix of your problem to take care of RyA and other variables that on the right-hand side. You can also solve that manually or you can use sympy instead of np.linalg.solve() which can do the algebra section of the problem:
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}
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
the variable 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. ])
Interested in learning Python? Enroll in our Python Course now!