• Nem Talált Eredményt

6.4. Egyéb módszerek

6.4.1. Reciprok érték felhasználása

Egynél nagyobb szamok /különösen számkonstansok/

esetén néha célszerü.rociprokjukat venni. Ha például tudjuk, hogy jx.\-j7a| Cl , akkor a számítást x = formában végez­

zük el. 7

Ugyanúgy járunk el, ha egynél csak nagyobb értéke­

ket felvevő függvényekkel számolunk. Pl ex helyett / x > 0 /

= e -et számítjuk ki.

6,4,2, Automatikus normálás módszere.

Egyes feladatoknál az adatok normálása a számitás folyamán magával a géppel végezhető el. Pl. Legyen adva az 1. ábrán látható rácstartomány; s legyenek az első két sorá­

ban lévő rácspontértékek ismertek. Számítsuk és nyomtassuk ki egymásután a többi rácspontban is az értékeket, ha az i-edik sor j-edik e^mét: a- .-t az

tehát a következőképpen járhatunk e l. Mielőtt egy uj sor elemeit kezdenek számolni, előbb megvizsgáljuk, hogy az

előtte lévő két sor minden eleme kisebb-e ^ -n ál. Ha kisebb, akkor a /»/ képlet alapján elvégezzük a számitást. Ha nem, • akkor előbb a szóbanforgó két sor minden elemét 5-mal oszt­

juk, de egyúttal megjegyezzük /pl 2“^': kinyomtatásával/, ta;gy az ezután következő a — értékek helyett azók egyharma- dát számoltuk k i. Ha valamelyik következő sor kiszámításához ú jra normálni k e ll, akkor újabb 2~^° kinyomtatásával jelezzü]

hogy az ezután következő értékek kilencszeresét k ell venni, hogy a tényleges értéket megkapjuk,. . .stb.

Másik példa:

Készítsük el az e“x függvény /x 0/ kiszámításának programját az

e 1

+ a4x közelitőképlet alapján, ahol

ax

= 0,2500

1095

a

2

= 0,0511 9805

= 0,00267525 a

4

= 0,00012799 St- =

0

,000014-87

/ A /sec/ közelitőképlet hibája = 0,000002./

/«305/

A számlálót- és a nevezőt is 2-^vel osztva:

.-x

<

-1

2

_____________ ^

a. 1 y

<

5

— + —?> x + ... + ö

^

x

Ha x > o, akkor e x ^.l ; tehát csak arra kell ügyelni, hogy a nevező ne csorduljon túl. Látható, hogy ha x ¿ 1 akkor

x + ••• + ^ 5 / < ! • Tegyük fel, hogy

2

n~^ k x <r

2

n s számitsulc ki e*"x helyett e x= e^-t..

