【问题标题】:how to solve trigonometric equations on python如何在python上求解三角方程
【发布时间】:2022-12-11 20:26:30
【问题描述】:

我正在尝试用 python 求解 3 个三角方程。我使用了 Sympy 库,但出现了诸如“TypeError: can't convert expression to float”之类的错误

这是我的 Python 源代码:

from sympy import Symbol, solve, Eq
from math import*

# Robot Arm length
L1 = 0
L2 = 97.9
L3 = 120
L4 = 120
L5 = 184

# location
x = L1+L2+L3+L4+L5
y = 0
z = 0

x1 = Symbol('x1',real = True)
x2 = Symbol('x2',real = True)
x3 = Symbol('x3',real = True)

#trigonometric equations

e1= Eq(L1 - (5*sin(x1))/2 - L4*(cos(x1)*sin(x2)*sin(x3) - cos(x1)*cos(x2)*cos(x3)) - L5*(cos(x4)*(cos(x1)*sin(x2)*sin(x3) - cos(x1)*cos(x2)*cos(x3)) + sin(x4)*(cos(x1)*cos(x2)*sin(x3) + cos(x1)*cos(x3)*sin(x2))) + L2*cos(x1) + L3*cos(x1)*cos(x2) - x)
e2= Eq((5*cos(x1))/2 + L4*(cos(x2)*cos(x3)*sin(x1) - sin(x1)*sin(x2)*sin(x3)) + L5*(cos(x4)*(cos(x2)*cos(x3)*sin(x1) - sin(x1)*sin(x2)*sin(x3)) - sin(x4)*(cos(x2)*sin(x1)*sin(x3) + cos(x3)*sin(x1)*sin(x2))) + L2*sin(x1) + L3*cos(x2)*sin(x1) - y)
e3= Eq(-L4*(cos(x2)*sin(x3) + cos(x3)*sin(x2)) - L3*sin(x2) - L5*(cos(x4)*(cos(x2)*sin(x3) + cos(x3)*sin(x2)) + sin(x4)*(cos(x2)*cos(x3) - sin(x2)*sin(x3))) - z)

solve([e,e2,e3],x1,x2,x3)

x1 = degrees(x1)
x2 = degrees(x2)
x3 = degrees(x3)

print("degree values : ",x1,x2,x3)

我添加了我的错误信息:

谁能告诉我应该更改代码中的哪一部分?

【问题讨论】:

  • 我没有在脚本中看到导致错误的行。

标签: python math sympy equation-solving


【解决方案1】:

from math import * 是这里的主要错误。函数math.sinmath.cos 仅用于数值计算,不能给它们符号参数。任何数学函数都必须从 SymPy 导入,以便在符号计算中使用它们。

指南:使用 SymPy 时,不要从 math 导入任何东西。将导入更改为

from sympy import *

将解决大部分问题。您仍然必须定义当前未定义的 x4

【讨论】:

  • 是的。它是这样工作的。我检查了。我知道在这里使用 from math import * 可能是个错误的决定。赞成! @Suyoung 检查这个。它会起作用。
  • 感谢您的回答。它不再向我显示任何错误,但计算方程似乎需要很长时间....
  • @Suyoung 这是一个复杂的非线性方程组。乍一看,我猜它没有解析解。这是一个数学问题,而不是 SymPy 问题。您可以改用 SciPy 找到数值解。v
【解决方案2】:

如果没有看到完整的代码,我不能告诉你,但看起来你在 e3 行的变量“x4”没有在任何地方声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2012-09-27
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多