D5. Podprogramy rozwiązywania układu równań

Podobne dokumenty
Dyskretna transformata falkowa z wykorzystaniem falek Haara. Alfréd Haar

Składowe odpowiedzi czasowej. Wyznaczanie macierzy podstawowej

Zaawansowane metody numeryczne

Rozwiązywanie układów równań liniowych

Wartości i wektory własne

Obliczenia naukowe Wykład nr 8

Układy równań liniowych. Ax = b (1)

Wykład 5. Metoda eliminacji Gaussa

Zaawansowane metody numeryczne

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

10. Metody obliczeniowe najmniejszych kwadratów

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra

Metody numeryczne Wykład 4

UKŁADY RÓWNAŃ LINIOWYCH - Metody dokładne

Metoda simpleks. Gliwice

Wstęp do metod numerycznych Eliminacja Gaussa Faktoryzacja LU. P. F. Góra

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

FUNKCJA KWADRATOWA. Poziom podstawowy

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

a 11 a a 1n a 21 a a 2n... a m1 a m2... a mn x 1 x 2... x m ...

UKŁADY RÓWNAŃ LINIOWYCH -Metody dokładne

Obliczenia iteracyjne

3. Macierze i Układy Równań Liniowych

Wyk lad 7 Metoda eliminacji Gaussa. Wzory Cramera

Wstęp do metod numerycznych Równania macierzowe Faktoryzacja LU i Cholesky ego. P. F. Góra

Wstęp do metod numerycznych Eliminacja Gaussa i faktoryzacja LU. P. F. Góra

Analiza numeryczna Kurs INP002009W. Wykłady 6 i 7 Rozwiązywanie układów równań liniowych. Karol Tarnowski A-1 p.

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Wstęp do metod numerycznych Faktoryzacja macierzy. P. F. Góra

NUMERYCZNE METODY ROZWIĄZYWANIA ROWNAŃ LINIOWYCH. PRZYGOTOWAŁA: ANNA BANAŚ KoMBo, WILiŚ

III TUTORIAL Z METOD OBLICZENIOWYCH

LXIV Olimpiada Matematyczna

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

15. Macierze. Definicja Macierzy. Definicja Delty Kroneckera. Definicja Macierzy Kwadratowej. Definicja Macierzy Jednostkowej

Rozdział 2 PROGRAMOWANIE LINIOWE CAŁKOWITOLICZBOWE

Metody dekompozycji macierzy stosowane w automatyce

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

Wykład III Układy równań liniowych i dekompozycje macierzy

1 Układy równań liniowych

Wyk lad 4 Macierz odwrotna i twierdzenie Cramera

UKŁADY RÓWNAŃ LINIOWYCH

Projekt 6: Równanie Poissona - rozwiązanie metodą algebraiczną.

5. Rozwiązywanie układów równań liniowych

Analiza matematyczna i algebra liniowa Macierze

Wykład 4. Informatyka Stosowana. Magdalena Alama-Bućko. 25 marca Magdalena Alama-Bućko Wykład 4 25 marca / 25

METODY NUMERYCZNE. wykład. konsultacje: wtorek 10:00-11:30 środa 10:00-11:30. dr inż. Grażyna Kałuża pokój

Komputerowa analiza zagadnień różniczkowych 3. Numeryczne zagadnienie własne

Metody numeryczne. Janusz Szwabiński. nm_slides-7.tex Metody numeryczne Janusz Szwabiński 11/11/ :45 p.

Wyk lad 5 W lasności wyznaczników. Macierz odwrotna

SZYBKI ALGORYTM Z MACIERZĄ SHURA DLA MACIERZY TRÓJDIAGONALNYCH

Przykład 2 układ o rozwiązaniu z parametrami. Rozwiążemy następujący układ równań:

Zad. 3: Układ równań liniowych

Rozwiązanie Ad 1. Model zadania jest następujący:

Układy równań liniowych. Krzysztof Patan

Metoda eliminacji Gaussa

Procesy Chemiczne. Ćw. W4 Adsorpcja z roztworów na węglu aktywnym. Nadmiarowe izotermy adsorpcji. Politechnika Wrocławska

13 Układy równań liniowych

Programowanie liniowe

MATEMATYKA I SEMESTR ALK (PwZ) 1. Sumy i sumy podwójne : Σ i ΣΣ

