Ռելակսացիայի մեթոդ

**Ռելակսացիայի մեթոդ**, գծային հանրահաշվական հավասարումների լուծման իտերացիոն մեթոդ։

## Մեթոդի նկարագրությունը
Գծային հավասարումների համակարգը


\left\{
\begin{matrix}
a_{11}x_1 + \ldots + a_{1n}x_n & = & b_1\\
a_{21}x_1 + \ldots + a_{2n}x_n & = & b_2\\
 & \ldots & \\
a_{n1}x_1 + \ldots + a_{nn}x_n & = & b_n\\
\end{matrix}
\right.


բերենք այսպիսի տեսքի՝

\left\{
\begin{matrix}
P_{11}x_1 + P_{12}x_2 + \ldots + P_{1n}x_n + c_1 & = & 0\\
 & \ldots & \\
P_{n1}x_1 + P_{n2}x_2 + \ldots + P_{nn}x_n + c_n & = & 0\\
\end{matrix}
\right.


որտեղ 
:P_{ij} = -\frac{a_{ij}}{a_{ii}}, c_i = \frac{b_i}{a_{ii}}

Կգտնվի R_{j} կապը այնպես, որ


\left\{
\begin{matrix}
R_1^{(0)} & = & c_1 - x_1^{(0)} + \sum \limits_{j = 2}^n P_{1j}x_j^{(0)}\\
R_2^{(0)} & = & c_2 - x_2^{(0)} + \sum \limits_{j = 1, j \neq 2}^n P_{2j}x_j^{(0)}\\
 & \ldots & \\
R_n^{(0)} & = & c_n - x_n^{(0)} + \sum \limits_{j = 1}^{n - 1} P_{nj}x_j^{(0)}\\
\end{matrix}
\right.


Ընտրվում է սկզբնական X^{(0)} = 0 մոտարկումը։ Յուրաքանչյուր քայլում անհրաժեշտ է առավելագույն կապը տանել զրոյի
R_s^{(k)} = \delta x_s^{(k)} \Rightarrow R_s^{(k + 1)} = 0, R_i^{(k + 1)} = R_i^{(k)} + P_{is} \delta x_s^{(k)}։

Դադարեցման պայմանը՝ 
:|R_j^{(k)}| ։

Պատասխանը գտնվում է այս բանաձևով՝
:x_i \approx x_i^{(0)} + \sum_j \delta x_i^{(j)}։

## Օրինակ
Դիտարկենք գծային հավասարումների հետևյալ համակարգը՝

:
  \begin{align}
     4x_1 -  x_2 -  6x_3 + 0x_4 =   2, \\
    -5x_1 - 4x_2 + 10x_3 + 8x_4 =  21, \\
     0x_1 + 9x_2 +  4x_3 - 2x_4 = -12, \\
     1x_1 + 0x_2 -  7x_3 + 5x_4 =  -6.
  \end{align}


Հավասարումների համակարգը լուծելու համար որպես մոտարկման արժեք ընդոունենք՝ \omega = 0.5 և նախնական մոտարկման վեկտոր՝ \phi = (0, 0, 0)։ Համաձայն ռելակսացիայի մեթոդի հաջորդական քայլերին անցման ստանում ենք հետևյալ աղյուսակը, որն իրենից ներկայացնում է մոտարկումների հաջորդականություն։ Այն իդեալականորեն, սակայն ոչ պարտադիր մոտենում է ճիշտ լուծմանը՝ , 38 քայլերով։

Վերևում բերված հավասարումների համակարգի լուծումը ներկայացնենք **Python** ծրագրավորման լեզվով՝


```python
import numpy as np

def sor_solver(A, b, omega, initial_guess, convergence_criteria):
    """
    This is an implementation of the pseudo-code provided in the Wikipedia article.
    Arguments:
        A: nxn numpy matrix.
        b: n dimensional numpy vector.
        omega: relaxation factor.
        initial_guess: An initial solution guess for the solver to start with.
        convergence_criteria: The maximum discrepancy acceptable to regard the current solution as fitting.
    Returns:
        phi: solution vector of dimension n.
    """
    phi = initial_guess[:]
    residual = np.linalg.norm(np.matmul(A, phi) - b) #Initial residual
    while residual > convergence_criteria:
        for i in range(A.shape[0]):
            sigma = 0
            for j in range(A.shape[1]):
                if j != i:
                    sigma += A[i][j] * phi[j]
            phi[i] = (1 - omega) * phi[i] + (omega / A[i][i]) * (b[i] - sigma)
        residual = np.linalg.norm(np.matmul(A, phi) - b)
        print('Residual: {0:10.6g}'.format(residual))
    return phi

# An example case that mirrors the one in the Wikipedia article
residual_convergence = 1e-8
omega = 0.5 #Relaxation factor

A = np.matrix([4, -1, -6, 0],
              [-5, -4, 10, 8],
              [0, 9, 4, -2],
              [1, 0, -7, 5])

b = np.matrix([2, 21, -12, -6])

initial_guess = np.zeros(4)

phi = sor_solver(A, b, omega, initial_guess, residual_convergence)
print(phi)
```


## Գրականություն
* Աբրահամ Բերման, Ռոբերտ Պլեմմոնս, «Ոչբացասական մատրիցները մաթեմատիկական գիտություններում»', 1994, SIAM. .
*
*Netlib-ի պատճեի օրինակով «Գծային հավասարումների համակարգերի լուծման կաղապարներ», Բարեթ և այլն։

## Ծանոթագրություններ

## Արտաքին հղումներ
*Module for the SOR Method

Կատեգորիա:Թվային մեթոդներ
Կատեգորիա:Մաթեմատիկա