我导出了一些带有变量的方程。我想解一个未知变量。我用的是Sympy。我的代码如下:
import sympy as syp
import math as m
#this is the unknown variable that I want to find
C0 = syp.Symbol('C0')
#Known variables
D0 = 0.874
theta2 = 10.0
fi2 = 80.0
theta1 = (theta2/180.0)*m.pi
fi1 = (fi2/180.0)*m.pi
#Definitions of 6 different equations all of them in respect to CO.
C_t = 5*m.pi*(D0+4*C0)
St123 = 1.5*theta1*(D0+2*C0)
St45 = fi1*(D0+7*C0)
l1 = syp.sqrt((0.5*(D0+4*C0)-0.5*D0*m.cos(theta1))**2 + (0.5*D0*m.sin(theta1))**2)
l2 = syp.sqrt((0.5*(D0+6*C0)-0.5*(D0+2*C0)*m.cos(theta1))**2 + (0.5*(D0+2*C0)*m.sin(theta1))**2)
l3 = syp.sqrt((0.5*(D0+8*C0)-0.5*(D0+4*C0)*m.cos(theta1))**2 + (0.5*(D0+4*C0)*m.sin(theta1))**2)
#Definition of the general relationship between the above functions. Here C0 is unknown and C_b
C_b = C_t + 6*C0 + 3*(l1+l2+l3) - 3*St123 - 3*St45
#for C_b = 10.4866, find C0
syp.solve(C_b - 10.4866, C0)
如前所述,我想解决C_b与C0的关系。直到最后一行我的代码可以正常工作。当我运行整个脚本时,似乎要花很长时间才能计算出C0。我没有任何警告信息,但我也没有任何解决办法。有人会提出一个替代方案或可能的解决方案吗?事先非常感谢。在
正如我在一篇评论中提到的,这个问题本质上是数值问题,所以最好用numpy/scipy来解决它。尽管如此,这是一个有趣的例子,如何在sympy中进行数字运算,所以这里有一个建议的工作流程。在
首先,如果不是因为这里表达式的相对复杂性,scipy绝对是比sympy更好的选择。但是表达式相当复杂,因此我们可以先在
sympy
中简化它,然后再将其馈送给scipy
:既然你对符号学不感兴趣,而且简化也不是那么好,那么继续使用sympy而不是scipy是没有用的,但是如果你坚持你可以做到的话。在
^{pr2}$如果您试图使用
solve
而不是nsolve
,那么当一个数字解是瞬时的时,您将浪费大量资源来寻找符号解(可能根本就不存在)。在相关问题 更多 >
编程相关推荐