Cím: Számítástechnikai rovat (11)
Szerző(k):  Ada-Winter Péter 
Füzet: 1977/december, 212 - 215. oldal  PDF  |  MathML 
Témakör(ök): Szakmai cikkek

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Az előző részben kitűzött feladat megoldása
Feladat:

Program készítendő, amely a példaként hozott egyenletrendszer együtthatóit kártyáról beolvassa, és az egyenletet eliminációs módszerrel megoldja. A program álljon két szubrutinból, az első az eliminációt, a második a visszahelyettesítést hajtsa végre. Nyomtatandók egymás alatti sorokban az adott egyenletrendszer egyenletei és néhány sorral ezek alatt az eredményül kapott gyökök. Az egyenletek együtthatói három kártyán helyezkednek el, egy kártyán 15‐15 karakterszélességű mezőben három tizedesjegy pontossággal egy egyenlet együtthatói.

 

 

1. ábra
 


Megoldás:
 


A program, melynek blokkdiagramját az 1. ábrán látjuk, az alábbi lehet:
 

MASTER  PR12DIMENSION  A(3,4),X(3)READ(1,100)((A(I,J),J=1,4),I=1,3)WRITE(3,101)((A(I,J),J=1,4),I=1,3)CALL  ELIM(A)CALL  VISSZ  (A,X)WRITE(3,102)((K,X(K)),K=1,3)  100FORMAT  (2(4F15.3/), 4F15.3)  101FORMAT  (1H1,5(/),30X,22HAZ EREDETI EGYUTHATOO.X8H  MATRIX:///3(30X,4(F15.3,5X)//))  102FORMAT (////30X, 11HA GYOEKOEK://3(30X, 1HX, |1,Y3H =,F15.5//))STOPENDSUBROUTINE  ELIM(EH)DIMENSION  EH(3,4)DO  2  |=2,3B=EH(|,  1)/EH(1.1)DO  1  J=1,4  1EH(|, J)=B*EH(1,J)-EH(|,J)  2CONTINUEB=EH(3,2) /EH(2,2)DO  3  J=2,4  3EH(3, J)=B*EH(2,J)-EH(3,J)RETURNENDSUBROUTINE VISSZ (EH,V)DIMENSION EH(3,4), V(3)DO  2  K=1,3J=4-KIF (J-2)3,4,0C=OGO  TO  5  4C=V(J+1)*EH(J,J+1)GO  TO  5  3C=V(J+2)*EH(J,J+2)+V(J+1)*EH(J,J+1)  5V(J)=(EH(J,4)-C)/EH(J,J)  2CONTINUERETURNENDFINISH   
Megjegyzés:
Bizonyára sokan vannak, akik az eliminációs részben az alábbi (vagy elvileg azzal megegyező) ciklust szervezték:
DO  2  |=2,3DO  1  J=1,4  1EH(|,J)=(EH(|,1)*EH(1,J)/EH(1,1)-EH(|,J)  2CONTINUE
Ez hibás, mert ameddig J=1, addig EH(I,1) értékes 2, de ha I=2, akkor EH(I, 1) értéke zérus és az is marad a negyedik ciklusig! Vagyis az első menetben a második egyenletnek csak az első együtthatója lenne helyes, a többi már nem.
 


6.1 fejezet folytatása
 


Tekintsünk most egy általánosan felírt elsőfokú n ismeretlenes egyenletrendszert:
a1,1x1+a1,2x2+...+a1,nxn=a1,n+1a2,1x1+a2,2x2+...+a2,nxn=a2,n+1an,1x1+an,2x2+...+an,nxn=an,n+1


aminek rövidebb írásmódja:
j=1nai,jxj=ai,n+1(i=1,2,3,...,n)
(Ezek felelnek meg a korábban E0,i-val jelölt egyenleteknek.) A program az egyenletrendszerből csak az együtthatókat és az abszolút tagokat veszi át, mint adatokat, és ezekből számítja a gyököket.

Az együtthatók n soros, és n+1 oszlopos mátrixot alkotnak:
(a1,1a1,2...a1,na1,n+1a2,1a2,2...a2,na2,n+1an,1an,2...an,nan,n+1)=[ai,j]n,n+1
Az a megszorítás, hogy csak inhomogén egyenletekkel foglalkozunk, azt jelenti, hogy a mátrix (n+1)-dik oszlopában nem lehet valamennyi elem zérus, azaz
i=1n|ai,n+1|0
Ezen kívül, mivel bizonyos együtthatókkal osztanunk kell, ideiglenesen feltételezzük, hogy az osztó együtthatók nem zérusok. Később ennek tisztázására visszatérünk. Az első menetből kapott egyenletek az alábbiak:
E1,1=E0,1j=1na1,jxj=a1,n+1E1,2=a2,1a1,1E0,1-E0,2j=1n(a2,1a1,1a1,j-a2,j)xj=a2,1a1,1a1,n+1-a2,n+1E1,3=a3,1a1,1E0,1-E0,3j=1n(a3,1a1,1a1,j-a3,j)xj=a3,1a1,1a1,n+1-a3,n+1E1,n=an,1a1,1E0,1-E0,nj=1n(an,1a1,1a1,j-an,j)xj=an,1a1,1a1,n+1-an,n+1.
A menet során az eredeti együttható mátrixot változtatjuk meg, mivel ha minden menetben újabb mátrixot akarnánk betölteni, igen nagy tárkapacitást kellene lekötnünk, fölöslegesen.

Az új együttható mátrixot is [ai,j]n,(n+l)-el jelöljük és azt mondjuk, hogy az első menet során a mátrix elemeinek aktuális értéke megváltozott. Ennek eredményeként az első oszlopban a második sortól lefelé minden elem zérus.
 


Az eddig elmondottakat egy példán mutatjuk be:

Legyen az egyenletrendszer 10 ismeretlenes, jelöljük az együttható mátrixot A-val. Az első menetet a 2. ábrán látható blokkdiagram alapján készített program valósítja meg.
 

 

2. ábra
 

Visszatérve az általános tárgyalásmódra vizsgáljuk meg a második menetet.
E2,1=E1,1változatlanE2,2=E1,2változatlanE2,3j=1n(a2,3a2,2a2,j-a3,j)xj=a2,3a2,2a2,n+1-a3,n+1E2,4j=1n(a2,4a2,2a2,j-a4,j)xj=a2,4a2,2a2,n+1-a4,n+1E2,nj=1n(a2,na2,2a2,j-an,j)xj=a2,na2,2a2,n+1-an,n+1
Az együttható mátrix aktuális értékei ezzel újra megváltoztak, mégpedig úgy, hogy a második oszlop elemei a harmadik sortól kezdve szintén zérus értékűek lettek. Példánkra vonatkozóan a 3. ábra mutatja a második menetnek megfelelő blokkdiagramot.
 

 

3. ábra
 

Az elmondottakból következik, hogy általános esetben (n-1), példánk esetében 9 menet lehetséges az elimináció során.
 


Feladat:

1) Blokkdiagram készítendő a 10 ismeretlenes lineáris egyenletrendszer eliminációs program részletéhez.

2) Az elkészült blokkdiagram alapján ELIM azonosítójú SUBROUTINE készítendő.