用有限差分法修正拉普拉斯算子的特征函数

计算科学 有限差分 Python 特征值 本征系统 拉普拉斯算子
2021-12-16 14:15:28

我正在尝试计算拉普拉斯算子的特征函数,即找到u

2u=λu.

现在我正试图在一维中做到这一点,所以

2=xx.

我正在使用有限差分法。我的边界条件是u=0x=1,1. 这是我的代码和结果:

import numpy as np
from scipy.sparse.linalg import eigs
import matplotlib.pyplot as plt

n = 200
h = 2/(n-1)     # domain for x and y is [-1, 1]

L = np.diag(np.ones(n-1), k=-1) + np.diag(-2*np.ones(n)) + \
        np.diag(np.ones(n-1), k=1)
L *= -1/h**2

eigvals, eigvecs = eigs(L)

eig = np.real(eigvecs[:, 0])

x = np.linspace(-1, 1, num=n)

plt.plot(x, eig)
plt.show()

结果图

谁能看到我做错了什么,或者就如何修复我的代码提出建议?

1个回答

例如,您应该使用 指定您想要的特征值which="SM"

检查以下代码段。我还更改了求解器,因为您的系统是对称的。

import numpy as np
from scipy.sparse.linalg import eigsh
import matplotlib.pyplot as plt

n = 200
h = 2/(n-1)     # domain for x and y is [-1, 1]

L = np.diag(np.ones(n-1), k=-1) - np.diag(2*np.ones(n)) + \
        np.diag(np.ones(n-1), k=1)
L = -L/h**2

eigvals, eigvecs = eigsh(L, which="SM")

eig = eigvecs[:, 0]

x = np.linspace(-1, 1, num=n)

plt.plot(x, eig)
plt.show()

在此处输入图像描述