0

首先,我想计算积分

在此处输入图像描述

然后我想绘制一个函数 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) 
4

1 回答 1

0
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,-np.inf,np.inf,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调用。

于 2021-02-15T07:40:06.537 回答