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

testwiki-ից
Jump to navigation Jump to search

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

Մեթոդի նկարագրությունը

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

{a11x1++a1nxn=b1a21x1++a2nxn=b2an1x1++annxn=bn

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

{P11x1+P12x2++P1nxn+c1=0Pn1x1+Pn2x2++Pnnxn+cn=0

որտեղ

Pij=aijaii, ci=biaii

Կգտնվի Rj կապը այնպես, որ

{R1(0)=c1x1(0)+j=2nP1jxj(0)R2(0)=c2x2(0)+j=1,j2nP2jxj(0)Rn(0)=cnxn(0)+j=1n1Pnjxj(0)

Ընտրվում է սկզբնական X(0)=0 մոտարկումը։ Յուրաքանչյուր քայլում անհրաժեշտ է առավելագույն կապը տանել զրոյի[2] Rs(k)=δxs(k)Rs(k+1)=0,Ri(k+1)=Ri(k)+Pisδxs(k)։

Դադարեցման պայմանը՝

|Rj(k)|<ε,j=1,n։

Պատասխանը գտնվում է այս բանաձևով՝

xixi(0)+jδxi(j)։

Օրինակ

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

4x1x26x3+0x4=2,5x14x2+10x3+8x4=21,0x1+9x2+4x32x4=12,1x1+0x27x3+5x4=6.

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

Iteration x1 x2 x3 x4
1 0.25 -2.78125 1.6289062 0.5152344
2 1.2490234 -2.2448974 1.9687712 0.9108547
3 2.070478 -1.6696789 1.5904881 0.76172125
... ... ... ... ...
37 2.9999998 -2.0 2.0 1.0
38 3.0 -2.0 2.0 1.0

Վերևում բերված հավասարումների համակարգի լուծումը ներկայացնենք 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. Կաղապար:Isbn.
  • Կաղապար:MathWorld
  • Netlib-ի պատճեի օրինակով «Գծային հավասարումների համակարգերի լուծման կաղապարներ», Բարեթ և այլն։

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

Կաղապար:Ծանցանկ

Արտաքին հղումներ

Կաղապար:Մաթեմատիկա–ներքև

  1. Յուսիֆ Սաադ, Iterative Methods for Sparse Linear Systems, 1-ին հրատ․, PWS, 1996.։
  2. Ա․ Հաջիդիմոս, Successive overrelaxation (SOR) and related methods, Հաշվողական և կիրառական մաթեմատիկայի հանդես 123 (2000), 177-199։