Krzywe stożkowe. 1 Powinowactwo prostokątne. 2 Elipsa. Niech l będzie ustaloną prostą i k ustaloną liczbą dodatnią.

Macierze. Rozdział Działania na macierzach

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Metoda graficzna może być stosowana w przypadku gdy model zawiera dwie zmienne decyzyjne. Metoda składa się z dwóch kroków (zobacz pierwszy wykład):

2. Układy równań liniowych

Własności wyznacznika

Wyk lad 4 Dzia lania na macierzach. Określenie wyznacznika

W wielu obliczeniach w matematyce bądź fizyce wykonanie niektórych kroków zależy od spełnienia warunku.

dr Mariusz Grządziel 15,29 kwietnia 2014 Przestrzeń R k R k = R R... R k razy Elementy R k wektory;

Sprawdzian 3 gr1 (22/01/04) Imie i nazwisko:...grupa: Odpowedz na wszystkie pytania, pamietaj o uzasadnieniu odpowiedzi.

BADANIA OPERACYJNE Zagadnienie transportowe

KATALOG WYMAGAŃ PROGRAMOWYCH NA POSZCZEGÓLNE STOPNIE SZKOLNE W KLASIE 6

Metody numeryczne. Janusz Szwabiński. Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/50

Zagadnienie transportowe (badania operacyjne) Mgr inż. Aleksandra Radziejowska AGH Akademia Górniczo-Hutnicza w Krakowie

Wskaźniki, funkcje i tablice

Wstęp do metod numerycznych Inne rodzaje faktoryzacji. P. F. Góra

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Programowanie celowe #1

1 Macierz odwrotna metoda operacji elementarnych

Pierwiastki arytmetyczne n a

Egzamin z Metod Numerycznych ZSI, Grupa: A

) a j x j b; x j binarne (j N) całkowitoliczbowe; przyjmujemy (bez straty ogólności): c j > 0, 0 <a j b (j N), P n

Rozwiązania zadań z listy T.Koźniewskiego

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Analiza numeryczna Lista nr 3 (ćwiczenia) x x 2 n x.

OPERACJE NA MACIERZACH DODAWANIE I ODEJMOWANIE MACIERZY

A A A A A A A A A n n

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Programowanie - instrukcje sterujące

Pracownia Komputerowa wykład IV

Układy równań liniowych

Rozwiazywanie układów równań liniowych. Ax = b

Tablice i funkcje. Marcin Makowski. 26 listopada Zak lad Chemii Teoretycznej UJ

Metoda eliminacji Gaussa. Autorzy: Michał Góra

Wstęp do metod numerycznych Faktoryzacja QR i SVD. P. F. Góra

Wstęp do metod numerycznych Faktoryzacja Cholesky ego i QR. P. F. Góra

Przedmiot: Informatyka w inżynierii produkcji Forma: Laboratorium Temat: Zadanie 5. MessageBox, InputBox, instrukcja Select Case i instrukcje pętli.

Zaawansowane metody numeryczne Komputerowa analiza zagadnień różniczkowych 1. Układy równań liniowych

Metody numeryczne I Równania nieliniowe

Przekształcanie równań stanu do postaci kanonicznej diagonalnej

Transkrypt:

D5. Podprogramy rozwiązywania układu równań W niniejszym dodatku zamieśiliśmy proedury rozwiazywania układu równań liniowyh. Krótki opis algorytmów omówiliśmy w rozdz. 10.1. Proedury mają bogaty komentarz nagłówkowy objaśniająy ih użyie. ======================================================================= Subroutine LDUSL(LiDiag, Nmax, L,D, U, Pilot, Symetr, NrU, ierr) FUNKCJA Proedura LDUSL dokonuje rozkladu Symetryznej lub niesymetryznej, nieujemnie(niedodatnio) okreslonej maierzy o budowie profilowej(o ile na wejsiu jest ona podana w postai nierozlozonej) na ilozyn A = L*D*U, gdzie L jest maierza trojkatna dolna o jednosiah na glownej diagonali, U - trojkatna gorna, a D maierza diagonalna. W przypadku, gdy maierz pozatkowa jest Symetryzna, L i U sie pokrywaja. PRZYKLADY Proedura LDUSL jest wykorzystywana przede wszystkim do rozwiazywania ukladu(ow) rownan liniowyh (Symetryznyh lub niesymetryznyh) o profilowej(sky- line) maierzy lewej strony. Rozwiazanie ukladu rownan wymaga wywolania nastepujaej sekwenji proedur (dla maierzy niesymetryznej- Symetr =.FALSE.): all LDUSL(LiDiag,Nmax,L,D,U,Pilot,Symetr,NrU,ierr,energ) all UKSL(LiDiag,Nmax,L,D,U,B,Pilot,NrU,ierr) Odpowiednie wywolania dla maierzy Symetryznyh jest nastepu jae(symetr =.TRUE.): all LDUSL(LiDiag,Nmax,U,D,U,Pilot,Symetr,NrU,ierr,energ) all UKSL(LiDiag,Nmax,U,D,U,B,Pilot,NrU,ierr) Nalezy podkresli, ze w przypadku, gdy hemy rozwiaza ten uklad dla wieej niz jeden wektorow prawej strony, to LDUSL wykonywane jest tylko raz - przed znalezieniem pierwszego rozwiazania. 444

