scipy 求解SymPy方程的数值解

qncylg1j  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在写一些矢量方程,用于求解平面矢量环闭合方程(四个矢量在机构中形成一个环)。
R1=np.array([L1smp.cos(θ 1),L1smp.sin(θ 1)])R2=np.array([L2smp.cos(θ 2),L2smp.sin(θ 2)])R3=np.array([L3smp.cos(θ 3),L3smp.sin(θ 3)])R4=np.array([L4smp.cos(θ 4),L4smp.sin(θ 4)])
i_comps=Eq(R1[0]+R4[0]-R2[0]-R3[0],0)
j_comps=Eq(R1[1]+R4[1]-R2[1]-R3[1],0)
pos_sol=smp.solve([i_comps,j_comps],[theta3,theta4],dict=True)
位置分析很简单。然后我使用Sympy对上述方程进行微分,使用链式法则。这将使我能够求解每个链接的角速度和加速度。这是可行的,但现在我已经耦合了具有导数项的符号方程。下面显示了其中一个方程的示例:
第一个月
我想做的是在符号方程中指定已知值,然后求解$\frac{d\theta}{dt}$。例如,我想插入$\theta1、L1和\frac{d\L1}{dt}$的数值来求解角速度项。我考虑使用Lambdify,但不清楚如何指定导数项,例如$\frac{dL 1}{dT}=0$。

6yjfywim

6yjfywim1#

SymPy将处理“插入”,如果你只是给予它一个具有已知信息的方程列表,例如,如果你想用a=2求解a + b*x,并且ab的总和等于x的负值:

>>> from sympy import *
>>> from sympy.abc import a, b
>>> solve([a + b*x, Eq(a, 2), Eq(a + b, -x)])
[{a: 2, b: -1 + sqrt(3), x: -sqrt(3) - 1}, {a: 2, b: -sqrt(3) - 1, x: -1 + sqrt(3)}]

字符串
在你的例子中,你可以只使用subs来替换已知值,然后也求解未知值。

>>> eq = a + b*x
>>> solve(eq.subs({a:1, b:2}))
[-1/2]


替换符号或导数是相同的:

>>> f=Function('f')
>>> f(x)+f(x).diff(x)
f(x) + Derivative(f(x), x)
>>> _.subs(f(x).diff(x),2).subs(x,3)
f(3) + 2

相关问题