fsolve Python函数,增量bug

时间:2017-07-21 17:27:12

标签: python scipy system

我正在尝试使用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)

其中FaFb et alphae1e2和数字的函数。 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,它们会立即跳到第二个值的极值,阻碍收敛......因此结果远非相关。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

我无法重现您的代码,因为我没有所有常量。在不知道问题的具体细节的情况下,我无法确定,但我猜这里数值问题很可能

fsolve是一个在数值分析中实现算法的函数,它迭代到近似解。在某种意义上,如果用户没有针对特定问题使用正确的设置,或者如果特定的算法选择不适合该问题,则数值算法可能会“敏感”,可能会导致错误。

  • 你的出发点可能不好 - 数值算法对起点的选择非常敏感。
  • 你的xtol可能太小了 - 这会导致算法迭代中的小步长,这会阻止收敛,并导致数值误差(例如舍入误差)累积。