* e~x - ( ■

1

2

ac al - a

2" + 2 “ z + “2° - ' 1 = - 1 í 2 + . . . + y s igy a nevező sem csordul túl.

,n Nyilván: e- = ( e - ) 2

Készítsünk el egy olyan programot, amely a 0 c x d 6 -bán lévő x-értékekre működik, mégpedig úgy, hogy mindig

-ból indul ki, de ha pl. x k

8

akkor

2

(Jg) = g, ha x á

4

akkor 4 ( ^ j = ^ s.i.t. értékkel számol.

Rendezzük át a /x x k/ képlet nevezőjét a Hornér séma szerint. így:

4 -x

(

1

2

/ / / / ^ X + 2 ^ /x + 2 ^ /x + 2 ^ /x + 2 ~ /x +

Legyen a rekeszelosztás a következő: /a címeket betűvel jelölve./

Munkarekeszek: m, m+

1

, m+2.

-133-' Kcmstansok:

\ /k/ * 1+ 2o k + 5 m + 2

’V(

/k+1/ = 1+ 2o k + lc m + 2

■- /k+2/ =

\

4 *

A + 3 / = a4

“5“ i

/k+4/ =

4 s

/k+5/ = a2 T "

/k+6/ = al T "

/k+?/ p ao

“2“

‘ * Legyen

/m/ = T6 =: X.

c

A program:

>

t A 05 k t+12

t+1 A

05

< 4>2“3°> m+1 t+2 11 < ? > m

t+3 FU $4 t+4. t+7

t+4 : 02 / I n

< 2 / m.

t+5 01 (2-50) m+1

t+6 FU 54 t+lc t+2

t+7 + 00 <2“3o> m+1

t+lo A 05 k+2. m+2

t+lX x 05 m rn+2

t+12 (- - - - )

t+13 + 00

/Vcor—11CV1xX t+12

t+14 1 M , 71 k+1

t+l

5

FU 54 t+11 t+16

.

1

•134-t+16

• > 12 m+2 < | >

t

+17

U

1

24 t+21 m+2

t+2o X

03

m+2 m+2

t+21 - 01 <2~^°> m+l.

t+22 EU 34 t+23 t+2o

t+23.

A felsorolt módszereken kivül egyes feladatoknál

"bizonyos speciális módszerek is használhatók. Periodikus függvényeknél jpl. eltolási transzformáció alkalmazható, így a sin x ü l , cos x függvény esetén a sin x = sin /x - 2k li / 9 cos x = cos /x - 2k TT / egyenlőség alapján az u = x - 2k 1T transzformációval elérhető, hogy

-

tf

a u < T legyen.

Minthogy sin /-u/ = - sin u és cos /-u/ = cos. u.

azért elég u p*zitiv értékeire szorítkozni.

Ha |uf A

-hj,

akkor - "ij: 1

Ha j aj > , akkor felhasználva sin / H -

\u\

/= sin Ju| ; cos /ti - |u| / = - cos 1*1 egyenlőségeket a v = li - |uj transzformációval

0

Á ^ n A

1

így a sin v = 2 sin ^ cos ^ ; ccs v = cos2 ^ - sin2 képletek alapján végül:

f

sin }xj = 2 sin |r. COS ; COS jxf = COS2 2 - sin2 ^ Ezt a transzformációt természetesen a géppel végeztetjük el;

feltesszük, hogy x £ 2 15

J

és a bináris pcntqt középre helyez­

zük.

*

J

-125-A transzformációs módszerek'segítségével nem lehet minden problémát megold-ni. llem mindig sikerül pl. a fel­

adatban szereplő adatok számára még csak közelitő korláto­

kat sem adni: Egy differenciálegyenlet vagy lineáris egyen­

letrendszer megoldásának maximumáról például általában sem­

mit sem tudunk mondani.

Ha a szereplő adatok nagyságrendje lényegesen külön­

bözik, akkor előfordulhat, hogy a skálafaktorok bevezetesevel a kis számok gépi O-vá válnak, vagy legalábbis a jegyveszte ség igen nagy lesz.

Ha a transzformációs módszerek a fenti okok miatt nem alkalmazhatók, akkor a már említett másik módszerhez, a lebegőpontos programozás módszeréhez folyamodunk. Erről majd a későbbiekben lesz szó.

t

SZUBRUTINOK^ AMjÜJ'IA ZÁSA

7*1» Nyílt és zárt _s znhrirfejnok.

Szubrutinomnak nevezzük általában az olyan részprog­

ramokat, amelyek egy-egy meghatározott, önálló feladatot haj- tanak végre. A szubrutinokat, mint "építőkockákat” sok eset­

ben felhasználhatjuk hosszabb programok összeállításánál.

Lássunk ezzel kapcsolatban egy konkrét példát.

Készítsünk programot az y.= §■ e “ Vx~0 »l - o fi függ­

vény értékeinek kiszámításához. A program elkészítésénél te­

gyük fel, hogy a 0,1 k. xa-1 intervallumba eső x érték a 0600 cimü memóriarekeszben van elhelyezve, a hozzátartozó y értéket pedig a 0601 cimü memóriarekeszbe kell bevinni. A programot magát a 0100 cimü rekesztől kezdve, a program konstansait a

0-500

oimü rekesztől kezdve helyezzük el, mun­

karekeszeknek a 0602-0603 rekeszeket használjuk.

A számítás menetrendje igen egyszerű:

-157

i

x—

0,1 060 5

■ч/

i V/0603/*=S 0601

j о-/0601/=^ 0602 |

[|/О6ОЗЛ0,1=** 060lj - J

*

Az első blckknalc megfelelő utasitáscsoportot azonnal felírhatjuk:

t

0100 11 0500 0600

0101 U1 24 0102 0605

ahol /

0500

/ =

0,1

/konstans/.

A második blokk programozásánál emlékeztetünk arra, hogy a négyzetgyökvonás programját már elkészítettük. Ez a programa/véletlenül választott/

0011

cimü rekeszben tárolt szám négyzetgyökét képezi az y0= /

0015

/ kezdőértékből kiindul­

va a 0012 cimü rekeszben. A program a következő konstansokból, illetve utasításokból áll: /0014/ = 0; /0016/ = /0017/ =

= 2 ^c . Maga a program:

0000 Á 05 0014 0013

0001 Á 05 0015 0012

0002 + 00 0015 0012

0005

• * 12 0012 0011

0004 1-, 51 0012

-0005 ¿x 25 0016 0013

0006

i + » 50 00.1?

-0007 FU

54

0002 0010

0010

A fölirt programot könnyen "beépíthetjük” a tekintett példa programjába, ha figyelembevesszük a-következőket:

a. / Az yQ kezdőértéket numerikusán meg kell adni; jelen esetben célszerű az yQ= /"gépi egyes”/ választás.

b. / A négyzetgyökvonás programját most nem a 0000-0007, ha­

nem a 0102-0111 rekeszekben kell elhelyezni.

A négyzetgyökvonáshoz szükséges konstansok és para­

méterek tárolására, illetve munkarekeszékként továbbra is felhasználhatnék a

0011-0017

rekeszeket /feltéve, hogy ezek a rekeszek nincsenek valami más célra lefoglalva/, aaonban az egyöntetűség kedvéért, és szükségtelen átviteli utasítá­

sok megtakarítása végett mégis célszerűbb a négyzetgyökvonó program konstansait a 0501-0502 és 0515 rekeszekben, az x számot a 0605 rekeszekben, az y0 =

1-2~J0

értéket a 0505 re­

keszben, a négyzetgyökvonás eredményét a 0601 rekeszben tá­

rolni, munkarekésznek pedig a 0602 rekeszt használni. Ennek megfelelően természetesen a négyzetgyökvonás programját tel­

jesen ”át kell cimezni": minden mennyiség régi cime helyébe az illető mennyiség uj címét kell beírni. Az átcimezésnél jól felhasználhatjuk az alábbi "átcimPző táblázatot” :

Megnevezés Régi cim Uj cim 0605 0601 0505 0 1 0 2 -0501 0502 0515 0602

X 0011

У = v"x 0012

^0 0015

a négyzetgyök-

vonás programja 0000

-f iг 0016

konstansok /+ 0 0014

| V »

0017

munkarekesz 0015

139-A második hl ní-kp^k vég^re<3irényben a következő utasi-táscsoport felel meg:

0102 Á 05 0502 0602

0103 Á 05 0503 0601

0104 + 00 0602 0601

0105

• 1 12 0601 0603

0106

i

31 0601

-0107 lx 23 ■ 0501 0602

0110

l + >

30 0515

-0111 FU 34 0104 0112

A harmadik blokk programozásénál hasonló módon fel­

használhatjuk az y = e~x függvény értékeinek kiszámítására készített programot. Ebben a programban nem tüntettük fel a szereplő mennyiségek valódi /abszolút/ címeit, hanem rela­

tív címeket /betü-cimeket, illetve szögletes zárójellel ki­

jelölt címeket/ alkalmaztunk. A program az m cimü rekeszben tárolt x = jg értékből az e“x értéket az m+2 cimü rekeszben állítja elő, és a következő konstansokból, illetve utasítá­

sokból áll:

/k/ = ¿+20 k+3 m+2;

/k+2/ = +0,00000744;

/k+4/ = +0,00133662;

/k+6/ = +0,12500^46;

m+2 munkareke s zek.

t

0

A 05

t+1 Á 05

t+2 ~ > 11 t+3 "34

t+4 : 02

t+5 01

t + 6 . FU 34

/k+1/ = +20 k+10 m+2;

/k+3/ = +0,00006399;

/k+5/ = +0,01559902;

/k+7/ =

\

í A program maga:

k t+12

(4.

2-3°) m+1

<Z> m

t+4 t+7

(

7

)

m

< 2 -3c) m+1 t+10 t+2

-140-t+7 + 00 < 2 - ^ > m+1

t + 1 . Á 05 k+2 m+2

t+li X 03 m m+2

t+12 /4+ 20 k+3 m+2/

t+12 + 00 < 2 - 1 8 > t+12

t+14 4 M » 71 k + 1

-t

+15

FU 54 t+11 t+16

t+16 • » 12 ' m+2 /1\

t

+17

ül 24 t+21 \2Vm+2

t+20 X 03 m+2 m+2

t+21 - 01 m+1

t+22 FU 34 t+23 t+20

t

+23

• . i

Ezt a programot is könnyen beépíthetjük, ha a rela­

tív cimek helyébe megfelelő abszolút cimeket Írunk be. A je­

len esetben a t, k és m bctü-cimeknek célszerű a t =

0113

,

k = 0504, m = 0601 értékeket adni. Legyen továbbá /i)= 0513,

<2~18/ = 0514, <2""3°) = 0515, <4.2’3°v= 0516.

A helyettesítéseket elvégezve azonnal felírhatjuk a harmadik blokknak megfelelő utasításcsoportot:

0112 X 03 0520 0601

f

0113 Á 05 0504 0125

0114 Á 05 0516 0602

0115

“ » 11 0515 0601

0116 FU 54 0117 0122

0117 02 0515 . 0601

0120 - 01 0515 0602

0121 FU 54 0123 0115

0122 + 00 0515 0602

0123

Á 05 0506 0603

m

0124 X 05 0601 0603

0125 /4 + 20 0507

0603

/

0126 + 00 0514

0125

'

-1*1-0127 i\-\> 71 .0305

0150 FU 34 0124 0131

0131

•» 12 0603 .0515

0132 ül 24' 0134 0603

0133

X

03 0603 0603

0134 01 0515

0135 FU 34 0136 0133

. negyedik blokknak megfelelő utasitáscsoport:

0136

X , « H

K\

C517 0003

0137

i -

21 0500 0601 .

0140