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 feladatok megoldása:
1. Feladat: Blokkdiagram készítendő a ismeretlenes egyenletrendszer eliminációs eljárása során alkalmazandó főelem keresésére. Megoldás: új főelem keresésére, mint említettük, akkor kerül sor, ha az közel zérus értékű, emiatt a vele való osztás túlcsordulást, a program futásának leállását eredményezné. A megfelelő főelem megtalálása után oszlopcserét hajtunk végre és folytathatjuk az eliminációt. Azt azonban "föl kell íratnunk'', hogy az oszlopok sorrendje miként változott, mivel a visszahelyettesítésnél a kapott gyökök sorrendje a cserélt oszlopok sorrendjével lesz azonos. A gyököket az eredeti sorrendbe csak ennek segítségével rendezhetjük. Miután így a Gauss-féle eliminációs módszerre épülő program a visszahelyettesítési és ellenőrzési résztől eltekintve elkészült, bemutatjuk a teljes program első részének egy lehetséges formáját. Ezzel kapcsolatos megjegyzéseink a következők: ‐ A MASTER szegmens az és tömböket tölti fel az eredeti együttható mátrixszal (utóbbit az ellenőrző részben használjuk fel). lesz az eredmény vektor, a NYOM vektor az oszlopok sorrendjét tárolja, indulásnál az -től -ig terjedő egész számokkal töltjük fel. LX az szubrutinnak, az szubrutinnak ad jelzést. az eredeti, ill. a -dik menet után kapott együttható mátrixot írja ki. a főelemkereséssel módosított eliminációs szubrutin. a visszahelyettesítő, az ellenőrző, az eredményt kijelző szubrutinok, melyekről a következő részben esik szó. ‐ -ben a menet számát jelzi. A főelemet a szubrutin keresi ki. A K =10 utasítás után a -edik menetet követő egyenletrendszer megoldhatóságát vizsgáljuk. Ha K értéke , az kiíratja az elimináció elkészültét, és visszatér a hívó programba, de ha K értéke vagy , akkor jelzi az egyenletrendszer megoldhatatlanságának okát és a -ra fut. A szubrutin blokkdiagramját az 1. ábra mutatja.
1. ábra
‐ A a főelemet egy -dik menetben a -edik (-edik) oszloptól a -edik oszlopig keresi. Ha a sorban legalább együttható zérus, akkor az rutint hívja és ott nyomtatás után megáll. Az oszlopcsere a -as címkéjű ciklusutasítással kezdődik. A cserélt oszlopok indexeit a vektor megfelelő komponenseinek cseréjével jegyezzük fel. Blokkdiagramját a 2. ábra mutatja.
2. ábra
‐ A csak akkor engedi vissza a program végrehajtást a hívó szegmensbe, ha K=10, azaz ha az eliminációban mindig van zérushoz nem közel eső főelem. Ha a sorban mind a együttható zérussá válik, akkor valamelyik egyenlet előállítható a többiből, ha csak az első tíz zérus, de a -edik nem az, akkor van két egymásnak ellentmondó egyenlet. Ezek után a Gauss-féle eliminációs program első része az alábbi:
5WRITE(3,6) WRITE(3,9)STOP 7WRITE(3,6)WRITE(3,8)STOP 2FORMAT(///50X,18HELIMINAACIOO KEESZ/) 6FORMAT(///50X,19HAZ EGYENLETRENDSZER/) 8FORMAT(5X,14HELLENTONDASOS) 9FORMAT(5X,12HHATAROZATLAN)ENDSUBROUTINE FOEL(K,A,EPL,NYOM)DIMENSION A(10,11),NYOM(10)J=K+1 4IF(J‐11) 1,0,0IF(ABS(A(K, J))‐EPL) 6,6,0J=J+1 6CALL SCR2(J) 1IF(ABS(A(K,J))‐EPL) 0,0,3J=J+1 3DO 5 I=1,10B=A(I,K)A(I,K)=A(I,J) 5A(I,J)=BNB=NYOM(K)NYOM(K)=NYOM(J)NYOM(J)=NBRETURNEND
2. feladat. Program készítendő egy 5×5-ös méretű bűvös négyzet betöltésére és kinyomtatására.
Megoldás: egy lehetséges program az alábbi:
MASTER PR14DIMENSION A(5,5)READ(1,9) AK,DM=1N=3DO 8 J=1,5DO 7 I=1,5A(M,N)=AKAK=AK+DIF(M‐5) 0,1,0M=M+1GO TO 2 1M=1 2IF(N‐5) 0,3,0N=N+1GO TO 7 3N=1 7CONTINUEIF(N‐1) 0,4,0N=N‐1GO TO 8 4N=5 8CONTINUEOESSZ=0.DO 5 I=1,5 5OESSZ=OESSZ+A(I,3)WRITE(3,6) ((A(I,J),J=1,5),I=1,5),OESSZ 6FORMAT(1H1,20(/),5(50X,5F12.2//),50X,×40HA SOR- ILL. OSZLOPOSSZEGEK KOZOS ERTEKE:,×3X,F12.2) 9FORMAT(2F12.2)STOPEND A feladatban nem adtuk meg az elsőként betöltendő, "kezdő'' mátrix elem indexeit, emiatt az tetszőleges. A közölt programban a kezdő elem sor-, ill. oszlopindexeit az M, ill. N azonosítók értékadással kapják. Ha megfelelően adjuk meg az indexeket, akkor nem csak a sorok és oszlopok összege "bűvös'' (ugyanaz a szám), hanem a fő-, ill. mellékátlókra eső elemek összege is. Ilyenkor diagonálisan bűvös a négyzet, ami a példában adott kezdőelem indexekkel is bekövetkezik. A bűvös négyzet további speciális tulajdonsága lehet, hogy a fő-, ill. mellékátlókkal párhuzamos "tört átlók'' mentén elhelyezkedő elemek összege is bűvös, azaz pándiagonális a négyzet. A példánkban a mellékátlókkal párhuzamos tört átlókra ez is fennáll. Pl. a2,1+a1,2+a5,3+a4,4+a3,5 egy ilyen mellékátlóval párhuzamos tört átló elemei. A kitöltés más "szabály'' alapján is történhet, pl. lóugrás szerint. Bizonyos páros rendű mátrixok is lehetnek bűvös négyzetek, ezek kitöltése bonyolultabb. Bűvös négyzetekkel rovatunk tovább nem foglalkozik.
6.2. folytatás. A főelem keresése a megoldás pontosságával is kapcsolatos. Ha mindig a legnagyobb abszolút értékű sor-elemet választjuk főelemnek, akkor növelni tudjuk a pontosságot. Sajnos még ilyen módszer mellett is előfordulhat, hogy az eljárás használhatatlanul pontatlan gyökökhöz vezet, ami a kiindulási mátrix bizonyos tulajdonságaival magyarázható. Ennek kifejtésébe nem bocsátkozhatunk.
6.3. Visszahelyettesítés, ellenőrzés
A visszahelyettesítő szubrutin az eliminált együtthatójú egyenletrendszerből "alulról fölfelé haladva'' kiszámítja a gyököket. Ezek sorrendje azonban a megcserélt oszlopok sorrendjével egyezik. Hogy végül tudjuk, melyik az első, második stb. gyök, a NYOM vektor segítségével helyre kell állítani sorrendjüket. Ezt is a visszahelyettesítő szubrutin végzi. A k-adik gyök egy olyan tört, melynek nevezője a sor fődiagonálisba eső eleme. A számlálót kéttagú kifejezésnek tekinthetjük, első tagja a k-adik sor 11-edik eleme, a második tagja egy C szám, melynek számítása a C=C+A(L+1,K)*Y(K) utasítással történhet, ha C kezdőértéke zérus, és L értékét 10-től visszafelé (k+1)-ig változtatjuk. A pontosság bizonytalansága miatt a B tömbben eltett eredeti együttható mátrix felhasználásával visszahelyettesítjük az eredmény vektor komponenseit az egyenletek bal oldalába, és a helyettesítési értékeket kivonjuk a jobb oldali számértékekből. Ha a különbségek egy kívánt pontossági intervallumba esnek, az eredmény vektort jónak mondjuk.
Feladatok
1. Írjuk meg a PR13 hiányzó szubrutinjait. (Az ellenőrző vektort is nyomtassa!) 2. A KÖMAL 55. kötet 2. száma 63. oldalán levő 2077-es feladatot módosítsuk az alábbi szerint: Két db egységnyi sugarú körlemez úgy fekszik egymáson, hogy együttvéve 6π egységnyi területet fednek le. Szorítsuk olyan két tört közé a középpontok távolságát, amelynek nevezője 1000, a számlálóik egészek, és a számlálóik különbsége 1. A feladat számítására készítsünk programot.
|