使用python解决三角非线性方程:我做错了什么?

时间:2014-10-06 03:59:49

标签: python math equation-solving

我正在尝试解决三角方程系统,我认为Python没有生成正确的解决方案。我试图解决的方程式:

  • 1 - 2cosθ 1 +2cosθ 2 - 2cosθ 3 = -0.8

  • 1 - 2cos5θ 1 +2cos5θ 2 - 2cos5θ 3 = 0

  • 1 - 2cos7θ 1 +2cos7θ 2 - 2cos7θ 3 = 0

我的Python代码:

from scipy.optimize import fsolve
import math
import numpy as np

def equations(p):
    x,y,z = p
    f1 = (1 - 2*math.cos(math.radians(x)) + 2*math.cos(math.radians(y)) - 2*math.cos(math.radians(z)) + 0.8)
    f2 = (1 - 2*math.cos(math.radians(5*x)) + 2*math.cos(math.radians(5*y)) - 2*math.cos(math.radians(5*z)))
    f3 = (1 - 2*math.cos(math.radians(7*x)) + 2*math.cos(math.radians(7*y)) - 2*math.cos(math.radians(7*z)))
    return (f1,f2,f3)

x,y,z = fsolve(equations,(0,0,0))

print equations((x,y,z))

打印出来:

  

( - 1.9451107391432743e-13,4.241273998673023e-12,-1.5478729409323932e-12)

这是错误的,因为我使用以下方法检查:

print (1 - 2*math.cos(math.radians(5*-1.9451107391432743e-13)) + 
           2*math.cos(math.radians(5*4.241273998673023e-12)) - 
           2*math.cos(math.radians(5*-1.5478729409323932e-12)))

并且不会打印 0 ,但会打印 -1 。谁能告诉我我在这里做错了什么?

另一个问题是fsolve根据初始值生成解决方案。那么,如果我将初始值从(0,0,0)更改为(1,1,1), I might get another new solution. Is there a way I can define a "range" of initial values for each variable x,y,z`并获得一系列解决方案?

1 个答案:

答案 0 :(得分:2)

您的代码似乎没问题。它会在最后打印错误,而不是解决方案。实际上,您通过在最后两行中使用fsolve找到的答案调用方程来检查解决方案。如果要查看变量的值,可以执行print x, y, z