【问题标题】:Double integral with function and sampled data Python与函数和采样数据 Python 的双积分
【发布时间】:2016-09-19 03:32:18
【问题描述】:

我正在寻找一种使用 numpy trapz 或 scipy 堆栈中的类似函数对采样数据执行双重积分的方法。

特别想计算函数:

其中f(x',y') 是采样数组,F(x, y) 是相同维度的数组。

这是我的尝试,结果不正确:

def integrate_2D(f, x, y):
    def integral(f, x, y, x0, y0):
        F_i = np.trapz(np.trapz(np.arcsinh(1/np.sqrt((x-x0+0.01)**2+(y-y0+0.01)**2)) * f, x), y)
        return F_i
    sigma = 1.0
    F = [[integral(f, x, y, x0, y0) for x0 in x] for y0 in y]
    return F

xlin = np.linspace(0, 10, 100)
ylin = np.linspace(0, 10, 100)
X,Y = np.meshgrid(xlin, ylin)

f = 1.0 * np.exp(-((X - 8.)**2 + (Y - 8)**2)/(8.0))
f += 0.5 * np.exp(-((X - 1)**2 + (Y - 9)**2)/(10.0))

F = integrate_2D(f, xlin, ylin)

输出数组似乎朝向结果网格的对角线,而它应该返回一个看起来像模糊输入数组的数组。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我可以看到您要执行的操作,但是嵌套隐藏了逻辑。试试这样的,

    def int_2D( x, y, xlo=0.0, xhi=10.0, ylo=0.0, yhi=10.0, Nx=100, Ny=100 ):
    
        # construct f(x,y) for given limits
        #-----------------------------------
        xlin = np.linspace(xlo, xhi, Nx)
        ylin = np.linspace(ylo, yhi, Ny)
        X,Y = np.meshgrid(xlin, ylin)
    
        f = 1.0 * np.exp(-((X - 8.)**2 + (Y - 8)**2)/(8.0))
        f += 0.5 * np.exp(-((X - 1)**2 + (Y - 9)**2)/(10.0))
    
        # construct 2-D integrand
        #-----------------------------------
        m = np.sqrt( (x - X)**2 + (y - Y)**2 )
        y = 1.0 / np.arcsinh( m ) * f
    
        # do a 1-D integral over every row
        #-----------------------------------
        I = np.zeros( Ny )
        for i in range(Ny):
            I[i] = np.trapz( y[i,:], xlin )
    
        # then an integral over the result
        #-----------------------------------    
        F = np.trapz( I, ylin )
    
        return F
    

    【讨论】:

    • 是的!而已。我希望我可以添加一些图像来展示它的样子!
    猜你喜欢
    • 2015-12-22
    • 2022-01-04
    • 2013-08-24
    • 2021-01-03
    • 2018-12-27
    • 2022-01-13
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多