los den lineare differensiallikningen ved bruk av differansemetoder: $$ \begin{equation} \label{eq:cos} \begin{array}{l} y''(x) + y(x) = 0\\ y(0) = -1 \ , \ y(\pi) = 1 \end{array} \end{equation} $$
ved bruk av sentraldifferanser $$ \begin{equation*} \frac{y_{i+1}-2y_i+y_{i-1}}{h^2} + y_i = 0 \end{equation*} $$
eller ordnet: $$ \begin{equation*} y_{i-1} + \left(h^2 - 2\right)y_i + y_{i+1} = 0 \end{equation*} $$
Bruk gjerne scriptet nedenfor som mal:
# src-ch3/oppg1.py
import matplotlib
import matplotlib.pylab as plt
import numpy as np
import scipy
import scipy.sparse
import scipy.sparse.linalg
LNWDT=3; FNT=20
plt.rcParams['lines.linewidth'] = LNWDT; plt.rcParams['font.size'] = FNT
N = 9
x = np.linspace(0, np.pi, N + 2)
h = x[1] - x[0]
A = scipy.sparse.diags([], [], shape=(N, N), format='csc')
d =
d[0] =
d[-1] =
yNum = scipy.sparse.linalg.spsolve()
yNum = np.append(-1, yNum) # add boundaries
yNum = np.append(yNum, 1)
plt.figure()
plt.plot(x, -np.cos(x), 'k')
plt.plot(x, yNum, 'r--')
plt.legend(['-cos(x)', 'numeric'], loc='best', frameon=False)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
los den ikke-lineare differensiallikningen ved bruk av ettersleps metoden: $$ \begin{equation*} \begin{array}{l} y''(x) = 2y(x)y'(x)\\ y(0) = 0 \ , \ y(\frac{\pi}{4}) = 1 \end{array} \end{equation*} $$
ved bruk av sentraldifferanser paa baade y'' og y': $$ \begin{equation*} \frac{y_{i+1}-2y_i+y_{i-1}}{h^2} = 2y_i \left(\frac{y_{i + 1} - y_{i-1}}{2h}\right) \end{equation*} $$
som videre gir: $$ \begin{equation*} y_{i+1}-2y_i+y_{i-1} = h y_i \left(y_{i + 1} - y_{i-1}\right) \end{equation*} $$
Los ved aa bruke forrige verdi av \( y \) paa hele det ikke-lineare leddet \( 2y_i \left(\frac{y_{i + 1} - y_{i-1}}{2h}\right) \)
Bruk gjerne scriptet nedenfor som mal:
# src-ch3/oppg2.py
import matplotlib
import matplotlib.pylab as plt
import numpy as np
import scipy
import scipy.sparse
import scipy.sparse.linalg
LNWDT=3; FNT=20
plt.rcParams['lines.linewidth'] = LNWDT; plt.rcParams['font.size'] = FNT
N = 9
x = np.linspace(0, np.pi/4., N + 2)
h = x[1] - x[0]
yp_full = np.linspace(0, 1, N + 2)
yp = yp_full[1:-1]
A = scipy.sparse.diags([], [], shape=(N, N), format='csc')
for n in range(0):
yp_pluss = yp_full[2:]
yp_minus = yp_full[0:-2]
d =
d[-1] = d[-1] -
yp = scipy.sparse.linalg.spsolve()
yp_full = np.append(0, yp) # add boundaries
yp_full = np.append(yp_full, 1)
plt.figure()
plt.plot(x, np.tan(x), 'k')
plt.plot(x, yp_full, 'r--')
plt.legend(['tan(x)', 'numeric'], loc='best', frameon=False)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
Rekkeutvikling: $$ \begin{equation} \label{eq:34210} \begin{array}{c} F(z_i)_{m+1} \approx F(z_i)_m + \delta z_i \left(\dfrac{\partial F}{dz_i}\right)_m\\ \text{der } \delta z_i = z_i^{m+1} - z_i^m \end{array} \end{equation} $$
I tilfellet ovenfor: $$ \begin{equation*} \delta z_i \to \delta y_i \ , \ z_i^{m+1} \to y_i^{m+1} \ , \ z_i^m \to y_i^m \ , \ F(y_i)_{m+1} = (y_i^{m+1})^2 \ , \ F(y_i)_m = (y_i^m)^2 \end{equation*} $$
som innsatt i \eqref{eq:34210} gir: \( (y_i^{m+1})^2 \approx (y_i^m)^2 + 2y_i^m \cdot \delta y_i \) som er identisk med forrige metode. Fremgangsmaaten i \eqref{eq:34210} kalles ofte Newton-linearisering.
Gitt differensialligningen \( y''(x) + y(x)\sqrt{y(x)} = 0 \) som diskretisert med sentral-differanser blir: $$ \begin{equation*} \label{ex:351} y_{i+1}^{m+1} - 2y_i^{m+1} + y_{i-1}^{m+1} + h^2y_i^{m+1}\sqrt{y_i^{m+1}}= 0 \text{ ved iterasjon $m+1$.} \end{equation*} $$
Det er leddet \( y_i^{m+1} \cdot \sqrt{y_i^{m+1}} \) som er ikke-lineaert og maa lineariseres. I dette tilfellet har vi bare et indeks og vi bruker \eqref{eq:34210} med \( z_i \to y_i \) og \( F(y_i) = y_i^{\frac{3}{2}} \) : $$ \begin{equation*} \begin{array}{c} F(y_i)_{m+1} \approx F(y_i)_m + \delta y_i \left( \dfrac{\partial F}{\partial y_i}\right)_m = (y_i^m)^{\frac{3}{2}} + \delta y_i \cdot \frac{3}{2} \cdot (y_i^m)^{\frac{1}{2}} \text{ eller }\\\\ y_i^{m+1}\sqrt{y_i^{m+1}}\approx y_i^m\sqrt{y_i^m}+\frac{3}{2}\cdot \sqrt{y_i^m} \cdot \delta y_i \text{ der } \delta y_i = y_i^{m+1} - y_i^m \end{array} \end{equation*} $$
Merk at uttrykket naa er lineaert da \( y_i^{m+1} \) bare inngaar i 1. potens.
Innsatt i \eqref{ex:351} faar vi folgende differanseligning: $$ \begin{equation} \label{ex:352} y_{i-1}^{m+1} +\left( \frac{3}{2} h^2 \sqrt{y_i^m}-2\right) y_i^{m+1} + y_{i+1}^{m+1} = \frac{h^2}{2}y_i^m\sqrt{y_i^m} \end{equation} $$