2 つの NMR データ セットを同時にフィッティングするために symfit を使用しています。パラメータの 1 つでカットオフ ガウス分布を定義しました。次の簡単な例で説明を要約しました。
import symfit as sf
from symfit import parameters, variables, Fit, Model, Ge
from symfit.core.minimizers import BFGS, BasinHopping, NelderMead, DifferentialEvolution
from symfit import GradientModel, CallableModel
xd= [1.1, 3, 5, 7, 9, 11, 14, 19, 25, 32, 44]
yd= [5.5, 8, 11, 14, 18, 22, 28, 35,45, 69, 110]
pi=3.14
x, y = variables('x, y')
a = sf.Parameter('a',value=3)
b = sf.Parameter('b',value=0.7)
sigma= sf.Parameter('sigma',value=0.7)
res=0
norm=0
for i in range(1,5):
atemp= (a + ((i-1)*3*sigma/2))
if atemp < 0:
atemp = 0
gauss= sf.exp(-(atemp-a)**2/(2*(sigma**2)))/sf.sqrt(2*pi*(sigma**2))
res= res+ gauss* (atemp * x + b)
norm= norm + gauss
if i == 4:
firstres= res
firstnorm= norm
res=0
norm=0
funfit = CallableModel({y: (firstres/firstnorm)})
fit = Fit(funfit, x= xd, y=yd, minimizer=[NelderMead, BFGS])
fit_result = fit.execute()
print(" Best-Fit Parameters: ", fit_result)
負の値には物理的な意味がないため、「atemp」が正であることを確認する必要があります。「atemp」がパラメーターであり式であることは知っていますが、このパラメーターの値を取得する必要があります。atemp.evalf() を試しましたが、うまくいきません。次のようなエラーが表示されます:「TypeError: Relational の真の値を判別できません」