首页 > 解决方案 > 使用python的有限差分法的向量化版本

问题描述

我需要在python中实现有限差分法。但是,我想使用矢量化版本来做到这一点。我想解方程'dA(z,t)/dz = - alpha*A(z,t)'。其中z,t是函数A的空间坐标和时间坐标。它被认为是一个向量。

我已经初始化了 A0 = a0*np.exp(-(t/t0)**2) 这是一个高斯场。我实现了一个执行有限差分法的函数(使用中心欧拉公式)。

    A0 = a0*np.exp(-(t/t0)**2)
    def fd_1d(alpha=0.5, L, h):
        L = 5  # the length of propagation
        h = 0.5  # stepsize
        initfield = A0  # initial field
        for i,j in enumerate(np.arange(0,self.L + 0.5 , 0.5)):
                initfield[:][i+1] = initfield[:][i-1] - 2*(0.5)*(alpha)*initfield[:][i]
            return initfield

我想要做的是将新向量(即 initfield[:][i+1])定义为旧向量的函数(即 initfield[:][i-1],initfield[:][i] )。但是它似乎不起作用,因为它不执行整个矢量场的减法。它逐点进行减法。有谁知道如何使用矢量化版本执行此操作。

谢谢您的帮助

标签: pythonvectorizationdifferencedifferential-equations

解决方案


推荐阅读