lmfit(http://lmfit.github.io/lmfit-py/)がこの目的に役立つ場合があります。カーブフィッティングに対する高度なアプローチの一環として、Python式から取得したユーザー定義モデル関数をサポートするExpressionModel
クラスがあります。詳細は http://lmfit.github.io/lmfit-py/builtin_models.html#user-defined-modelsにあります。 (githubのレポの例フォルダから取られた)簡単な例として:
import numpy as np
import matplotlib.pyplot as plt
from lmfit.models import ExpressionModel
x = np.linspace(-10, 10, 201)
amp, cen, wid = 3.4, 1.8, 0.5
y = amp * np.exp(-(x-cen)**2/(2*wid**2))/(np.sqrt(2*np.pi)*wid)
y = y + np.random.normal(size=len(x), scale=0.01)
gmod = ExpressionModel('amp * exp(-(x-cen)**2 /(2*wid**2))/(sqrt(2*pi)*wid)')
result = gmod.fit(y, x=x, amp=5, cen=5, wid=1)
print(result.fit_report())
plt.plot(x, y, 'bo')
plt.plot(x, result.init_fit, 'k--')
plt.plot(x, result.best_fit, 'r-')
plt.show()
は
[[Model]]
Model(_eval)
[[Fit Statistics]]
# function evals = 54
# data points = 201
# variables = 3
chi-square = 0.019
reduced chi-square = 0.000
Akaike info crit = -1856.580
Bayesian info crit = -1846.670
[[Variables]]
amp: 3.40478705 +/- 0.005053 (0.15%) (init= 5)
cen: 1.79930413 +/- 0.000858 (0.05%) (init= 5)
wid: 0.50051059 +/- 0.000858 (0.17%) (init= 1)
[[Correlations]] (unreported correlations are < 0.100)
C(amp, wid) = 0.577
の結果をプリントアウトし、ちょうどであることを
のプロットを生成しますclear:astevalモジュール(https://newville.github.io/asteval/)を使用して、平文eval
を使用して公開される悪意のあるユーザー入力からできるだけ安全な方法でユーザー入力を解析して評価します。
独立変数とは何か、そして上の方程式にはどのようなパラメータが当てはまるのですか? – Goyo
私は、異なる形式で方程式を指定するようにユーザーに頼むことができます。例えば"[m]、[y =((m^2/c^4)* 2)^ 0.5]"である。このようにして、ユーザは私のために独立変数を指定しました –
http://zunzun.com/Equation/2/UserDefinedFunction/UserDefinedFunction/にPythonオープンソースの例があります。ソースコードを参考にして自身の仕事。ソースコードへのリンクは、Webページの一番下にあります。 Python ASTパーサを使用して数学関数のみを使用するため、インターネットから入力された悪意のあるPythonコードは実行されません。 –