我想解决一个三角方程的系统,我认为Python没有生成正确的解决方案。方程我试图解决:使用python求解三角非线性方程:我做错了什么?
1 - 2cosθ +2cosθ - 2cosθ = -0.8
1 - 2cos5θ +2cos5θ - 2cos5θ = 0
1 - 2cos7θ +2cos7θ - 2cos7θ = 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.241273998673023 e-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)))
,这不打印但打印-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`并获得一系列解决方案?
另一个问题是'fsolve'基于初始值生成解决方案。所以如果我把我的初始值从'(0,0,0)'改变为'(1,1,1),我可能会得到另一个新的解决方案。有没有一种方法可以为每个变量'x,y,z'定义初始值的“范围”并获得一系列解决方案?如果有办法做到这一点,你可以给我建议吗?再次感谢 – 2014-10-06 04:29:37
不幸的是,即使指定了一系列的起始值,仍然没有找到非线性方程的所有解的直接方法。但是,您可以从许多不同的起点开始,并使用for循环记住每个解决方案,例如[解] = [fsolve(方程式,起点),用于[(0,0,0),(1 ,1,1)])' – chthonicdaemon 2014-10-06 06:40:44
请注意,您应该尝试编写该程序,如果遇到问题,您应该提出一个新问题,而不是在评论中提出新问题。 – chthonicdaemon 2014-10-06 06:42:48