• Nem Talált Eredményt

Gépi számábrázolás és következményei

In document Numerikus módszerek (Pldal 55-63)

Ellen®rz® kérdések

2. Modellalkotás és hibaforrásai

2.5. Gépi számábrázolás és következményei

2.4.4. deníció.

A

κ(d) = lim

δd→0

kxd+δd−xdk/kxdk kδdk/kdk értéket a (2.4.1) feladat (relatív) kondíciószámának nevezzük.

A kondíciószám tehát szemléletesen azt méri, hogy pl. a bemen® adat 1%-os megváltozása hány százalékos változást eredményez a megoldásban. Ha a kondíciószám kicsi, akkor jól kondicionált feladatról, ha pedig nagy, akkor rosszul kondicionált feladatról beszélünk. Hogy mit értünk kicsin vagy nagyon, az mindig az aktuális feladattól elvárt viselkedés függvénye. A kondíciószám, ahogy jeleztük is, a dparaméter függvénye. Amennyiben xd vagyd nulla, a relatív kondíciószám nem értelmezhet®.

2.4.5. deníció.

A

κabs(d) = lim

δd→0

kxd+δd−xdk kδdk értéket a (2.4.1) feladat abszolút kondíciószámának nevezzük.

Korrekt kit¶zés¶ feladatok esetén degy környezetében az xd+δd (egyértelm¶) megoldás felír-hatóxd+δd=G(d+δd)alakban, ahol aGfüggvényt megoldófüggvénynek hívjuk. Amennyiben a Gfüggvény dierenciálhatód-ben, a relatív kondíciószámra a

κ(d) = kG0(d)k · kdk kG(d)k , míg az abszolút kondíciószámra a

κabs(d) =kG0(d)k formulát nyerjük.

2.4.6. példa. A2.4.3.példában szerepl® egyenletrendszer esetén a kondíciószámot 2-es nor-mában számolvaκ(5)≈1985adódik, ami azt jelenti, hogy adparaméter 2%-os változása a megoldásvektor 2-es normáját 3970%-kal is megváltoztathatja. Így érthet®, hogy a megoldás annyira nagyot változhatott.

Természetesen a modellalkotás során kerülni kell a rosszul kondicionált feladatokat, vagy leg-alábbis jó tudnunk egy feladatról, hogy annak megoldása rosszul kondicionált. Ennek jelent®sége onnét látszik, hogy egy rosszul kondicionált feladatban, ha a bemen® adatok mérési eredmények, akkor egy kis mérési pontatlanság is jelent®sen megváltoztathatja a feladat megoldását.

2.5. Gépi számábrázolás és következményei

Ahhoz, hogy megértsük, hogy a kerekítési és ábrázolási hibák honnét származnak, ismernünk kell, hogy a számítógépek hogyan kezelik a valós számokat. Természetesen számtalan kezelési mód létezik. Mi ezek közül a MATLAB által használt dupla pontosságú lebeg®pontos számokkal fogunk foglalkozni. A MATLAB lebeg®pontos számrendszere a kettes számrendszeren alapszik.

Ennek ellenére a konkrét számpéldákat tízes számrendszerben mutatjuk be, hiszen azok sokkal megszokottabbak, és a jelenségek hasonlóan érvényesek a kettes számrendszerben is.

2.5.1. példa. Felsorolunk néhány MATLAB által szolgáltatott eredményt.

• A MATLAB tg(π/2) értékére az1.6331e+ 016értéket adja, ami nyilvánvalóan hibás, hiszenπ/2-nél nincs is értelmezve a tangens függvény.

• 2−1074 = 4.94066e−324, de2−1074/2 = 0 és2−1074·1.2 = 4.94066e−324 = 2−1074, ami megintcsak hibás.

• 10310=Inf.

• Összetettebb példaként tekintsük az alábbi eljárástπ értékének meghatározására [15]:

Jelentseyk az egységkörbe írt szabályos2k-szög félkerületét. Ekkor nyilványk →π, ha k→ ∞. Továbbá érvényes az

yk+1= 2k+1 s

1 2

1−

q

1−(2−kyk)2

rekurzió, aholy1 = 2, y2= 2√

2, . . . . Az iterációt számítógépen végrehajtva az alábbi számokat kapjuk:y10= 3.14158627,y12= 3.14166137, . . . ,y19= 3.70727600, . . . . Azaz szemmel láthatóan a sorozat nem tartπ-hez. Ebben a feladatban a matematikai vagy numerikus modell a πértékét szolgáltatja, de a számítógépes modell már nem.

