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
1095a
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 + ... + ö^
xHa 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 <r2
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
akkor2
(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 < ? > mt+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
U1
24 t+21 m+2t+2o X
03
m+2 m+2t+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: 1Ha 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óval0
Á ^ n A1
í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 helyezzü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, munkarekeszeknek 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 kiindulva 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 00110004 1-, 51 0012
-0005 ¿x 25 0016 0013
0006
i + » 50 00.1?
-0007 FU
540002 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 rekeszben, 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 »
0017munkarekesz 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 06030106
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 Fü "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+16t+16 •• » 12 ' m+2 /1\
t
+17
ül 24 t+21 \2Vm+2t+20 X 03 m+2 m+2
t+21 - 01 m+1
t+22 FU 34 t+23 t+20
t
+23
• . iEzt 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 06010116 FU 54 0117 0122
0117 •• 02 0515 . 0601
0120 - 01 0515 0602
0121 FU 54 0123 0115
0122 + 00 0515 0602
0123
Á 05 0506 0603m
0124 X 05 0601 0603
0125 /4 + 20 0507
0603
/0126 + 00 0514
0125
'