我正在尝试解决三角方程系统,我认为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`并获得一系列解决方案?
答案 0 :(得分:2)
您的代码似乎没问题。它会在最后打印错误,而不是解决方案。实际上,您通过在最后两行中使用fsolve
找到的答案调用方程来检查解决方案。如果要查看变量的值,可以执行print x, y, z
。