Python 用scipy'求解方程;斯夫索尔夫酒店

Python 用scipy'求解方程;斯夫索尔夫酒店,python,scipy,nonlinear-functions,Python,Scipy,Nonlinear Functions,我试图解方程f(x)=x-sin(x)-n*t-m0 在这个等式中,n和m0是在我的类中定义的属性。此外,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)) 有什么修正和

我试图解方程
f(x)=x-sin(x)-n*t-m0

在这个等式中,
n
m0
是在我的类中定义的属性。此外,
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))

有什么修正和建议可以让它工作吗?

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

你需要知道三件事:

  • 你正在使用的算法
  • 你找到的方程的根
  • 您正在查看的初始猜测和范围
  • 您需要知道,某些组合可能没有任何根


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

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

    你需要知道三件事:

  • 你正在使用的算法
  • 你找到的方程的根
  • 您正在查看的初始猜测和范围
  • 您需要知道,某些组合可能没有任何根


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

    我至少可以看到两个问题:您混淆了
    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]
    

    我至少可以看到两个问题:您混淆了
    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]
    
    您需要这样定义
    f()

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

  • self
    是第一位的(它总是这样)
  • 然后是
    x的当前值
  • 然后是提供给
    fsolve()
    的参数
  • 您需要这样定义
    f()

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

  • self
    是第一位的(它总是这样)
  • 然后是
    x的当前值
  • 然后是提供给
    fsolve()
    的参数

  • 你能给我们一个完整的例子,包括这个“不起作用”的例子吗?我想我以前从未见过
    f(x,self)
    。。第一个参数将获得实例,不管您如何称呼它。它是使用scipy.optimize中的fsolve实现的。主要问题是它必须在类中完成。这就是为什么我需要在f(x,self)中定义方程的原因。我需要消除的第一个错误是TypeError:func()正好有2个参数(给定3个),所以它可能与args=(t)有关,因为在我添加之前,它没有给出那个错误。你能给我们一个完整的例子,包括这个“不起作用”吗?我想我以前从未见过
    f(x,self)
    。。第一个参数将获得实例,不管您如何称呼它。它是使用scipy.optimize中的fsolve实现的。主要问题是它必须在类中完成。这就是为什么我需要在f(x,self)中定义方程的原因。我需要消除的第一个错误是TypeError:func()正好需要2个参数(给定3个),所以它可能与args=(t)有关,因为在我添加之前,它没有给出错误。主要问题是它必须在类中完成。这就是为什么我需要定义f(x,self)中的方程,主要问题是它必须在一个类中完成。这就是为什么我需要定义f(x,self)中的方程。