lmfit (http://lmfit.github.io/lmfit-py/)이이 용도로 유용 할 수 있습니다. 커브 피팅에 대한 높은 수준의 접근 방식의 일부로 Python 표현식에서 가져온 사용자 정의 모델 함수를 지원하는 ExpressionModel
클래스가 있습니다. 자세한 내용은 http://lmfit.github.io/lmfit-py/builtin_models.html#user-defined-models에서 확인할 수 있습니다. 합니다 (GitHub의에 REPO의 예제 폴더에서 촬영) 간단한 예를 들어 :
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 AST 파서를 사용하여 수학 함수 만 사용되므로 인터넷에서 입력 된 악성 Python 코드가 실행되지 않습니다. –