NameError: имя 'Integral' не определено - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу подогнать график, используя функцию, которая включает интеграцию. Я не использовал функцию sympy.Integral(), но есть такая ошибка:

File "<lambdifygenerated-11>", line 4, in _lambdifygenerated

    0.203002924854919*sqrt(2)*(-1.0 + 0.346880560655606*pi)*(exp(t/Kef) - 1)*exp(-t/Kef)*Integral(exp(log(D)**2), (D, 1.0, 10.0))/pi**(3/2))

NameError: name 'Integral' is not defined

Код:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
import sympy as sp

xs=np.arange(0.1,10,0.5)
ys=np.log(xs)

D,Kef,t=sp.symbols('D, Kef, t',real=True)
Dm=float(input("Diâmetro Médio="))
s=float(input("Desvio Padrão="))
T=float(input("Temperatura="))
u0=float(input("Permeabilidade magnética do meio="))
Ms=float(input("Magnetização de Saturação="))
H=1
Kb=1
r=Dm/2
V=(4/3)*sp.pi*r**3
m=u0*H*Ms*V/(Kb*T)
L=sp.coth(m).evalf()-1/m
f=(sp.exp(-2*s**2)/(Dm*s*sp.sqrt(2*sp.pi)))*(sp.exp((sp.ln(D/Dm)**2)))/(2*s**2)
Rel=1-sp.exp(-t/Kef)
ma1=sp.integrate(f*L*Rel,(D,1/Dm,10*Dm))
ma=sp.lambdify((t,Kef),ma1)

xFit=np.arange(0,10.01,0.01)
popt, pcov=curve_fit(ma,xs,ys)
plt.scatter(xs,ys)
plt.plot(xFit,ma(xFit,*popt),color="r")
print(popt[0])

Я ценю любые советы. Спасибо.

1 Ответ

0 голосов
/ 30 апреля 2020

Попробуйте упростить ma1, прежде чем упаковывать его в lambdify.

ma1=sp.integrate(f*L*Rel,(D,1/Dm,10*Dm))
ma1.sp = simplify(ma1)
ma=sp.lambdify((t,Kef),ma1)
...