WEJSCIE LiDiag-/integer*4/ lizba elementow diagonalnyh maierzy A, Nmax-/integer*4/ lizba elementow zesi trojkatnej gornej ma ierzy A, U(Nmax)-/REAL*8/ wektor zawierajay na wejsiu kolejne kolumny elementow znajdujayh sie ponad glowna przekatna maierzy wejsiowej w profilu obejmujaym wszystkie jej niezerowe elementy. Przykladowo- jesli oznazymy taka 4x4 maierz przez A: I 2.D0 0.D0 1.D0 0.D0 I I 0.D0 4.D0 0.D0 3.D0 I I -1.D0 0.D0 8.D0 5.D0 I I 0.D0-2.D0 5.D0 9.D0 I tonmax=4,u(1)=1.d0,u(2)=0.d0,u(3)=3.d0,u(4)=5.d0, D(LiDiag)-/REAL*8/ wektor o wymiarze LiDiag zawierajay na wejsiu elementy diagonalne maierzy A, L(Nmax)-/REAL*8/ wektor zawierajay na wejsiu kolejne wiersze profilu obejmujaego elementy niezerowe lezae na lewo od glownej przekatnej maierzy A, W przypadku, gdy A jest Symetryzna przy wywolaniu LDUSL nalezy w miejse L poda parametr aktualny odpowiadajay U. W przypadku, gdy maierz A jest niesymetryzna(dla poda nego wyzej przykladu) wartosi L sa nastepujae: L(1) =-1.D0, L(2)=0.D0,L(3)=-2.D0,L(4)=5.D0,awiezapamietanesa w sposob analogizny do sposobu przehowywania maierzy U (zamiast kolumn wiersze), Pilot(LiDiag) - /integer*4/ wektor zawierajay indeksy najnizszyh elementow ponaddiagonalnyh w kolejnyh kolumnah. Przyjeto zalozenie, ze Pilot(1) jest rowny zero, a w przypadku, gdy w j-tej kolumnie nie ma elementow niezerowyh, Pilot(J) = Pilot(J-1). Latwo zauwazy, ze w przypadku maierzy niesymetryznyh Pilot przekazuje analogizne informaje o rozmieszzeniu elementow w maierzy trojkatnej dolnej L(indeksy elementow najnizszyh sposrod ponaddiagonalnyh odpowiadaja indeksom tyh elementow z kolejnyh wierszy, ktore lewostronnie sasiaduja z glowna przekatna). Pilot w trakie dzialania proedury nie jest zmieniany. Dla maierzy podanej w przykladzie, wartosi wek tora sa nastepujae: Pilot(1) = 0 (dla kazdej maierzy), Pilot(2)=0,Pilot(3)=3,Pilot(4)=4iNmax=4, Symetr - /logial*1/ stala rowna.true. jesli maierz jest Symetryzna i.false. w przeiwnym przypadku, NrU-/integer*4/ numer urzadzenia wyjsiowego na ktory wypisywa ne sa komunikaty o bledah. NrU rowne zero oznaza, ze komu nikaty nie beda wyswietlane. 445

