我正在尝试替换 sympy 中的符号并获得一个浮点数作为方程组的结果。
主要目标是输入不同的力(f1,f1,...)及其与 x 轴的角度并计算合力。因此我需要一个方程组然后求解它。因为这是为了学校,我需要知道公式而不仅仅是结果。
我尝试隔离问题,但隔离后似乎效果很好。
from sympy import *
f1, f2, f3 = symbols(['f1', 'f2', 'f3'])
# Result of other calcuations
x_dir = sqrt(2)*f1/2 - f2 + sqrt(3)*f3/2
x_dir = x_dir.subs([(f1, 5), (f2, 3), (f3, 4)])
print(x_dir)
在更大的上下文中,相同的代码会导致 SympifyError。
from sympy import *
from math import radians
# ===== Berechnungen im 2D-Raum ======
# == Definiere alle Kräfte ==
# Name der Kraft (Variable), Winkel von ---> x-Achse in positive Richtung (nach oben positiv, nach unten negativ)
Rx = Symbol('Rx')
Ry = Symbol('Ry')
# fg = [symbols('fg'), -90]
f1 = [Symbol('f1'), 45]
f2 = [Symbol('f2'), 180]
f3 = [Symbol('f3'), -30]
all_forces = [f1, f2, f3]
def forces_to_equations(all_forces):
x_dir = []
y_dir = []
for force in all_forces:
vec_force = kraft_winkel_zu_vektor(force[0], force[1])
x_dir.append(vec_force[0])
y_dir.append(vec_force[1])
x_dir = sum(x_dir)
y_dir = sum(y_dir)
return x_dir, y_dir
def deg_to_rad(alpha):
alpha = alpha%360
deg = [30, 45, 60, 90, 120, 135, 150, 180, 210, 225, 240, 270, 300, 315, 330, 360]
rad = [pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6, pi, 7*pi/6, 5*pi/4, 4*pi/5, 3*pi/2, 5*pi/3, 7*pi/4, 11*pi/6, 2*pi]
if alpha in deg:
angle = rad[deg.index(alpha)]
else:
angle = radians(alpha)
return angle
def kraft_winkel_zu_vektor(force, alpha):
vec = [force*cos(deg_to_rad(alpha)), force*sin(deg_to_rad(alpha))]
return vec
x_dir, y_dir = forces_to_equations(all_forces)
print(solve([x_dir-Rx, y_dir-Ry], [Rx, Ry]))
# ===== This is causing an SympifyError ======
x_dir = x_dir.subs([(f1, 5), (f2, 3), (f3, 4)])
print(solve([x_dir-Rx, y_dir-Ry], [Rx, Ry]))
有什么想法可以解决这个问题吗?
在“更大”的上下文中,您从未将
f1
、f2
和 f3
定义为符号(就像您在第一个示例中所做的那样)。它们是带有符号和数字的列表。
一个快速解决方法是在您需要它的行之前执行此操作:
f1, f2, f3 = symbols(['f1', 'f2', 'f3'])
x_dir = x_dir.subs([(f1, 5), (f2, 3), (f3, 4)])
print(solve([x_dir-Rx, y_dir-Ry], [Rx, Ry]))
您将获得所需的输出。