Python中OOP积分计算问题

问题描述

首先,我想计算积分

enter image description here

然后我想绘制一个函数 F(x) 但我有以下错误: F() 缺少 1 个必需的位置参数:'t'

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad

x=np.arange(-20,20,0.5)

class NLA():
    def __init__(self,b=-20*10**-15,E=200*10**-9,w0=18*10**-6,t=50*10**-15,s=1.76,A=0.2,L=0.1):
        self.b=b
        self.E=E
        self.w0=w0
        self.t=t
        self.s=s
        self.A=A
        self.L=L
        self.I0=self.s*self.E/(self.t*np.pi*self.w0**2)
        self.a0=(1/self.L)*np.log(10)*self.A
        self.Leff=0.01*(1-np.exp(-self.L*self.a0))/self.a0
        self.c=self.b*self.I0*self.Leff
        
    def f(self,t,x):
        return np.log(1+((self.c*np.exp(-t**2))/(1+self.x**2)))
    
    def F(self,x,t):
        return ((1+x**2)/(self.c*np.pi**(1/2)))*quad(self.f(t),-np.inf,np.inf,args=(x))[0]
    
nla=NLA()
T=nla.F(x) 

解决方法

def F(self,x,t):
    return ((1+x**2)/(self.c*np.pi**(1/2)))*quad(self.f(t),-np.inf,np.inf,args=(x))[0]

改为

def F(self,x):
    temp = quad(self.f,args=(x,))[0]
    return ((1+x**2)/(self.c*np.pi**(1/2)))*temp

quad 应该得到一个函数,在本例中为 self.fquad 将使用集成变量 targs 元组调用它。

我拆分了 temp,所以 quad 调用更容易看到(如果需要调试)。

F 不应将 t 作为参数。

使用 quad 等函数时,请仔细遵循文档。如果有任何令人困惑的地方,请练习其示例。我不认为 OOP 会导致问题,只是所有这些“自我”可能会让您感到困惑,并掩盖了基本的 quad 调用。