【发布时间】:2017-07-22 01:54:55
【问题描述】:
我正在尝试使用scipy.optimize 函数fsolve 求解一个四非线性方程组。
def equations(p):
e1, e2, F, B = p
Eq_F1 = (-F + Fa(4, e1, e2) + Fa(5,e1, e2) - A1*Acc1(e1, e2))
Eq_T1 = (F*L + Fa(4,e1, e2)*A2 + Fa(5, e1, e2)*A3
Eq_F2 = (Fb(1, e1, B)*A4*math.cos(B) + Fb(2,e1)*A5 + Fb(3,e1)*A6 + F*np.cos(alpha(e1, e2))- A7*Acc2)
Eq_T2 = (Fb(1,e1, B)*math.cos(B)*A8- F*np.cos(alpha(e1, e2))*A9- Fb(2,e1)*A10- Fb(3,e1)*A11
return (Eq_F1, Eq_T1, Eq_F2, Eq_T2)
其中Fa、Fb 和alpha 是e1、e2 和数字的函数。
Ai 是我引入的常量,目的是让您了解系统的全局。
我解决系统如下:
e1, e2, F, B = fsolve(equations,(0.3,5,100,0.1), xtol=1.49012e-14)
知道我的问题,第一个猜测是合理的。
给出的结果是假的,我在方程函数中引入了print(e1, e2, F, B)。多么惊喜!
如果第一个值是0.3, 5, 100, 0.1,它们会立即跳到第二个值的极值,从而阻碍收敛......因此结果变得不相关。
有人有想法吗?
【问题讨论】:
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
-
一个想法:尝试找到更好的初始猜测,使用某种搜索在第一次迭代时不会发散。也许在第一轮后停止迭代以加快搜索速度。