A számítógép két egysége játszik fontos szerepet a számítások elvégzésénél. Az egyik a pro-cesszor (CPU=central processing unit), a másik pedig a memória. A processzor végzi a m¶vele-teket, a memóriában pedig a m¶veletekhez szükséges adatokat tároljuk. Innét rögtön láthatjuk, hogy pl. irracionális számokat vagy végtelen szakaszos tizedes törteket nem tudunk számítógé-pen tárolni. A memória méretének korlátozottságából következik, hogy csak véges sok racionális számot tudunk a memóriában elhelyezni. Megjegyezzük, hogy mivel a számítógépek a kettes szám-rendszert használják általában a tároláshoz, ezért pl. az 1/10-et sem tudják pontosan eltárolni, hiszen az

1 10 = 1

24 + 1 25 + 1

28 + 1 29 + 1

212 + 1 213 +. . .

egyenl®ség miatt kettes számrendszerben az1/10végtelen szakaszos tizedes tört.

A valós számok ábrázolására a legelterjedtebb módszer az ún. lebeg®pontos számábrázolás.2 Ebben az esetben a valós számot a

±bka0

b0 +a1

b1 +a2

b2 +· · ·+ap−1 bp−1

≡a0.a1a2. . . ap−1×bk (2.5.1) alakban írjuk fel (ha lehet), aholb a számábrázolás alapja,pa szerepl® számjegyek (mantissza) száma, éska kitev® (karakterisztika). Azai(i= 0, . . . , p−1)számjegyekr®l feltesszük, hogy azok az alapnál kisebb nemnegatív egész számok. Ha a06= 0, akkor azt mondjuk, hogy a felírt szám normálalakban van. Ha normálalakban írjuk fel a számokat, akkor az ábrázolásuk egyértelm¶ lesz.

Természetesen, ha egy valós szám nem írható fel ilyen alakban, akkor a számot kerekítenünk kell.

Megmutatható, hogy a kerekítés szokásos szabálya miatt (nevezetesen, hogy az 5-ös számjegyet felfelé kerekítjük) a számítások értéke bizonyos esetekben felfelé tolódhat, így a számítógépek

2A lebeg®pontos számábrázolás bevezetése Konrad Zuse (1910-1995) német mérnök nevéhez köthet®, aki több számítógépet is épített az éppen a második világháborúra készül®d® Németországban. Eredményeire nem gyeltek akkoriban fel. Már 1941-ben létrehozott egy jelfogókkal m¶köd®, a lebeg®pontos kettes számrendszeren alapuló, teljesen programozható számítógépet [37].

2.5. Gépi számábrázolás és következményei 53

általában a párosra kerekítés (angolul: round to even) szabályát használják. Azaz pl. a 3.155-öt a szokásos módon 3.16-ra kerekítjük felfelé (a 6 páros), a 3.145-öt viszont 3.14-re lefelé kerekítjük (a 4 páros).

Könnyen látható, hogy a lebeg®pontosan ábrázolható számok rendelkeznek az alábbi tulaj-donságokkal:

• Csak véges sok racionális számot tudunk el®állítani.