446 Podprogramy rozwiązywania układu równań WYJSCIE U-/REAL*8/ wektor o wymiarze onajmniej Nmax zawierajay zynnik rozkladu maierzy A na ilozyn L*D*U, gdzie U jest trojkatna gorna, L- trojkatna dolna, a D jest maierza diagonalna. Pierwotna zawartos wektora U zostaje zniszzona, L-/REAL*8/ wektor o wymiarze onajmniej Nmax zawierajay zynnik rozkladu maierzy A na ilozyn L*D*U, gdzie U jest trojkatna gorna, L- trojkatna dolna, a D jest maierza diagonalna. W przypadku maierzy Symetryznyh L jest rowne U. Pierwotna zawartos wektora L zostaje zniszzona, D-/REAL*8/ wektor o wymiarze onajmniej LiDiag zawierajay odwrotnos zynnika rozkladu maierzy A na ilozyn L*D*U, gdzieujesttrojkatnagorna,l-trojkatnadolna, ad jest maierza diagonalna. Pierwotna zawartos wektora D zostaje zniszzona, ierr-/integer*4/ zmienna zawierajaa kod bledu wykrytego podzas dzialania proedury. Moze ona przyjmowa nastepujae wartosi: -J- utrata onajmniej siedmiu yfr znazayh przy oblizaniu J-tego elementu diagonalnego, LiDiag + J- maierz wejsiowa jest osobliwa (otrzymano zero przy oblizaniu J-tego elementu diagonalnego), J- maierz wejsiowa nie jest ani nieujemnie, ani niedodatnio okreslona(znak J-tego elementu diagonalnego jest rozny od J-1 -szego. Oblizenia pomimo wykrytyh bledow nie sa przerywane. W przypadku niewykryia bledu ierr jest rowny zero. METODA Rozklad maierzy wejsiowej odbywa sie przy pomoy adaptaji Zwartej Metody Crouta(odmiana eliminaji Gaussa) dla maierzy o podanej wzesniej budowie. Polega ona na rozkladzie maierzy wejsiowej na ilozyn A = L*D*U, gdzie U jest maierza trojkatna gorna o jednosiah na glownej diagonali, L- trojkatna dolna, a D- maierz- diagonalna. BLEDY LDUSL rozpoznaje trzy rodzaje blednyh sytuaji i wypisuje odpowiednie komunikaty na urzadzenie o numerze NrU: 1. utrata onajmniej siedmiu yfr znazayh przy oblizaniu elementu diagonalnego rozkladu L*D*U(zle uwarunkowanie maierzy), 2. maierz wejsiowa jest osobliwa, 3. maierz wejsiowa nie jest ani dodatnio ani ujemnie okreslona.

dodatkowo podawany jest indeks wiersza(kolumny) przy ktorej wytapilo rozpoznanie blednej sytuaji. Oproz tego zmiennej ierr nadawana jest odpowiednio dla kazdej z tyh sytuaji wartos:-j, LiDiag+JorazJ,gdzieJ-oznazaindekskolumny przy ktorym rozpoznano blad. UZYTE PODPROGRAMY dot(maoper) - ilozyn skalarny dwoh wektorow, DREDUC(UkRow) - proedura wyznazajaa N-ty element diagonalny maierzy D powstalej przy rozkladzie maierzy pozatkowej na ilozyn L*D*U oraz ostatezne wartosi wstep nie zredukowanyh wzesniej elementow N-tego wiersza maierzy maierzy L i N-tej kolumny maierzy U. ======================================================================= POLITECHNIKA WARSZAWSKA OSRODEK METOD KOMPUTEROWYCH ZESPOL OPROGRAMOWANIA INZYNIERSKIEGO Z.K./J.O. 1988.11.16 ======================================================================= Subroutine LDUSL(LiDiag,Nmax,L,D,U,Pilot,Symetr,NrU,ierr) integer*4 J,JD,JH,JR,JRH,IDH,IE,IH,IS,LiDiag,Pilot,Nmax,ierr,I,ID integer*4 NrU real*8 DD,L,U,D real*8 dot logial*1 Symetr dimension L(Nmax),D(LiDiag),U(Nmax),Pilot(LiDiag) Redukja maierzy(kolumnami) ierr=0 JD=1 do600j=1,lidiag JR=JD+1 JD = Pilot(J) JH=JD-JR if(jh) 500,300,100 100 IS=J-JH IE=J-1 do200i=is,ie JR=JR+1 ID = Pilot(I) IH = min0(id-pilot(i-1),i-is+1) if(ih.le.0)goto200 JRH=JR-IH 447

448 Podprogramy rozwiązywania układu równań IDH=ID-IH+1 U(JR) = U(JR)- dot(u(jrh),l(idh),ih) if(.not. Symetr) L(JR) = L(JR)- dot(l(jrh),u(idh),ih) 200 ontinue wyznazanie elementu diagonalnego i konowa redukja j-tego wiersza ikolumny 300 DD=D(J) JR=JD-JH JRH=J-JH-1 all DREDUC(JH+1, L(JR), D(JRH), U(JR), D(J), Symetr) Obsluga bledow if(dabs(d(j)).ge. 0.5D-7*dabs(DD)) goto 400 ierr=-j if(nru.ne. 0) write(nru,2000) if(nru.ne. 0) write(nru,2010) J 400 if(dd*d(j).ge. 0.0D0) goto 500 ierr=lidiag+j if(nru.ne. 0) write(nru,2020) if(nru.ne. 0) write(nru,2030) J 500 if(d(j).ne. 0.0D0) goto 550 ierr=j if(nru.ne. 0) write(nru,2040) J if(nru.ne. 0) write(nru,2050) goto 600 C C Oblizanie odwrotnosi maierzy D C 550 D(J)=1.0D0/D(J) 600 ontinue 2000 format(2x, ***LDUSL ostrzezenie 1*** utrata onajmniej siedmiu, ) 2010 format(2x, yfr znazayh przy oblizaniu,i5, -tej kolumny. ) 2020 format(2x, ***LDUSL ostrzezenie 2*** maierz wejsiowa nie jest ) 2030 format(2x, ani dodatnio ani ujemnie okreslona. Zmiana znaku, + przy oblizaniu,i5, -tego elementu diagonalnego. ) 2040 format(2x, ***LDUSLostrzezenie3***,I5, -tyelement, + diagonalny ) 2050 format(2x, jest rowny zero- maierz jest osobliwa. ) end ======================================================================= Subroutine UKSL(LiDiag, Nmax, L, D, U, B, Pilot, NrU, ierr, energ)

FUNKCJA Rozwiazywanie ukladu rownan liniowyh L*D*U*x = b, gdzie L jest maierza trojkatna dolna, D- diagonalna, a U - trojkatna gorna. Maierze L i U sa podane"sky-line ie". PRZYKLADY W elu rozwiazania ukladu rownan liniowyh z maierza profilowa("sky-line") nalezy najpierw wykona proedure LDUSL rozkladajaa maierz pozatkowa na ilozyn L*D*U. W elu rozwiazania jednego (lub wieej) ukladu rownan liniowyh symetryznyh nalezy wykona: CALL LDUSL(LiDiag,Nmax,U,D,U,Pilot,.TRUE.,NrU,ierr,energ) CALL UKSL(LiDiag,Nmax,U,D,U,B,Pilot,NrU,ierr,energ) W elu rozwiazania jednego (lub wieej) ukladu rownan liniowyh niesymetryznyh nalezy wykona: CALL LDUSL(LiDiag,Nmax,L,D,U,Pilot,.FALSE.,NrU,ierr,energ) CALL UKSL(LiDiag,Nmax,L,D,U,B,Pilot,NrU,ierr,energ) WEJSCIE U(Nmax)-/real*8/ wektor zawierajay na wejsiu kolejne kolumny elementow znajdujayh sie ponad glowna przekatna maierzy trojkatnej gornej D- zynnika rozkladu L*D*U- znajdujaego sie w profilu obejmujaym wszystkie jego niezerowe elementy. Przykladowo dla 4x4 maierzy D rownej I 1.D0 0.D0 1.D0 0.D0 I I 0.D0 1.D0 0.D0 3.D0 I I 0.D0 0.D0 1.D0 5.D0 I I 0.D0 0.D0 0.D0 1.D0 I U(1)=1.D0,U(2)=0.D0,U(3)=3.D0,U(4)=5.D0, D(LiDiag)-/real*8/ wektor o wymiarze LiDiag zawierajay na wejsiu elementy diagonalne maierzy A, L(Nmax)-/real*8/ wektor zawierajay na wejsiu wiersze maierzy trojkatnej dolnej. W przypadku, gdy A jest symetryzna przy wywolaniu LDUSL nalezy w miejse L poda parametr aktualny odpowiadajay U. W przypadku, gdy maierz A jest niesymetryzna jest real*8 wektor elementow zawierajayh kolejne wiersze (na lewo od diagonali) profilu niezerowyh elementow tej maierzy, D-/real*8/ wektor o wymiarze onajmniej LiDiag zawierajay odwrotnos zynnika rozkladu maierzy A na ilozyn L*D*U, gdzieujesttrojkatnagorna,l-trojkatnadolna, ad jest maierza diagonalna. Pierwotna zawartos wektora D zostaje zniszzona, 449

450 Podprogramy rozwiązywania układu równań B(LiDiag)-/real*8/ wektor prawej strony ukladu rownan, NrU-/integer*4/ numer urzadzenia wyjsiowego na ktory wypisywa ne sa komunikaty o bledah. NrU rowne zero oznaza, ze komu nikaty nie beda wyswietlane. WYJSCIE B(LiDiag)-/real*8/ wektor rozwiazania ukladu rownan. Pierwotna jego zawartos zostala zniszzona, ierr-/integer*4/ zmienna rowna zero jesli wektor prawej strony nie jest zerowy i LiDiag w przeiwnym przypadku. energ-/real*8/ energia sprezysta ukladu METODA Korzystaja z podanego na wejsiu rozkladu maierzy na ilozyn L*D*U rozwiazuje sie uklad rownan w trzeh etapah: 1.Rozwiazywanyjestuklad L*w=b. 2.Rozwiazywanyjestuklad D*z=w. 3.Rozwiazywanyjestuklad U*x=z, o jest, jak latwo zauwazy, rownowazne pozatkowemu ukladowi A*x=b.Rozwiazaniekazdegoztyhukladowjestozywiste(1i3 maierze trojkatne, a 2- maierz diagonalna) BLEDY UKSL sygnalizuje sytuaje, gdy nastepuje proba rozwiazania ukladu rownan jednorodnyh (zerowy wektor prawej strony). W sytuaji, gdy maierz pozatkowa jest nieosobliwa nie ma to wiekszego sensu- istnieje tylko jedne zerowe rozwiazanie. Odpowiedni komunikat zostanie zapisany na urzadzeniu o numerze logiznym NrU. Oproz tego zmiennej informujaej o bledah- ierr nadana zostanie waros Lidiag. UZYTE PODPROGRAMY dot(maoper) - ilozyn skalarny dwoh wektorow, COLRED(U,X,N,B) - proedura dokonujaa redukji kolumny przy rozwiazywaniu ukladu rownan z maierza trojkatna gorna. ======================================================================= Subroutine UKSL(LiDiag,Nmax,L,D,U,B,Pilot,NrU,ierr,energ) integer*4 Pilot,LiDiag,Nmax,IS,J,JH,JJH,JR1,NrU,ierr,JR,IE real*8 BD,B,D,L,U,dot,energ dimension L(Nmax),U(Nmax),D(LiDiag),B(LiDiag),Pilot(LiDiag)

Szukanie pierwszej niezerowej skladowej wektora prawej strony ierr=0 do100is=1,lidiag if(b(is).ne.0.0d0)goto200 100 ontinue if(nru.ne. 0) write(nru, 2000) ierr = LiDiag 200 if(is.eq.lidiag)goto400 IE=IS+1 Rozwiazywanie ukladu rownan z maierza trojkatna dolna L*w = b do300j=ie,lidiag JR = Pilot(J-1) JH=Pilot(J)-JR JJH=J-JH if(jh.le.0)goto300 JR1=JR+1 if(jjh.gt. 0) B(J) = B(J)- dot(l(jr1),b(jjh),jh) 300 ontinue Rozwiazywanie ukladu rownan z maierza diagonalna D*z = w 400 energ=0.d0 do500j=is,lidiag BD=B(J) B(J)=B(J)*D(J) 500 energ=energ+bd*b(j) Rozwiazywanie ukladu rownan z maierza trojkatna gorna U*x = z, o jest rownowazne rozwiazaniu ukladu(l*d*u)*x = B J=LiDiag 600 JR = Pilot(J-1) JH=Pilot(J)-JR JJH=J-JH if(jjh.gt. 0) all ColRed(U(JR+1),B(J),JH,B(JJH)) J=J-1 if(j.gt.1)goto600 2000 format( ***UKSL ostrzezenie 1*** zerowy wektor prawej strony. ) end ======================================================================= 451

452 Podprogramy rozwiązywania układu równań Subroutine DREDUC(N, L, D, U, DJ, Symetr) FUNKCJA Proedura DREDUC mnozy kolejne elementy wektora U przez odpowiadajae im elementy wektora D, nastepnie obliza jego ilozyn skalarny z wektorem L i otrzymana wartos odejmuje od DJ. Ponadto, jesli SYMETR jest rowny.false., zmodyfikowany zostaje wektorlw ten sposob, ze kolejne jego elementy sa rowne "starym" pomnozonym przez odpowiadajae im elementy wektora D. ZASTOSOWANIE Podstawowym zastosowaniem DREDUC jest redukja kolumn maierzy trojkatnej gornej(w przypadku maierzy niesymetryznyh - takze wierszy maierzy trojkatnej dolnej) oraz wyznazenie odwrotnosi kolejnego elementu maierzy diagonalnej podzas wyznazania rozkladu maierzy na ilozyn L*D*U, gdzie L jest maierza trojkatna dolna, D- diagonalna, a U- trojkatna gorna. Proedura wyznazjaa rozklad ma nazwe LDUSL. WEJSCIE N-/INTEGER*4/ dlugos wektorow L i U (indeks oblizonego w poprzednim kroku elementu diagonalnego), L-/REAL*8/ wektor o dlugosi onajmniej N (wiersz maierzy trojkatnej dolnej L). W przypadku, gdy maierz jest symetryzna L pokrywa sie z U, D- /REAL*8/ wektor o dlugosi onajmniej N (lizba oblizonyh dotad elementow diagonalnyh D), U-/REAL*8/ wektor o dlugosi onajmniej N (kolumna maierzy trojkatnej gornej L). SYMETR-/LOGICAL/ stala wejsiowa rowna.true. L ma zosta niezmienione(maierz symetryzna) i.false. w przeiwnym przypadku, DJ-/REAL*8/ zmienna(odpowiada aktualnie elementowi diagonalnemu maierzy D- rownemu odpowiadajaemu jej elementowi maierzy pozatkowej), WYJSCIE U-/REAL*8/ zawiera elementy podane na wejsiu i pomnozone przez odpowiadajae im elementy wektora D. L-/REAL*8/wektor-jesliSYMETRjestrowny.TRUE.Ljestrowne U, a w przeiwnym przypadku kolejne elementy L sa (podobnie jak U) mnozone przez odpowiadajae im elementy wektora D,

DJ-/REAL*8/ zmienna zawierajaa roznie miedzy stara wartosia a ilozynem skalarnym zmodyfikowanego wektora U i wektora L. ======================================================================= Subroutine DREDUC(N, L, D, U, DJ, Symetr) integer*4 N, j logial*1 Symetr real*8l,d,u,dj,pom dimension L(N), D(N), U(N) do100j=1,n pom=u(j)*d(j) DJ=DJ-L(J)*pom U(J)=pom 100 ontinue Dodatkowe oblizenia sa potrzebne dla maierzy niesymetryznej IF(Symetr) do200j=1,n L(j)=L(j)*D(j) 200 ontinue end ======================================================================= Subroutine ColRed(u, x, n, b) FUNKCJA Odjeie od wektora B wektora U pomnozonego przez X WEJSCIE/ WYJSCIE n -/integer*4/ wymiar wektorow U i B, x -/real*8/ mnoznik, b -/real*8/ modyfikowany wektor, u -/real*8/ wektor. ======================================================================= Subroutine ColRed(u, x, n, b) real*8u,b,x 453

454 Podprogramy rozwiązywania układu równań integer*4 n, i dimension u(n), b(n) if(n.lt. 1) do100i=1,n b(i)=b(i)-u(i)*x 100 ontinue end ======================================================================= real*8 funtion dot(a, b, n) FUNKCJA Oblizanie ilozynu skalarnego wektorow a i b o dlugosi n WEJSCIE n -/integer*4/ dlugos wektorow a i b, a, b -/real*8/ wektory odlugosi n. ======================================================================= real*8 funtion dot(a, b, n) real*8a,b,dot integer*4 n, i dimension a(n), b(n) dot=0.0d0 do100i=1,n dot=dot+a(i)*b(i) 100 ontinue end