0

我正在尝试解方程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))

有什么更正和建议可以让它发挥作用吗?

4

3 回答 3

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))

[注意我是懒惰M0n班员]

这使:

>>> 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]
于 2012-05-18T12:45:49.100 回答
1

您需要f()像这样定义:

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

换句话说:

  1. self先到先得(总是如此);
  2. 然后是x;的当前值
  3. 然后是你提供的论点fsolve()
于 2012-05-18T12:46:24.917 回答
0

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

你需要知道三件事:

  1. 您正在使用的算法
  2. 你正在寻找根源的方程
  3. 您正在查找的初始猜测和范围

您需要知道某些组合可能没有任何根。

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

于 2012-05-18T12:32:42.687 回答