• A lehetséges számok nem alkotnak testet. Pl. nem kommutatív vagy asszociatív az össze-adás). (pl.:123.4+0.04+0.03+0.02+0.01kétféle sorrendben összeadva más-más eredményt ad ap= 4, b= 10,k=−2, . . . ,2 lebeg®pontos számrendszerben (jelölése:F(4,−2,2)).

• Az el®állítható számok korlátos halmazt alkotnak. Pl.F(4,−2,2)-ben a legnagyobb el®állít-ható szám a 999.9, a legkisebb pedig -999.9. Ha ezeknél nagyobb abszolút érték¶ lesz egy számítás eredménye, akkor túlcsordulásról beszélünk.

• A nulla körül "relatívan nagy ¶r van". Pl. F(4,−2,2)-ben a legkisebb pozitív el®állítható szám normál alakban 0.01, nem normál alakban 0.00001. Ha ezeknél kisebb pozitív szám lesz a számítás eredménye, akkor azt már nullaként ábrázolja a számítógép (alulcsordulás).

• Az 1 utáni legkisebb el®állítható szám az ún. gépi epszilonnal (εg) nagyobb 1-nél. Az F(4,−2,2)rendszerben ez0.001.

A MATLAB dupla pontosságú lebeg®pontos számrendszere a következ® struktúrájú: A szá-mokat kettes számrendszerben (a (2.5.1) el®állításbanb= 2) állítja el® 64 bitnyi tárhelyet felhasz-nálva. Egy biten tároljuk az el®jelet (0 = +,1 =−). 52 biten a mantisszát tároljuk, pontosabban annak a tizedespont utáni részét, hiszen normálalak esetén a tizedesponttól balra mindenképpen 1-esnek kell szerepelnie. 11 biten a karakterisztika tárolódik úgy, hogy a kitev®höz hozzáadunk 1023-at, és az így nyert szám 2-es számrendszerbeli alakját tároljuk. Így a karakterisztika -1023-tól 1024-ig tárolható. A -1023-as karakterisztika a 0 (ha a mantissza is csupa nulla) ill. annak jelzé-sére szolgál, hogy az adott szám nincs normálalakban (ilyenkor az értéke±0.a1. . . a52×2−1022).

A csupa 1-essel kódolt 1024-es karakterisztika speciális célokra foglalt. Ha a mantissza nem nulla, az azt jelenti, hogy a számítás m¶velete nem szám (jelölésben NaN = not a number). Ilyen pl. a 0/0m¶velet eredménye. Ha a mantissza nulla, akkor az el®jelbit szerint vagy +∞-t, vagy−∞-t jelöl.

A legnagyobb ábrázolható pozitív szám az M = 1.111. . .111

| {z }

52db

×21023= 1.79769×10308 és a legkisebb ábrázolható pozitív szám

m= 0.000. . .000

| {z }

51db

1×2−1022= 4.94066×10−324.

Vegyük észre, hogy míg az els® szám normálalakban van, addig a második nem. A normálalakban ábrázolható legkisebb pozitív szám az

1.000. . .000

| {z }

52db

×2−1022= 2.22507×10−308. Az 1-et az

1≡1.000. . .000

| {z }

52db

×20

módon ábrázolhatjuk. Az 1-nél nagyobb legkisebb ábrázolható szám az 1.000. . .000

| {z }

51db

1×20,

amiεg= 2−52-nel nagyobb mint az 1.

Jelentse fl(x)egyx∈R,−M ≤x≤M valós szám lebeg®pontosan ábrázolt képét.

2.5.2. tétel.

Legyen−M ≤x≤M. Ekkor

|fl(x)−x| ≤

0, ha|x|< ε0,

εg|x|

2 , haε0≤ |x| ≤M.

Bizonyítás. A tétel els® része triviális. Essen xaz xi < xj szomszédos lebeg®pontos számok közé. Legyenxi mantisszájapjegy¶, és karakterisztikájak. Ekkor

|fl(x)−x| ≤ xj−xi

2 = b−p+1bk

2 ≤εg|x|

2 .

Az εg gépi epszilon felét gépi pontosságnak nevezzük. Jelölése u. A gépi pontosság tehát a lebeg®pontosan ábrázolt számok relatív hibakorlátja. A fenti tétel közvetlen következménye, hogy egyM-nél nem nagyobb abszolút érték¶ valós szám lebeg®pontos képére igaz azfl(x) = (1 +δ)x egyenl®ség, ahol|δ| ≤u.

Egy számítógépes számítást leegyszer¶sítve úgy képzelhetjük el, hogy a processzor megkapja azt a két számot, amikkel m¶veleteket kell végeznie, lebeg®pontossá alakítja ®ket, ezekkel ponto-san elvégzi a m¶veletet, majd pedig kerekíti az eredményt úgy, hogy lebeg®pontoponto-san ábrázolható legyen. Legyen egy tetsz®leges m¶velet valós számok között. Ekkor azxésy valós számokkal számítógépen a következ® értéket kapjuk a m¶velet eredményére:

xy:=fl(fl(x)fl(y)).

Nézzünk meg két alapm¶veletet (a kivonást és az osztást), hogy hogy viselkedik lebeg®pontos számokkal végrehajtva! El®ször vizsgáljuk a kivonás relatív hibáját(x, y >0).

|x-y−(x−y)|

|x−y| =|(x(1 +δx)−y(1 +δy))(1 +δ)−(x−y)|

|x−y|

≤|(xδx−yδy)(1 +δ)|

|x−y| +|δ| ≤u(1 +u) x+y

|x−y| +u, ahol|δx|,|δy|,|δ| ≤u.

Ha x közel van y-hoz (azaz két egymáshoz közeli számot vonunk ki egymásból), akkor a különbség relatív hibája jóval nagyobb lehet, mint a gépi pontosság.

Két közeli szám kivonásánál abból is ered hiba, hogy a mantissza hossza véges. Ezt a jelenséget kiegyszer¶södésnek nevezzük. A jelenség szemléltetésére mutatunk be most két példát.

2.5. Gépi számábrázolás és következményei 55

2.5.3. példa. Tekintsük azF(10,−10,10)számrendszert. Ebben írjuk fel az alábbi gyököket:

9876 = 9.937806599×101, √

9875 = 9.937303457×101. Most vonjuk ki egymásból a két számot.

9876−√

9875 = 0.000503142×101= 5.03142 0000

| {z }

értelmetlen

×10−3.

A megjelen® 4 darab nullának a számításokhoz nincs semmi köze, abból erednek, hogy a számjegyeket balra toltuk a mantisszában a normálalak létrehozásához.

A kiegyszer¶södést kiküszöbölhetjük a nevezetes szorzat alkalmazásával:

Jól mutatja a két számolás közti különbséget, hogy az els® érték relatív hibája2.6×10−7, míg a másodiké1.6×10−10.

2.5.4. példa. A2.5.1.példában is a kiegyszer¶södés okozta a gondot. Haknövekszik, akkor 1−p

1−(2−kyk)2 második tagja egyre közelebb lesz 1-hez, így kiegyszer¶södés lép fel. A jelenség nyilván kiküszöbölhet® a képlet megfelel® átírásával, nevezetesen az

yk+1=yk

s 2

1 +p

1−(2−kyk)2 iterációban már nem lép fel kiegyszer¶södés.

Most vizsgáljuk az osztás hibáját! Legyenekxésy pozitív számok.

nevez®ben szerepl® szám jóval kisebb a számlálónál. Megjegyezzük, hogy a relatív hiba3u (azaz gépi pontosság) nagyságrend¶.

Azt, hogy a lebeg®pontos számokkal milyen módon kell számolni ill. hogy hogy kell kerekíteni

®ket, szabványok rögzítik. A legelterjedtebb ilyen szabvány az IEEE 745-ös (IEEE=Institute of Electrical and Electronics Engineers [16]). Az interneten több, a lebeg®pontos számokat szemlél-tet® alkalmazás érhet® el. Ezek közül ajánlunk kett®t a [17,38] honlapokon.

A számítógépen megírt programokat jól jellemzi az, hogy végrehajtásuk során hány lebeg®pon-tos m¶veletet (+,−,·, /) hajtunk végre. Ezek megszámolásával összehasonlíthatunk két eljárást futási sebesség szempontjából. A m¶veletigényt általábanf lop-ban szoktuk mérni (oating point operation).

2.6. A fejezettel kapcsolatos MATLAB parancsok

>> realmin % A legkisebb ábázolható pozitív szám.

ans =

2.225073858507201e-308

>> realmax % A legnagyobb ábázolható pozitív szám.

ans =

1.797693134862316e+308

>> eps % A gépi epsilon.

ans =

2.220446049250313e-016

Végezzünk el egy kísérletet arra vonatkozóan, hogy a számítógép mennyi id® alatt hajt végre108 lebeg®pontos m¶veletet. A futási id®t a tic (stopper indul) és toc (stopper megáll) parancsokkal mérhetjük. Vizsgáljuk az összeadást, a szorzást és az osztást.

>> x=sqrt(2); tic, for i=1:10^8 x=x+1; end, toc;

x=sqrt(2); tic, for i=1:10^8 x=x*1.00000001; end, toc;

x=sqrt(2); tic, for i=1:10^8 x=x/1.0000001; end, toc;

Elapsed time is 47.930000 seconds.

Elapsed time is 49.164000 seconds.

Elapsed time is 66.737000 seconds.

Látható tehát, hogy az összeadáshoz és a szorzáshoz szinte pontosan ugyanannyi id® kellett, míg az osztáshoz kb. 36%-kal több. Az adatok azt jelentik, hogy a használt számítógép kb.2×106 m¶veletet (speciálisan szorzást) képes 1 másodperc alatt elvégezni.

2.7. Feladatok

Lebeg®pontos számábrázolás

2.7.1. feladat. Vizsgáljuk meg, hogy korrekt kit¶zés¶-e azx+dy= 1, dx+y= 0 egyenletrend-szer advalós paraméter függvényében! Adjuk meg a kondíciószámot maximumnormában!

2.7.2. feladat. Vizsgáljuk meg az x= −d+√

d2−4 kifejezés kondicionáltságát a d változó függvényében! Milyendértékek esetén lesz korrekt kit¶zés¶ a feladat? Adjunk meg olyandértéket, melyre a (relatív) kondíciószám 100-nál nagyobb!

2.7. Feladatok 57

2.7.3. feladat. Aza= 0.001választás mellettA= 1−1/(1−2a)értéke−0.002004008016. Hatá-rozzuk meg mi isAértékét egy tízes számrendszer¶, hatjegy¶ mantisszás lebeg®pontos számokat használó számítógépen! Javasoljunk numerikus szempontból jobb számolástA-ra, és végezzük el úgy is a számolásokat!

2.7.4. feladat. Aza= 1000választás mellettA= 1/(√

a+ 1−√

a)értéke63.26136064087. Ha-tározzuk meg mi isAértékét egy tizes számrendszer¶, hatjegy¶ mantisszás lebeg®pontos számokat használó számítógépen! Javasoljunk numerikus szempontból jobb számolástA-ra, és végezzük el úgy is a számolásokat!

2.7.5. feladat. Egy 10-es számrendszeren alapuló számítógép a sinx, cosx, x2 függvények értékeit pontosan számolja, majd az eredmények ábrázolásánál hatjegy¶ mantisszára kerekít.

Határozzuk meg ezen a számítógépen azf(x) = cos2x−sin2xfüggvény értékét azx= 0.7854 helyen! Mekkora a számított eredmény relatív hibája? Indokoljuk az eredményt! Javasoljunk jobb képletet azf(x)érték kiszámítására!

2.7.6. feladat. Írjunk MATLAB programot az

yk+1= 2k+1 s

1 2

1−q

1−(2−kyk)2

iteráció vizsgálatára! Hasonlítsuk össze az eredményt az

yk+1=yk

s 2

1 +p

1−(2−kyk)2 iterációval! Magyarázzuk meg az eltérést!

2.7.7. feladat. Írjunk MATLAB programot az ex= lim

n→∞

n

X

i=0

xi i!

sor összegének kiszámítására. Futtassuk negatív értékek esetén (pl.x=−25)! Mit tapasztalunk?

Adjunk magyarázatot a jelenségre! Javasoljunk jobb módszerte−25 kiszámítására!

2.7.8. feladat. Legyen F(p, kmin, kmax)a tizes alapú lebeg®pontos számok halmaza (pa man-tissza hossza, kmin és kmax pedig a minimális és maximális karakterisztikát jelentik), ahol p a mantissza hossza, éskminéskmaxa karakterisztika legkisebb és legnagyobb értéke. Adjuk meg az F(1,−2,2) rendszerben megadható számokat!

2.7.9. feladat. Adjuk meg azF(1,−2,2)rendszerben az1/3,1/900,20·200,(((2 + 0.1) + 0.1) +

· · ·+ 0.1)(10 összeadás), (((0.1 + 0.1) + 0.1) +· · ·+ 0.1) + 2értékeket!

2.7.10. feladat. Adjunk meg olyan lebeg®pontos számrendszert (F(p, kmin, kmax)), melyben az alábbi számok ábrázolhatók!

a) 5,50,500,5000;

b) 5,5.5,5.55;

c) 5,0.5,0.05,0.005;

d) 5,55,555,5555.

2.7.11. feladat. Milyen lebeg®pontos számrendszerben számolható kerekítés nélkül 2.2·3.45,1/80, 2×102·7×102?

Ellen®rz® kérdések

1. Milyen tulajdonságai vannak egy korrekt kit¶zés¶ feladatnak?

2. Mikor mondjuk egy korrekt kit¶zés¶ feladatról, hogy rosszul kondicionált?

3. Hogy ábrázolja a MATLAB a valós számokat, és milyen következményei vannak ennek?

4. Soroljuk fel azokat a lebeg®pontos m¶veleteket, melyek nagy hibával rendelkezhetnek!

5. Mekkora a MATLAB gépi pontossága?

In document Numerikus módszerek (Pldal 55-63)