Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使sin(pi)和cos(pi/2)为零?_Python_Matrix_Sympy - Fatal编程技术网

Python 如何使sin(pi)和cos(pi/2)为零?

Python 如何使sin(pi)和cos(pi/2)为零?,python,matrix,sympy,Python,Matrix,Sympy,我知道在Python中,sin(pi)和cos(pi/2)不会产生0,但我正在使用矩阵进行计算,我需要使用这些值 我使用的是SymPy,一开始sin(pi)和cos(pi/2)的值有点烦人。经过一些乘法运算后,它们开始碍事了。是否有办法使整个模块中的这些值等于0? 如何在表达式中间改变它? 我将以该矩阵为例: A = Matrix([ [(-sin(theta1)*sin(theta2)*cos(alpha2) + cos(theta1)*cos(theta2))*cos(theta3) + (

我知道在Python中,
sin(pi)
cos(pi/2)
不会产生
0
,但我正在使用矩阵进行计算,我需要使用这些值

我使用的是SymPy,一开始
sin(pi)
cos(pi/2)
的值有点烦人。经过一些乘法运算后,它们开始碍事了。是否有办法使整个模块中的这些值等于
0
? 如何在表达式中间改变它? 我将以该矩阵为例:

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替换这个值

substitution = A.subs(alpha2, (-pi/2))

<>和我将有很多<代码> .61232437.57 367E-17</代码>中间。

你总是可以做一个函数!差不多

from math import sin as oldsin

def sin(x):
    if x % pi == 0: 
        #if x is an integer mult of pi, like pi, 2pi, -7pi, etc.
        return 0
    else:
        return oldsin(x)

你总是可以做一个函数!差不多

from math import sin as oldsin

def sin(x):
    if x % pi == 0: 
        #if x is an integer mult of pi, like pi, 2pi, -7pi, etc.
        return 0
    else:
        return oldsin(x)

使用SymPy中的符号pi,而不是数学或NumPy模块中的数字pi。这是您可能正在做的:

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]

使用SymPy中的符号pi,而不是数学或NumPy模块中的数字pi。这是您可能正在做的:

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]

lmao,我想我的眼睛快死了xD也许可以试着解释矩阵想要完成什么,而不是复制粘贴这个怪物?呵呵,对不起,伙计们,我这么做是为了展示如果我得到的值是6.12323399573677e-17,它会变得多大…输入:
sin(pi)
。输出:
0
。你确定你的角度是π的有理倍数吗?lmao,我想我的眼睛快死了xD,也许可以试着解释一下矩阵想要实现什么,而不是复制粘贴这个怪物?呵呵,对不起,伙计们,我这样做是为了显示如果我得到的值是6.12323399573677e-17,它会变得多大…输入:
sin(π)
。输出:
0
。你确定你的角度是π的有理倍数吗?这对舍入误差和类似误差来说是不可靠的。例如,你得到
sin(11*math.pi)!=0
@Wrzlprmft啊,说得好!糟糕的是,我是用我的数学大脑思考的,而不是我的CS大脑。这对舍入错误和类似错误来说是不可靠的。例如,你得到
sin(11*math.pi)!=0
@Wrzlprmft啊,说得好!糟糕的是,我是用我的数学大脑思考的,而不是用我的CS大脑