【问题标题】:fsolve Python function, increment bugfsolve Python 函数,增加错误
【发布时间】: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)

其中FaFbalphae1e2 和数字的函数。 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 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
  • 一个想法:尝试找到更好的初始猜测,使用某种搜索在第一次迭代时不会发散。也许在第一轮后停止迭代以加快搜索速度。

标签: python scipy system


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我会在星期一提供更多信息。周末愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多