2016-08-25 21 views
3

この質問の前に、私はそれがよりうまくいくと理解しています。しかし、これは私のクラスの質問であり、私はこのようにアプローチする必要があります。組み込みの関数やパッケージは使用できません。数値2次微分をPythonで近似する

有限差分を使って、与えられた関数の二次導関数の数値を近似する関数を書く必要があります。この機能は以下のとおりです。

2nd Derivative Formula(私は古いアカウントにログイン情報を失ってしまったので、私のポイントが不足していてイメージを含むことができません)。

私の質問はこれです:

私はPythonの関数が導出される入力機能を受け付けるようにする方法を理解していません。誰かが入力に入れた場合2nd_deriv(2x**2 + 4, 6) 2x^2を6で評価する方法はわかりません。

これがわからない場合は、私に再度説明してみてください。 Pythonは私にとって初めてのものなので、私は足を濡らしています。

おかげ

+0

これにはあまりよく慣れていませんが、以前は「exec」を見ていましたが、ユーザー入力からコードをコンパイルすることができます。任意のユーザー入力関数を導出できる関数を記述したい場合は、これが方法です。しかし、あなたの問題が単に入力の解析であれば、これは 'out1 = inputstr.split( '(')'の後に 'out2 = out1 [1] .split( '、')をつけて行うことができます。 '。 – nostradamus

+0

入力の規則は何ですか? –

+0

@ Ev.Kounis教授と話すことなく、それはどんな単一の変数式でもあるようです。 – ct4242

答えて

3

は、あなたが他の「変数」としての機能を渡すことができます。

def f(x): 
    return 2*x*x + 4 

def d2(fn, x0, h): 
    return (fn(x0+h) - 2*fn(x0) + fn(x0-h))/(h*h) 

print(d2(f, 6, 0.1)) 
+0

t 'f'と' fn'のypo –

+0

OPの問題は、一般的なケースで '' 2x^2 + 4''から '2 * x ** 2 + 4'へ行く方法だと思います。 –

+0

その場合は、おそらくこの質問と重複しますhttp://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string – ewcz

0

あなたはリテラル式を渡すことはできません、あなたは関数(またはラムダ)が必要です。 fは、文字列または関数ことができることを考慮に入れるために更新

# using lambda and default value for h 
print d2(lambda x:2x**2+4, 6) 

EDIT

  • def g(x): 
        return 2*x**2 + 4 
    
    # using explicit function, forcing h value 
    print d2(g, 6, 1e-10) 
    

    か、直接それを使用する

    その後
    def d2(f, x0, h = 1e-9): 
        func = f 
        if isinstance(f, str): 
         # quite insecure, use only with controlled input 
         func = eval ("lambda x:%s" % (f,)) 
        return (func(x0+h) - 2*func(x0) + func(x0-h))/(2*h) 
    

+0

OPの問題は、一般的なケースで '' 2x^2 + 4 'から '2 * x ** 2 + 4'へ行く方法だと思います。 –

+0

がfを文字列として扱うように変更されています(しかし、かなり安全ではありません...):http://stackoverflow.com/questions/3513292/python-make-eval-safe – Bruce

+0

ラムダを説明できますか?私はよく知らない。 – ct4242