用线性元在均匀网格下求解边值问题(3.1)的数值解:− y ′′ + π 2 4 y = π 2 2 sin π 2 x, 0 < x < 1 y(0) = 0, y′ (1) = 0
时间: 2024-06-04 22:13:44 浏览: 89
一维边值问题线性有限元数值解法的matlab程序。有详尽的算法分析
5星 · 资源好评率100%
我们采用线性元方法来求解该边值问题。首先将区间 $[0,1]$ 均匀地划分成 $N$ 个小区间,每个小区间的长度为 $h = \frac{1}{N}$。然后在每个小区间上引入一个线性函数来近似原函数的行为,这个线性函数的表达式为:
$$
y_i(x) = \frac{y_{i+1}-y_i}{h}(x-x_i)+y_i,\quad x_i\leq x \leq x_{i+1},
$$
其中 $y_i$ 表示在 $x_i$ 处的近似解,$i=0,1,2,...,N$。将这些近似函数拼接起来,就构成了整个区间上的近似解 $y(x)$。
接下来,我们需要确定近似解中的未知系数 $y_i$。为此,我们需要将原方程和边界条件都带入到近似解中,然后将这些方程化为 $y_i$ 的线性方程组。具体来说,我们需要考虑以下三个方程:
(1)在每个小区间内,原方程的积分等于近似解的积分,即
$$
-\int_{x_i}^{x_{i+1}}y_i''(x)\mathrm{d}x = \int_{x_i}^{x_{i+1}}\frac{\pi^2}{4}y_i(x)\mathrm{d}x -\int_{x_i}^{x_{i+1}}\frac{\pi^2}{2}\sin\frac{\pi}{2}x\mathrm{d}x,\quad i=0,1,2,...,N-1.
$$
(2)边界条件 $y(0)=0$,即 $y_0=0$。
(3)边界条件 $y'(1)=0$,即
$$
\frac{y_{N}-y_{N-1}}{h}=0.
$$
将第一个方程中的 $y_i$ 用它们的表达式来代替,然后对积分进行近似,我们就得到了一个关于 $y_i$ 的线性方程组:
$$
\begin{pmatrix}
2 & -1 & 0 & \cdots & 0 & 0 \\
-1 & 2 & -1 & \cdots & 0 & 0 \\
0 & -1 & 2 & \cdots & 0 & 0 \\
\vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\
0 & 0 & 0 & \cdots & 2 & -1 \\
0 & 0 & 0 & \cdots & -1 & 1
\end{pmatrix}
\begin{pmatrix}
y_0 \\ y_1 \\ y_2 \\ \vdots \\ y_{N-1} \\ y_N
\end{pmatrix}
=
\begin{pmatrix}
h\int_{0}^{h}\frac{\pi^2}{4}\sin\frac{\pi}{2}x\mathrm{d}x \\
h\int_{h}^{2h}\frac{\pi^2}{4}\sin\frac{\pi}{2}x\mathrm{d}x \\
h\int_{2h}^{3h}\frac{\pi^2}{4}\sin\frac{\pi}{2}x\mathrm{d}x \\
\vdots \\
h\int_{(N-1)h}^{Nh}\frac{\pi^2}{4}\sin\frac{\pi}{2}x\mathrm{d}x \\
0
\end{pmatrix}
+
\begin{pmatrix}
0 \\ 0 \\ 0 \\ \vdots \\ 0 \\ \frac{\pi}{2}
\end{pmatrix}.
$$
其中,第一个向量是由原方程右侧的积分部分得到的,第二个向量是由边界条件得到的。
现在,我们可以使用任何一种数值线性代数方法来求解这个线性方程组,例如高斯消元法、LU 分解法、迭代法等等。在本例中,我们使用 Python 中的 numpy 库提供的 solve 函数来求解这个方程组。具体来说,我们可以按照以下步骤进行求解:
(1)定义一个函数,用来计算线性方程组的系数矩阵和右侧向量。
(2)调用 numpy 的 solve 函数,求解线性方程组。
(3)将求解结果转换为一个数组,然后在每个小区间内计算近似解的值。
(4)将近似解的值画出来,以便于我们观察它的行为。
下面是完整的 Python 代码:
阅读全文