用scipy的fsolve求解方程

时间:2012-05-18 12:28:47

标签: python scipy nonlinear-functions

我正在尝试解决等式f(x) = x-sin(x) -n*t -m0

在此等式中,nm0是我班级中定义的属性。此外,t是等式中的常数整数,但每次都必须改变。

我已经解决了这个等式,所以我得到了一个'新的等式'。我已经导入了scipy.optimize

def f(x, self):
    return (x - math.sin(x) -self.M0 - self.n*t)

def test(self,t):
    return fsolve(self.f, 1, args=(t))

是否有任何更正和建议可以使其发挥作用?

3 个答案:

答案 0 :(得分:4)

我至少可以看到两个问题:您已将参数的顺序混为f,并且您未授予f t import math from scipy.optimize import fsolve class Fred(object): M0 = 5.0 n = 5 def f(self, x, t): return (x - math.sin(x) -self.M0 - self.n*t) def test(self, t): return fsolve(self.f, 1, args=(t)) 的访问权限。这样的事情应该有效:

M0

[请注意,我很懒,并n>>> fred = Fred() >>> fred.test(10) array([ 54.25204733]) >>> import numpy >>> [fred.f(x, 10) for x in numpy.linspace(54, 55, 10)] [-0.44121095114838482, -0.24158955381855662, -0.049951288133726734, 0.13271070588400136, 0.30551399241764443, 0.46769772292130796, 0.61863201965219616, 0.75782574394219182, 0.88493255340251409, 0.99975517335862207] 班级成员

给出:

{{1}}

答案 1 :(得分:1)

您需要像这样定义f()

  def f(self, x, t):
    return (x - math.sin(x) - self.M0 - self.n * t)

换句话说:

  1. self首先出现(它总是这样);
  2. 然后是x;
  3. 的当前值
  4. 然后是你提供给fsolve()的论据。

答案 2 :(得分:0)

您正在使用某种根查找算法。有几个常用,所以知道哪一个是有帮助的。

您需要了解三件事:

  1. 您正在使用的算法
  2. 您找到
  3. 根源的等式
  4. 您正在寻找的初始猜测和范围
  5. 您需要知道某些组合可能没有任何根源。

    可视化感兴趣的功能可能会有所帮助。你有两个:一个线性函数和一个正弦函数。如果你要绘制两个,哪些常量会给你交叉?交叉点是您正在寻找的根。