0

私は方程式を解こうとしています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))

それを機能させるための修正や提案はありますか?

4

3 に答える 3

4

少なくとも2つの問題があります。引数の順序を混同していることと、へのアクセスを許可しfていないことです。このようなものが機能するはずです:ft

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]
于 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

ある種の求根アルゴリズムを使用しています。一般的に使用されているものはいくつかあるので、どれを知っておくと役に立ちます。

あなたは3つのことを知る必要があります:

  1. 使用しているアルゴリズム
  2. あなたがルーツを見つけている方程式
  3. あなたが探している最初の推測と範囲

一部の組み合わせにはルーツがない場合があることを知っておく必要があります。

関心のある機能を視覚化すると役立つ場合があります。線形関数と正弦関数の2つがあります。2つをプロットする場合、どの定数のセットが交差点を与えますか?交差点はあなたが探しているルートです。

于 2012-05-18T12:32:42.687 に答える