如何使sin(pi)和cos(pi/2)为零? [英] How to make sin(pi) and cos(pi/2) zero?
问题描述
我知道在Python中sin(pi)
和cos(pi/2)
不会产生0
,但是我正在使用矩阵进行计算,因此需要使用这些值.
I understand that in Python sin(pi)
and cos(pi/2)
won't produce 0
, but I'm making calculations with matrices and I need to use those values.
我正在使用SymPy,起初sin(pi)
和cos(pi/2)
的值有点令人讨厌.经过一些乘法之后,它们开始妨碍您.有没有办法使这些值在整个模块中等于0
?
如何在表达式中间进行更改?
I'm using SymPy and at first the values of sin(pi)
and cos(pi/2)
are a little annoying. After some multiplications they start to get in the way. Is there a way to make those values be equal to 0
in the entire module?
How can I change it in the middle of expressions?
我将使用此矩阵作为示例:
I'll use this matrix as an example:
A = Matrix([
[(-sin(theta1)*sin(theta2)*cos(alpha2) + cos(theta1)*cos(theta2))*cos(theta3) + (-sin(theta1)*cos(alpha2)*cos(theta2) - sin(theta2)*cos(theta1))*sin(theta3)*cos(alpha3) + sin(alpha2)*sin(alpha3)*sin(theta1)*sin(theta3), -(-sin(theta1)*sin(theta2)*cos(alpha2) + cos(theta1)*cos(theta2))*sin(theta3) + (-sin(theta1)*cos(alpha2)*cos(theta2) - sin(theta2)*cos(theta1))*cos(alpha3)*cos(theta3) + sin(alpha2)*sin(alpha3)*sin(theta1)*cos(theta3), -(-sin(theta1)*cos(alpha2)*cos(theta2) - sin(theta2)*cos(theta1))*sin(alpha3) + sin(alpha2)*sin(theta1)*cos(alpha3), a3*(-sin(theta1)*sin(theta2)*cos(alpha2) + cos(theta1)*cos(theta2)) + d2*sin(alpha2)*sin(theta1) - d3*(-sin(theta1)*cos(alpha2)*cos(theta2) - sin(theta2)*cos(theta1))*sin(alpha3) + d3*sin(alpha2)*sin(theta1)*cos(alpha3)],
[(-sin(theta1)*sin(theta2) + cos(alpha2)*cos(theta1)*cos(theta2))*sin(theta3)*cos(alpha3) + (sin(theta1)*cos(theta2) + sin(theta2)*cos(alpha2)*cos(theta1))*cos(theta3) - sin(alpha2)*sin(alpha3)*sin(theta3)*cos(theta1), (-sin(theta1)*sin(theta2) + cos(alpha2)*cos(theta1)*cos(theta2))*cos(alpha3)*cos(theta3) - (sin(theta1)*cos(theta2) + sin(theta2)*cos(alpha2)*cos(theta1))*sin(theta3) - sin(alpha2)*sin(alpha3)*cos(theta1)*cos(theta3), -(-sin(theta1)*sin(theta2) + cos(alpha2)*cos(theta1)*cos(theta2))*sin(alpha3) - sin(alpha2)*cos(alpha3)*cos(theta1), a3*(sin(theta1)*cos(theta2) + sin(theta2)*cos(alpha2)*cos(theta1)) - d2*sin(alpha2)*cos(theta1) - d3*(-sin(theta1)*sin(theta2) + cos(alpha2)*cos(theta1)*cos(theta2))*sin(alpha3) - d3*sin(alpha2)*cos(alpha3)*cos(theta1)],
[sin(alpha2)*sin(theta2)*cos(theta3) + sin(alpha2)*sin(theta3)*cos(alpha3)*cos(theta2) + sin(alpha3)*sin(theta3)*cos(alpha2), -sin(alpha2)*sin(theta2)*sin(theta3) + sin(alpha2)*cos(alpha3)*cos(theta2)*cos(theta3) + sin(alpha3)*cos(alpha2)*cos(theta3), -sin(alpha2)*sin(alpha3)*cos(theta2) + cos(alpha2)*cos(alpha3),a3*sin(alpha2)*sin(theta2) + d2*cos(alpha2) - d3*sin(alpha2)*sin(alpha3)*cos(theta2) + d3*cos(alpha2)*cos(alpha3)],
[0,0,0,1]])
使用SymPy,我将替换为值
with SymPy I'll substitute the value
substitution = A.subs(alpha2, (-pi/2))
,中间会有很多6.12323399573677e-17
.
推荐答案
使用SymPy中的符号pi,而不是math或NumPy模块中的数字pi.这可能是您正在做的事情:
Use the symbolic pi from SymPy, not the numeric pi from math or NumPy modules. This is what you are probably doing:
from sympy import sin, cos
from math import pi
print([sin(pi), cos(pi/2)]) # [1.22464679914735e-16, 6.12323399573677e-17]
这是您应该做的:
from sympy import sin, cos, pi
print([sin(pi), cos(pi/2)]) # [0, 0]
这篇关于如何使sin(pi)和cos(pi/2)为零?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!