Řešení soustavy A X = B iteračními metodami
Upozornění: cílem je zde názorná ilustrace metod, nikoliv efektivní program
obecná metoda prosté iterace:
řešíme rovnici X = F(X) jako Xi+1 = F(Xi), i = 1, 2, ...
(X může být číslo, vektor, matice ...)
příklad pro F(X) = sin(X) + 1:
>> X = 6; % volba pocatecni aproximace >> X = sin(X) + 1 % opakujeme, dokud se X neustali
metoda prosté iterace pro rovnici X = U X + V:
>> U = [ 0.5 0.1 ; 0.2 0.3 ]; % dana matice >> V = [ 2 ; 3 ]; % dany vektor >> X = [ 6 ; 4 ]; % volba pocatecni aproximace >> X = U * X + V % opakujeme, dokud se X neustali
převedení rovnice A X = B na rovnici X = U X + V
>> A = [ 2 -1 0 ; -1 3 1 ; 0 1 2 ]; % dana matice >> B = [ 1 ; 3 ; 3 ]; % dany vektor prave strany
Richardsonova metoda:
>> E = eye(3); % jednotkova matice >> c = 0.2; % vhodna konstanta (zavisla na matici) >> U = E - c * A >> sp = max(abs(eig(U))) % spektralni polomer matice U - kriterium konvergence >> V = c * B; >> X = V; % volba pocatecni aproximace >> X = U * X + V % opakujeme, dokud se X neustali >> B - A * X % residuum - melo by byt blizko nulyZkuste různé volby konstanty c.
Přesvědčte se, že pro sym. A metoda konverguje, právě když max( |1 - c emin|, |1 - c emax|) je menší než 1 (emin a emax jsou minim. a max. vlastní čísla A).
Jacobiova metoda:
>> D = diag(diag(A)); % diagonala A >> L = tril(A, -1); % dolni trojuhelnik A (bez diagonaly) >> P = triu(A, 1); % horni trojuhelnik A (bez diagonaly) >> UJ = - inv(D) * (L + P) % Jacobiova iteracni matice >> sp = max(abs(eig(UJ))) % spektralni polomer matice UJ - kriterium konvergence >> VJ = inv(D) * B; % upraveny vektor prave strany >> X = VJ; % volba pocatecni aproximace >> X = UJ * X + VJ % opakujeme, dokud se X neustali >> B - A * X % residuum - melo by byt blizko nuly
Gauss-Seidelova metoda:
>> D = diag(diag(A)); % diagonala A >> L = tril(A, -1); % dolni trojuhelnik A (bez diagonaly) >> P = triu(A, 1); % horni trojuhelnik A (bez diagonaly) >> UG = - inv(D + L) * P % Gauss-Seidelova iteracni matice >> sp = max(abs(eig(UG))) % spektralni polomer matice UG - kriterium konvergence >> VG = inv(D + L) * B; % upraveny vektor prave strany >> X = VG; % volba pocatecni aproximace >> X = UG * X + VG % opakujeme, dokud se X neustali >> B - A * X % residuum - melo by byt blizko nuly
Metoda SOR:
>> om = 1.25; % volba relax. parametru omega >> D = diag(diag(A)); % diagonala A >> L = tril(A, -1); % dolni trojuhelnik A (bez diagonaly) >> P = triu(A, 1); % horni trojuhelnik A (bez diagonaly) >> US = - inv(D + om*L) * (om*P + (om-1)*D); % SOR iteracni matice >> sp = max(abs(eig(US))) % spektralni polomer matice US - kriterium konvergence >> VS = om * inv(D + om*L) * B; % upraveny vektor prave strany >> X = VS; % volba pocatecni aproximace >> X = US * X + VS % opakujeme, dokud se X neustali >> A * X % zkouskaVyzkoušejte metody na dalších maticích, například
>> A = [ 2 -1 0 ; -1 -3 1 ; 0 1 2 ];(změna znamínka u prostředního prvku - Richardsonova metoda přestane fungovat).