Wat is het nut van logaritmen?
Ze zijn ongeveer net zo nuttig als optellen, aftrekken, delen, worteltrekken, dat soort dingen. Tegenwoordig pakken we voor alle berekeningen een rekenmachientje, maar vroeger greep de mens naar dikke tabellenboeken. Vooral tabellen met logaritmen waren erg gewild vanwege een bijzondere eigenschap. In plaats van moeizaam vermenigvuldigen en delen hoefde je slechts logaritmen op te tellen of af te trekken. Logaritmen zelf kon je praktisch niet uitrekenen, die moest je in een tabel opzoeken.
Eindeloze tabellen heeft men samengesteld om het rekenen met logaritmen te vergemakkelijken. Talrijke interpolatiemethoden heeft men bedacht om zo nauwkeurig mogelijke berekeningen te kunnen maken voor getallen die niet in de tabellen stonden.
Tegenwoordig zien we dat gedoe met die tabellen maar als een onbeholpen gesukkel.
In een flits berekent een simpel computerprogrammaatje de logaritme van 1.25341 in meer dan 250 decimalen:
log 1.25341 = 0.09809 31552 81372 40388 97449 73021 58347 76797 24988 94315 64738 96189 15082 01515 31000 02885 16847 48070 64041 89697 79133 64519 71088 95377 31681 18692 15313 08826 69282 99389 73394 07261 12393 28921 21923 83837 65497 54848 65222 92003 63279 49049 29240 07122 64290 04813 87676 44037 46327 28958 28621 ...Berekend met Multi-precision Calculator van Robert M. Delaney (Mac OS en Windows; gratis)
Er bestaan tegenwoordig tal van libraries voor programmeertalen zoals C++ (bijvoorbeeld Calc, NTL, ...) en tal van rekenpakketten (bijvoorbeeld Mathematica, Maple, ...) waarmee allerhande wiskundige berekeningen kunnen worden gedaan met hoge precisie. Zoek op het internet met de termen "arbitrary precision" en "computer algebra system", inclusief de aanhalingstekens.
|
Hieruit kan gemakkelijk worden afgeleid:
log(a/b) = log a - log b
log(ab) = b*log a
Dezelfde hoofdeigenschap kan ook anders worden uitgelegd - en zo had John Napier, de uitvinder van de logaritmen, hem gevonden:
De logaritme van het meetkundig gemiddelde van twee getallen komt overeen met het rekenkundig gemiddelde van de logaritmen. Dus:
log(√(a*b)) = (log a + log b)/2
(√ is het teken voor de vierkantswortel)
Kenmerkend voor een logaritme is dat hij een grondtal heeft.
Twee grondtallen komen veel voor: e (= 2.718281828459045235360287471...) en 10.
De logaritme met grondtal e wordt ook wel de natuurlijke logaritme genoemd en het symbool van de functie is ln. De logaritme met grondtal 10 wordt ook wel de tiende logaritme genoemd en hij heeft als symbool log. Een logaritme met een ander grondtal wordt aangeduid als logab waarbij a het grondtal is. Soms zien we: alog b.
Omrekening van een logaritme naar een ander grondtal:
logab = (ln b)/(ln a)
Dus log b = (ln b)/(ln 10).
De omgekeerde functies zijn machtfuncties. De omgekeerde functie van de 'tiende' logaritme is de antilogaritme, en de omgekeerde functie van de natuurlijke logaritme is de exponentiële functie.
a = log b .... b = 10a
a = ln b .... b = ea
De feitelijke getalswaarde van een logaritme is niet zo eenvoudig te berekenen.
Volgens afspraak is ln 1 = log 1 = loga 1 = 0. De logaritme kan alleen maar van getallen groter dan 0 worden genomen. De logaritme van 0 is min oneindig (-∞, -INF) en de logaritme van oneindig is oneindig.
Voorts geldt per definitie dat de natuurlijke logaritme van een getal x gelijk is aan het oppervlak onder de functie f(x) = 1/x van 1 tot de waarde x, of in wiskundige termen:
ln x = ∫1x dt/t
(∫ is het integraalteken)
Als we geen rekenmachine of computer hadden, zouden we dus voldoende hebben aan een goede tabel met logaritmen tussen 1 en 2. In de praktijk werden vroeger tabellen gemaakt met de logaritmen tussen 1 en 10; dat scheelde de gebruiker weer het nodige rekenwerk.
John Napier beschreef al in 1614 de ontdekking van de (natuurlijke) logaritmen (Mirifici Logarithmorum Canonis Descriptio) en hij publiceerde de eerste tabellen met een nauwkeurigheid van 6 decimalen.
In 1624 publiceerde Henry Briggs tabellen met de (tiende) logaritmen van 1 - 20000 en van 90000 tot 100000 in 14 decimalen nauwkeurig. Daar lagen buitengewoon ingewikkelde berekeningen aan ten grondslag, die uitvoerig zijn beschreven in zijn werk Arithmetica logarithmica. Een Engelse vertaling van dat werk is gemaakt door Ian Bruce en te vinden op:
vertaling Briggs - Arithmetica logarithmica, onderdeel van:
The MacTutor History of Mathematics archive, School of Mathematics and Statistics, University of St Andrews Scotland.
Het is ondoenlijk het ingewikkelde proces van Briggs hier te beschrijven, maar aan de hand van de basiseigenschappen van logaritmen valt te begrijpen wat het achterliggende principe is.
De log van 10 is 1. De vierkantswortel van een getal is hetzelfde als dat getal tot de macht een half. Dus log(√10) = log(100.5) = 0.5. Op vergelijkbare wijze: log(√√10) = log(100.25) = 0.25. Op die manier verkrijgen we de logaritmen van een hele reeks getallen. Door tussen die getallen en hun logaritmen te interpoleren, krijgen we de logaritmen van 'handige' waarden.
Aangezien we tegenwoordig geen tabellen meer nodig hebben, dreigt de kunst van het werken met de 'logarithmentafel' (oude spelling, met th) verloren te gaan. Wellicht is het interessant te bekijken hoe zo'n ding werkt.
Een voorbeeld van de eerste pagina van een serie logaritmentabellen staat hieronder.
| Logaritmen 1000 - 1500 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No. | 0 | d | 1 | d | 2 | d | 3 | d | 4 | d | 5 | d | 6 | d | 7 | d | 8 | d | 9 | d |
| 100 | 00000 | 43 | 00043 | 44 | 00087 | 43 | 00130 | 43 | 00173 | 44 | 00217 | 43 | 00260 | 43 | 00303 | 43 | 00346 | 43 | 00389 | 43 |
| 101 | 00432 | 43 | 00475 | 43 | 00518 | 43 | 00561 | 43 | 00604 | 43 | 00647 | 42 | 00689 | 43 | 00732 | 43 | 00775 | 42 | 00817 | 43 |
| 102 | 00860 | 43 | 00903 | 42 | 00945 | 43 | 00988 | 42 | 01030 | 42 | 01072 | 43 | 01115 | 42 | 01157 | 42 | 01199 | 43 | 01242 | 42 |
| 103 | 01284 | 42 | 01326 | 42 | 01368 | 42 | 01410 | 42 | 01452 | 42 | 01494 | 42 | 01536 | 42 | 01578 | 42 | 01620 | 42 | 01662 | 41 |
| 104 | 01703 | 42 | 01745 | 42 | 01787 | 41 | 01828 | 42 | 01870 | 42 | 01912 | 41 | 01953 | 42 | 01995 | 41 | 02036 | 42 | 02078 | 41 |
| 105 | 02119 | 41 | 02160 | 42 | 02202 | 41 | 02243 | 41 | 02284 | 41 | 02325 | 41 | 02366 | 41 | 02407 | 42 | 02449 | 41 | 02490 | 41 |
| 106 | 02531 | 41 | 02572 | 40 | 02612 | 41 | 02653 | 41 | 02694 | 41 | 02735 | 41 | 02776 | 40 | 02816 | 41 | 02857 | 41 | 02898 | 40 |
| 107 | 02938 | 41 | 02979 | 40 | 03019 | 41 | 03060 | 40 | 03100 | 41 | 03141 | 40 | 03181 | 41 | 03222 | 40 | 03262 | 40 | 03302 | 40 |
| 108 | 03342 | 41 | 03383 | 40 | 03423 | 40 | 03463 | 40 | 03503 | 40 | 03543 | 40 | 03583 | 40 | 03623 | 40 | 03663 | 40 | 03703 | 40 |
| 109 | 03743 | 39 | 03782 | 40 | 03822 | 40 | 03862 | 40 | 03902 | 39 | 03941 | 40 | 03981 | 40 | 04021 | 39 | 04060 | 40 | 04100 | 39 |
| 110 | 04139 | 40 | 04179 | 39 | 04218 | 40 | 04258 | 39 | 04297 | 39 | 04336 | 40 | 04376 | 39 | 04415 | 39 | 04454 | 39 | 04493 | 39 |
| 111 | 04532 | 39 | 04571 | 39 | 04610 | 40 | 04650 | 39 | 04689 | 38 | 04727 | 39 | 04766 | 39 | 04805 | 39 | 04844 | 39 | 04883 | 39 |
| 112 | 04922 | 39 | 04961 | 38 | 04999 | 39 | 05038 | 39 | 05077 | 38 | 05115 | 39 | 05154 | 38 | 05192 | 39 | 05231 | 38 | 05269 | 39 |
| 113 | 05308 | 38 | 05346 | 39 | 05385 | 38 | 05423 | 38 | 05461 | 39 | 05500 | 38 | 05538 | 38 | 05576 | 38 | 05614 | 38 | 05652 | 38 |
| 114 | 05690 | 39 | 05729 | 38 | 05767 | 38 | 05805 | 38 | 05843 | 38 | 05881 | 37 | 05918 | 38 | 05956 | 38 | 05994 | 38 | 06032 | 38 |
| 115 | 06070 | 38 | 06108 | 37 | 06145 | 38 | 06183 | 38 | 06221 | 37 | 06258 | 38 | 06296 | 37 | 06333 | 38 | 06371 | 37 | 06408 | 38 |
| 116 | 06446 | 37 | 06483 | 38 | 06521 | 37 | 06558 | 37 | 06595 | 38 | 06633 | 37 | 06670 | 37 | 06707 | 37 | 06744 | 37 | 06781 | 38 |
| 117 | 06819 | 37 | 06856 | 37 | 06893 | 37 | 06930 | 37 | 06967 | 37 | 07004 | 37 | 07041 | 37 | 07078 | 37 | 07115 | 36 | 07151 | 37 |
| 118 | 07188 | 37 | 07225 | 37 | 07262 | 36 | 07298 | 37 | 07335 | 37 | 07372 | 36 | 07408 | 37 | 07445 | 37 | 07482 | 36 | 07518 | 37 |
| 119 | 07555 | 36 | 07591 | 37 | 07628 | 36 | 07664 | 36 | 07700 | 37 | 07737 | 36 | 07773 | 36 | 07809 | 37 | 07846 | 36 | 07882 | 36 |
| 120 | 07918 | 36 | 07954 | 36 | 07990 | 37 | 08027 | 36 | 08063 | 36 | 08099 | 36 | 08135 | 36 | 08171 | 36 | 08207 | 36 | 08243 | 36 |
| 121 | 08279 | 35 | 08314 | 36 | 08350 | 36 | 08386 | 36 | 08422 | 36 | 08458 | 35 | 08493 | 36 | 08529 | 36 | 08565 | 35 | 08600 | 36 |
| 122 | 08636 | 36 | 08672 | 35 | 08707 | 36 | 08743 | 35 | 08778 | 36 | 08814 | 35 | 08849 | 35 | 08884 | 36 | 08920 | 35 | 08955 | 36 |
| 123 | 08991 | 35 | 09026 | 35 | 09061 | 35 | 09096 | 36 | 09132 | 35 | 09167 | 35 | 09202 | 35 | 09237 | 35 | 09272 | 35 | 09307 | 35 |
| 124 | 09342 | 35 | 09377 | 35 | 09412 | 35 | 09447 | 35 | 09482 | 35 | 09517 | 35 | 09552 | 35 | 09587 | 34 | 09621 | 35 | 09656 | 35 |
| 125 | 09691 | 35 | 09726 | 34 | 09760 | 35 | 09795 | 35 | 09830 | 34 | 09864 | 35 | 09899 | 35 | 09934 | 34 | 09968 | 35 | 10003 | 34 |
| 126 | 10037 | 35 | 10072 | 34 | 10106 | 34 | 10140 | 35 | 10175 | 34 | 10209 | 34 | 10243 | 35 | 10278 | 34 | 10312 | 34 | 10346 | 34 |
| 127 | 10380 | 35 | 10415 | 34 | 10449 | 34 | 10483 | 34 | 10517 | 34 | 10551 | 34 | 10585 | 34 | 10619 | 34 | 10653 | 34 | 10687 | 34 |
| 128 | 10721 | 34 | 10755 | 34 | 10789 | 34 | 10823 | 34 | 10857 | 33 | 10890 | 34 | 10924 | 34 | 10958 | 34 | 10992 | 33 | 11025 | 34 |
| 129 | 11059 | 34 | 11093 | 33 | 11126 | 34 | 11160 | 33 | 11193 | 34 | 11227 | 34 | 11261 | 33 | 11294 | 33 | 11327 | 34 | 11361 | 33 |
| 130 | 11394 | 34 | 11428 | 33 | 11461 | 33 | 11494 | 34 | 11528 | 33 | 11561 | 33 | 11594 | 34 | 11628 | 33 | 11661 | 33 | 11694 | 33 |
| 131 | 11727 | 33 | 11760 | 33 | 11793 | 33 | 11826 | 34 | 11860 | 33 | 11893 | 33 | 11926 | 33 | 11959 | 33 | 11992 | 32 | 12024 | 33 |
| 132 | 12057 | 33 | 12090 | 33 | 12123 | 33 | 12156 | 33 | 12189 | 33 | 12222 | 32 | 12254 | 33 | 12287 | 33 | 12320 | 32 | 12352 | 33 |
| 133 | 12385 | 33 | 12418 | 32 | 12450 | 33 | 12483 | 33 | 12516 | 32 | 12548 | 33 | 12581 | 32 | 12613 | 33 | 12646 | 32 | 12678 | 32 |
| 134 | 12710 | 33 | 12743 | 32 | 12775 | 33 | 12808 | 32 | 12840 | 32 | 12872 | 33 | 12905 | 32 | 12937 | 32 | 12969 | 32 | 13001 | 32 |
| 135 | 13033 | 33 | 13066 | 32 | 13098 | 32 | 13130 | 32 | 13162 | 32 | 13194 | 32 | 13226 | 32 | 13258 | 32 | 13290 | 32 | 13322 | 32 |
| 136 | 13354 | 32 | 13386 | 32 | 13418 | 32 | 13450 | 31 | 13481 | 32 | 13513 | 32 | 13545 | 32 | 13577 | 32 | 13609 | 31 | 13640 | 32 |
| 137 | 13672 | 32 | 13704 | 31 | 13735 | 32 | 13767 | 32 | 13799 | 31 | 13830 | 32 | 13862 | 31 | 13893 | 32 | 13925 | 31 | 13956 | 32 |
| 138 | 13988 | 31 | 14019 | 32 | 14051 | 31 | 14082 | 32 | 14114 | 31 | 14145 | 31 | 14176 | 32 | 14208 | 31 | 14239 | 31 | 14270 | 31 |
| 139 | 14301 | 32 | 14333 | 31 | 14364 | 31 | 14395 | 31 | 14426 | 31 | 14457 | 32 | 14489 | 31 | 14520 | 31 | 14551 | 31 | 14582 | 31 |
| 140 | 14613 | 31 | 14644 | 31 | 14675 | 31 | 14706 | 31 | 14737 | 31 | 14768 | 31 | 14799 | 30 | 14829 | 31 | 14860 | 31 | 14891 | 31 |
| 141 | 14922 | 31 | 14953 | 30 | 14983 | 31 | 15014 | 31 | 15045 | 31 | 15076 | 30 | 15106 | 31 | 15137 | 31 | 15168 | 30 | 15198 | 31 |
| 142 | 15229 | 30 | 15259 | 31 | 15290 | 30 | 15320 | 31 | 15351 | 30 | 15381 | 31 | 15412 | 30 | 15442 | 31 | 15473 | 30 | 15503 | 31 |
| 143 | 15534 | 30 | 15564 | 30 | 15594 | 31 | 15625 | 30 | 15655 | 30 | 15685 | 30 | 15715 | 31 | 15746 | 30 | 15776 | 30 | 15806 | 30 |
| 144 | 15836 | 30 | 15866 | 31 | 15897 | 30 | 15927 | 30 | 15957 | 30 | 15987 | 30 | 16017 | 30 | 16047 | 30 | 16077 | 30 | 16107 | 30 |
| 145 | 16137 | 30 | 16167 | 30 | 16197 | 30 | 16227 | 29 | 16256 | 30 | 16286 | 30 | 16316 | 30 | 16346 | 30 | 16376 | 30 | 16406 | 29 |
| 146 | 16435 | 30 | 16465 | 30 | 16495 | 29 | 16524 | 30 | 16554 | 30 | 16584 | 29 | 16613 | 30 | 16643 | 30 | 16673 | 29 | 16702 | 30 |
| 147 | 16732 | 29 | 16761 | 30 | 16791 | 29 | 16820 | 30 | 16850 | 29 | 16879 | 30 | 16909 | 29 | 16938 | 29 | 16967 | 30 | 16997 | 29 |
| 148 | 17026 | 30 | 17056 | 29 | 17085 | 29 | 17114 | 29 | 17143 | 30 | 17173 | 29 | 17202 | 29 | 17231 | 29 | 17260 | 29 | 17289 | 30 |
| 149 | 17319 | 29 | 17348 | 29 | 17377 | 29 | 17406 | 29 | 17435 | 29 | 17464 | 29 | 17493 | 29 | 17522 | 29 | 17551 | 29 | 17580 | 29 |
| 150 | 17609 | 29 | 17638 | 29 | 17667 | 29 | 17696 | 29 | 17725 | 29 | 17754 | 28 | 17782 | 29 | 17811 | 29 | 17840 | 29 | 17869 | 29 |
| No. | 0 | d | 1 | d | 2 | d | 3 | d | 4 | d | 5 | d | 6 | d | 7 | d | 8 | d | 9 | d |
| Proportionele delen | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| n\d | 44 | 43 | 42 | 41 | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 | 31 | 30 | 29 | 28 |
| 1 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| 2 | 9 | 9 | 8 | 8 | 8 | 8 | 8 | 7 | 7 | 7 | 7 | 7 | 6 | 6 | 6 | 6 | 6 |
| 3 | 13 | 13 | 13 | 12 | 12 | 12 | 11 | 11 | 11 | 11 | 10 | 10 | 10 | 9 | 9 | 9 | 8 |
| 4 | 18 | 17 | 17 | 16 | 16 | 16 | 15 | 15 | 14 | 14 | 14 | 13 | 13 | 12 | 12 | 12 | 11 |
| 5 | 22 | 22 | 21 | 21 | 20 | 20 | 19 | 19 | 18 | 18 | 17 | 17 | 16 | 16 | 15 | 15 | 14 |
| 6 | 26 | 26 | 25 | 25 | 24 | 23 | 23 | 22 | 22 | 21 | 20 | 20 | 19 | 19 | 18 | 17 | 17 |
| 7 | 31 | 30 | 29 | 29 | 28 | 27 | 27 | 26 | 25 | 25 | 24 | 23 | 22 | 22 | 21 | 20 | 20 |
| 8 | 35 | 34 | 34 | 33 | 32 | 31 | 30 | 30 | 29 | 28 | 27 | 26 | 26 | 25 | 24 | 23 | 22 |
| 9 | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 | 32 | 31 | 30 | 29 | 28 | 27 | 26 | 25 |
Dit is een tabel met 5 plaatsen ofwel 5 significante cijfers voor de tiende logaritme log10x.
In de blauwe 'No.' kolom van bovenstaande grote tabel zoeken we het eerste stuk van de x op waar we de logaritme van willen hebben. In de witte kolommen daarnaast kunnen we een extra decimaal van x krijgen.
Soms worden enkele voor de hand liggende gegevens weggelaten om ruimte te sparen:
| No. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 100 | 00 000 | 043 | 087 | 130 | 173 | 217 | 260 | 303 | 346 | 389 |
| 101 | 432 | 475 | 518 | 561 | 604 | 647 | 689 | 732 | 775 | 817 |
| 102 | 860 | 903 | 945 | 988 | *030 | *072 | *115 | *157 | *199 | *242 |
| 103 | 01 284 | 326 | 368 | 410 | 452 | 494 | 536 | 578 | 620 | 662 |
Van een tabel met 5 plaatsen kunnen de eerste twee cijfers enige tijd worden weggelaten, omdat ze toch hetzelfde blijven. Wanneer ze veranderen, wordt die verandering aangeduid met een sterretje, met een kleurverschil of met een hulplijntje. Het verschil tussen opeenvolgende tabelwaarden wordt ook niet altijd weergegeven omdat de gebruiker dat zelf wel kan berekenen.
Het is gebruikelijk dat de tabel geen aandacht besteedt aan de decade waarin het op te zoeken getal zit. De juiste waarde kan gemakkelijk worden gevonden door optellen of aftrekken van gehele getallen. Ga maar na: log 666 = log(6.66*100) = log 6.66 + log 100 = log 6.66 + 2.
Een voorbeeld van het werken met de tabel.
De log van '125' is '09691'. Door even na te denken krijgen we de waarde die we willen hebben:
log 1.25 = 0.09691
log 12.5 = 1.09691, want log 10 = 1
log 125 = 2.09691, want log 100 = 2
log 1250 = 3.09691, want log 1000 = 3
log 0.125 = 0.09691 - 1 = -0.90309, want log 0.1 = -1
log 0.0125 = 0.09691 - 2 = -1.90309, want log 0.01 = -2, enzovoorts.
Iedere 10 keer meer is 1 erbij in de uitkomst en iedere 10 keer minder is 1 eraf in de uitkomst, overeenkomstig de basiseigenschappen van de logaritme.
De log van 1.250 is dus 0.09691. Een paar kolommen verder lezen we af wat de log is van 1.253: 0.09795.
En wat zijn die grijze kolommen gemerkt d (difference, verschil)?. Dat zijn hulpwaarden voor de tabel met proportionele delen en daarmee kunnen we een extra decimaal krijgen. In het grijze vakje achter de waarde 09795 staat te lezen: 35. Dat is precies het verschil met de volgende tabelwaarde. Ga maar na: 09795 + 35 = 09830. Anders gezegd: log 1.254 - log 1.253 = 0.09830 - 0.09795 = 0.00035.
Stel we willen de logaritme weten van 1.2534. We weten al wat de logaritme is van 1.253, namelijk 0.09795. Het verschil 'd' met de volgende waarde is '35' en en willen als extra decimaal 4 hebben. Kijk nu in de tabel met proportionele delen in de rij gemerkt '4' en de kolom gemerkt '35'. Daar staat de waarde '14'. Tel dit op bij de eerder gevonden logwaarde: 09795 + 14 = 09809. Vertaling: log 1.2534 = 0.09809.
Een hoop gedoe allemaal. Ons elektronisch rekenmachientje van minder dan 10 Euro meldt ons met aanzienlijk minder inspanning en met grotere nauwkeurigheid dat log 1.2534 = 0.09808969.
Er is geen enkele hoop dat we met enige nauwkeurigheid de log van 1.25341 uit bovenstaande tabel kunnen halen.
Perryman maakt gebruik van een interessante interpolatiemethode voor de antilogaritme:
10M+Rt = 10M + t'D
M is een waarde die in de antilogtabel staat
R is de resolutie van de tabel, bijvoorbeeld 0.0001
t ligt tussen 0 en 1
D is het verschil tussen 2 opeenvolgende tabelwaarden = 10M+R - 10M
Er kan worden afgeleid dat t' = (10Rt - 1)/(10R - 1)
Die afleiding van t' is niet zo moeilijk:
Splits de machten in de uitgangsformule uit:
10M.10Rt = 10M + t'.10M.10R - t'.10M
Delen door 10M:
10Rt = 1 + t'.10R - t' -> t' = (10Rt - 1)/(10R - 1)
Als we nu een tabel maken van t' als functie van t (loopt van 0 tot 1), dan kunnen we de antilogaritme goed interpoleren.
En hoe moet dat nu met de logaritme?
De zojuist beschreven interpolatiemethode voor de antilogaritme is exact; er is dus geen restterm. Met wat omwerken kunnen we deze methode goed gebruiken voor logaritmen.
Werk de interpolatieformule eerst als volgt om:
(10M+Rt - 10M)/D = t'
Stel, we willen van een getal p de log p weten. Zoek nu eerst in een tabel met logaritmen een pt-waarde op die gelijk is aan of net iets kleiner is dan p. Bereken de verhouding p/pt en stel die gelijk aan de factor 10M+Rt uit de zojuist omgewerkte formule. Waarom dat handig is, zal aanstonds blijken.
10M+Rt = p/pt
Neem de logaritme links en rechts van het = teken:
M + Rt = log p - log pt
ofwel
log p = M + Rt + log pt
M is bekend want dat is een antilog-tabelwaarde, R is de resolutie van de antilogtabel, pt is bekend want dat is een log-tabelwaarde en log pt staat dus ook in de tabel.
Ehm ja, welke waarde had M ook al weer, en hoe groot is t?
We keren terug naar de formule (10M+Rt - 10M)/D = t'.
Eigenlijk is het stuk links van het = teken de formule voor een lineaire interpolatie van p/pt in de antilogaritmentabel. We zoeken dus in de tabel naar de waarden M waarvan de antilog net rond de p/pt ligt:
(p/pt - 10onder) / (10boven - 10onder)
Zoals de uitgangsformule al aangaf is de uitkomst van die breuk gelijk aan t'. We zien meteen dat M gelijk is aan de genoemde waarde 'onder' in de antilogtabel.
Alle gegevens, nodig voor het berekenen van die breuk zijn nu bekend, dus is t' bekend.
Maar, we hebben t nodig.
We hadden al een formule voor t' afgeleid: t' = (10Rt - 1)/(10R - 1). Daaruit kan met wat omwerken een functie t = f(t') worden afgeleid.
In principe hoeven dus alleen nog maar een tabel te hebben van t als functie van t'. Als we echter log p met 10 decimalen nauwkeurig willen hebben, dan blijkt dat we vrij veel waarden van t' moeten tabelleren. Het is handiger een tabel te maken waarin t' slechts met een waarde u gecorrigeerd hoeft te worden om t te krijgen:
t = t' + u
Laten we t'+u eens voor t invullen in de formule voor t':
t' = (10R(t'+u) - 1)/(10R - 1)
Met enige elementaire rekenkundige handelingen kunnen we u expliciet brengen:
u = (1/R)*log(t'(10R-1)+1) - t'
We zouden een tabel kunnen maken met u als functie van t'. Het blijkt echter dat de waarde van u niet zo veel verandert. Met andere woorden: het zou handiger zijn om voor de discrete waarden waarbij u van waarde verandert, de t' op te geven.
De klap op de vuurpijl en waar het allemaal om is begonnen is namelijk dat we maar zeer weinig waarden van u nodig hebben.
Dat heeft te maken met de gekozen resoluties.
Enige regels terug hebben we gezien dat de log p die we zoeken gelijk is aan: log p = M + R*t + log pt. De waarde M is een M-waarde in de antilog(M) tabel en die heeft dus een aantal decimalen, bepaald door resolutie R. De log pt is een getal van 10 decimalen, te vinden in de tabel. De waarde R*t moet dus ook 10 decimalen hebben. Als de resolutie R bijvoorbeeld gelijk is aan 0.0001, dus 4 decimalen, dan hoeft t slechts bekend te zijn in 10-4 = 6 decimalen!
Dat houdt in dat ook t' en u in slechts 6 decimalen bekend hoeven te zijn.
Even kijken wat de maximum waarde is voor u. Dat betekent dat we de functie u = f(t') moeten differentiëren naar t' en het nulpunt van de afgeleide moeten bepalen.
du/dt' = (1/(R*ln 10)) * [ (10R-1)/(t'*(10R-1)+1) ] - 1
du/dt' = 0 --> t' = ((W1/W2)-1)/W1
met W1 = 10R-1 en W2 = R*ln 10
Bedenk dat log x = ln(x)/ln(10) en d(ln x) = (1/x)*dx
Bij een antilogresolutie R van 0.0001 blijkt het maximum voor t' op te treden bij t' bijna 0.5, waarbij u = 28.78 * 10-6.
Aangezien u slechts in 6 decimalen, dus tot op 10-6, bekend hoeft te zijn, kunnen we volstaan met een kleine tabel met u = 0, 1, 2, 3, ..., 28, 29, 28, 27, ..., 2, 1, 0 maal 10-6 en de bijbehorende t' waarden, rekening houdend met de gebruikelijke afronding - dus alle u's die bijvoorbeeld tussen 6.5 en 7.5 liggen, worden afgerond tot u = 7.
Nu is het zo dat in de functie u = f(t'), de t' niet expliciet kan worden gebracht. Het is dus niet mogelijk een simpele functie t' = f(u) te vinden. Perryman heeft een benadering toegepast, waarmee hij ongetwijfeld op moeizame wijze toch een tabel t' versus u heeft weten te maken. Wij hebben een wat nauwkeurigere tabel t' versus u berekend met de computer door t' iteratief te berekenen op basis van de functie u = f(t').
Hiermee is de hele wiskundige achtergrond van de Perryman-rekenmethode besproken. De rest wordt wel duidelijk met een rekenvoorbeeld.
Bepaal de log van p = 1.25341 in 10 decimalen nauwkeurig.
In de logaritmentabel is in ieder geval een log 1.24 te vinden = 0.0934216852 = log pt.
Bereken nu de verhouding p/pt = 1.25341/1.24. Dat is 1.0108145161.
Welke antilog komt daar het dichtste bij?
1.0108145161 ligt tussen antilog(0.0046) en antilog(0.0047).
Het verschil tussen die twee staat ook in de tabel: D = 0.0002327371.
Bereken nu p/pt - antilog(0.0046): 1.0108145161-1.0106481841 = 0.0001663320.
Deel dat door het verschil in de antilog-tabelwaarden D: 0.0001663320/0.0002327371 = 0.7146776341.
Dit is de t' waarde (eigenlijk zijn maar 6 decimalen nodig). Maak er een t waarde van door er u bij op te tellen uit de t' versus u tabel. We vinden voor u een waarde van 23*10-6.
Dus t = 0.7146776341 + 0.000023 = 0.7147006341 (eigenlijk maar 6 decimalen nodig: 0.714701).
Volgens Perryman geldt: log p = M + R*t + log pt.
M is de gevonden antilog M-waarde 0.0046, R is de resolutie van de antilogtabel 0.0001. Ingevuld:
log p = log 1.25341 = 0.0046 + 0.0001*0.714701 + 0.0934216852 = 0.0980931553.
Vergelijk dit met de exactere waarde: 0.09809315528137...
Hoe veel handelingen hebben we uit moeten voeren?
Iets in tabel opzoeken: 3x
Optellen/aftrekken: 4x
Vermenigvuldigen: 1x
Delen: 2x
Hoe groot zijn de benodigde tabellen?
Logaritme: 136 ingangen
Antilogaritme: 101 ingangen
t' versus u: 59 ingangen
Tiende logaritme van x
Deze tabel hoort bij de rekenmethode van Perryman.
De resolutie van de antilogtabel is 0.0001 en die tabel loopt van M=0 tot 0.01. Dat betekent dat in onderstaande log(x) tabel de verhouding tussen opeenvolgende x-waarden kleiner moet zijn dan 100.01 = 1.023293.
| x | log(x) | x | log(x) | x | log(x) | ||
|---|---|---|---|---|---|---|---|
| 1.00 | 0.0000000000 | 2.16 | 0.3344537512 | 4.96 | 0.6954816765 | ||
| 1.02 | 0.0086001718 | 2.19 | 0.3404441148 | 5.04 | 0.7024305364 | ||
| 1.04 | 0.0170333393 | 2.22 | 0.3463529745 | 5.12 | 0.7092699610 | ||
| 1.06 | 0.0253058653 | 2.25 | 0.3521825181 | 5.20 | 0.7160033436 | ||
| 1.08 | 0.0334237555 | 2.30 | 0.3617278360 | 5.28 | 0.7226339225 | ||
| 1.10 | 0.0413926852 | 2.35 | 0.3710678623 | 5.36 | 0.7291647897 | ||
| 1.12 | 0.0492180227 | 2.40 | 0.3802112417 | 5.44 | 0.7355988997 | ||
| 1.14 | 0.0569048513 | 2.45 | 0.3891660844 | 5.52 | 0.7419390777 | ||
| 1.16 | 0.0644579892 | 2.50 | 0.3979400087 | 5.60 | 0.7481880270 | ||
| 1.18 | 0.0718820073 | 2.55 | 0.4065401804 | 5.68 | 0.7543483357 | ||
| 1.20 | 0.0791812460 | 2.60 | 0.4149733480 | 5.76 | 0.7604224834 | ||
| 1.22 | 0.0863598307 | 2.65 | 0.4232458739 | 5.84 | 0.7664128471 | ||
| 1.24 | 0.0934216852 | 2.70 | 0.4313637642 | 5.88 | 0.7693773261 | ||
| 1.26 | 0.1003705451 | 2.75 | 0.4393326938 | 6.00 | 0.7781512504 | ||
| 1.28 | 0.1072099696 | 2.80 | 0.4471580313 | 6.12 | 0.7867514221 | ||
| 1.30 | 0.1139433523 | 2.85 | 0.4548448600 | 6.24 | 0.7951845897 | ||
| 1.32 | 0.1205739312 | 2.90 | 0.4623979979 | 6.36 | 0.8034571156 | ||
| 1.34 | 0.1271047984 | 2.95 | 0.4698220160 | 6.48 | 0.8115750059 | ||
| 1.36 | 0.1335389084 | 3.00 | 0.4771212547 | 6.60 | 0.8195439355 | ||
| 1.38 | 0.1398790864 | 3.05 | 0.4842998393 | 6.72 | 0.8273692731 | ||
| 1.40 | 0.1461280357 | 3.10 | 0.4913616938 | 6.84 | 0.8350561017 | ||
| 1.42 | 0.1522883444 | 3.15 | 0.4983105538 | 6.96 | 0.8426092396 | ||
| 1.44 | 0.1583624921 | 3.20 | 0.5051499783 | 7.08 | 0.8500332577 | ||
| 1.47 | 0.1673173347 | 3.25 | 0.5118833610 | 7.20 | 0.8573324964 | ||
| 1.50 | 0.1760912591 | 3.30 | 0.5185139399 | 7.32 | 0.8645110811 | ||
| 1.53 | 0.1846914308 | 3.35 | 0.5250448070 | 7.44 | 0.8715729355 | ||
| 1.56 | 0.1931245984 | 3.40 | 0.5314789170 | 7.56 | 0.8785217955 | ||
| 1.59 | 0.2013971243 | 3.45 | 0.5378190951 | 7.68 | 0.8853612200 | ||
| 1.62 | 0.2095150145 | 3.50 | 0.5440680444 | 7.80 | 0.8920946027 | ||
| 1.65 | 0.2174839442 | 3.55 | 0.5502283531 | 7.92 | 0.8987251816 | ||
| 1.68 | 0.2253092817 | 3.68 | 0.5658478187 | 8.04 | 0.9052560487 | ||
| 1.71 | 0.2329961104 | 3.76 | 0.5751878449 | 8.16 | 0.9116901588 | ||
| 1.74 | 0.2405492483 | 3.84 | 0.5843312244 | 8.28 | 0.9180303368 | ||
| 1.77 | 0.2479732664 | 3.92 | 0.5932860670 | 8.40 | 0.9242792861 | ||
| 1.80 | 0.2552725051 | 4.00 | 0.6020599913 | 8.52 | 0.9304395948 | ||
| 1.83 | 0.2624510897 | 4.08 | 0.6106601631 | 8.64 | 0.9365137425 | ||
| 1.86 | 0.2695129442 | 4.16 | 0.6190933306 | 8.76 | 0.9425041062 | ||
| 1.89 | 0.2764618042 | 4.24 | 0.6273658566 | 8.88 | 0.9484129658 | ||
| 1.92 | 0.2833012287 | 4.32 | 0.6354837468 | 9.00 | 0.9542425094 | ||
| 1.95 | 0.2900346114 | 4.40 | 0.6434526765 | 9.20 | 0.9637878273 | ||
| 1.98 | 0.2966651903 | 4.48 | 0.6512780140 | 9.40 | 0.9731278536 | ||
| 2.01 | 0.3031960574 | 4.56 | 0.6589648427 | 9.60 | 0.9822712330 | ||
| 2.04 | 0.3096301674 | 4.64 | 0.6665179806 | 9.80 | 0.9912260757 | ||
| 2.07 | 0.3159703455 | 4.72 | 0.6739419986 | 10.00 | 1.0000000000 | ||
| 2.10 | 0.3222192947 | 4.80 | 0.6812412374 | ||||
| 2.13 | 0.3283796034 | 4.88 | 0.6884198220 |
Deze tabel hoort bij de rekenmethode van Perryman.
In de logaritmentabel hierboven is de maximum waarde van de verhouding tussen twee opeenvolgende x-waarden 1.022222. De antilogtabel hieronder hoeft daardoor slechts te lopen van 0 tot log 1.022222 = 0.009545, zeg maar tot 0.01.
De kolom "verschil" geeft het verschil met de volgende tabelwaarde.
| M | antilog(M) | verschil | M | antilog(M) | verschil | |
|---|---|---|---|---|---|---|
| 0.0000 | 1.0000000000 | 0.0002302850 | 0.0051 | 1.0118124059 | 0.0002330052 | |
| 0.0001 | 1.0002302850 | 0.0002303381 | 0.0052 | 1.0120454111 | 0.0002330589 | |
| 0.0002 | 1.0004606231 | 0.0002303911 | 0.0053 | 1.0122784700 | 0.0002331126 | |
| 0.0003 | 1.0006910142 | 0.0002304442 | 0.0054 | 1.0125115826 | 0.0002331663 | |
| 0.0004 | 1.0009214583 | 0.0002304972 | 0.0055 | 1.0127447488 | 0.0002332199 | |
| 0.0005 | 1.0011519555 | 0.0002305503 | 0.0056 | 1.0129779688 | 0.0002332737 | |
| 0.0006 | 1.0013825058 | 0.0002306034 | 0.0057 | 1.0132112424 | 0.0002333274 | |
| 0.0007 | 1.0016131092 | 0.0002306565 | 0.0058 | 1.0134445698 | 0.0002333811 | |
| 0.0008 | 1.0018437657 | 0.0002307096 | 0.0059 | 1.0136779509 | 0.0002334348 | |
| 0.0009 | 1.0020744753 | 0.0002307627 | 0.0060 | 1.0139113857 | 0.0002334886 | |
| 0.0010 | 1.0023052381 | 0.0002308159 | 0.0061 | 1.0141448743 | 0.0002335424 | |
| 0.0011 | 1.0025360540 | 0.0002308690 | 0.0062 | 1.0143784167 | 0.0002335962 | |
| 0.0012 | 1.0027669230 | 0.0002309222 | 0.0063 | 1.0146120129 | 0.0002336499 | |
| 0.0013 | 1.0029978452 | 0.0002309754 | 0.0064 | 1.0148456628 | 0.0002337038 | |
| 0.0014 | 1.0032288206 | 0.0002310286 | 0.0065 | 1.0150793666 | 0.0002337576 | |
| 0.0015 | 1.0034598491 | 0.0002310818 | 0.0066 | 1.0153131241 | 0.0002338114 | |
| 0.0016 | 1.0036909309 | 0.0002311350 | 0.0067 | 1.0155469355 | 0.0002338652 | |
| 0.0017 | 1.0039220659 | 0.0002311882 | 0.0068 | 1.0157808008 | 0.0002339191 | |
| 0.0018 | 1.0041532541 | 0.0002312415 | 0.0069 | 1.0160147199 | 0.0002339730 | |
| 0.0019 | 1.0043844956 | 0.0002312947 | 0.0070 | 1.0162486929 | 0.0002340269 | |
| 0.0020 | 1.0046157903 | 0.0002313480 | 0.0071 | 1.0164827197 | 0.0002340807 | |
| 0.0021 | 1.0048471382 | 0.0002314012 | 0.0072 | 1.0167168005 | 0.0002341346 | |
| 0.0022 | 1.0050785395 | 0.0002314545 | 0.0073 | 1.0169509351 | 0.0002341886 | |
| 0.0023 | 1.0053099940 | 0.0002315078 | 0.0074 | 1.0171851237 | 0.0002342425 | |
| 0.0024 | 1.0055415019 | 0.0002315611 | 0.0075 | 1.0174193662 | 0.0002342964 | |
| 0.0025 | 1.0057730630 | 0.0002316145 | 0.0076 | 1.0176536626 | 0.0002343504 | |
| 0.0026 | 1.0060046775 | 0.0002316678 | 0.0077 | 1.0178880130 | 0.0002344044 | |
| 0.0027 | 1.0062363453 | 0.0002317212 | 0.0078 | 1.0181224174 | 0.0002344583 | |
| 0.0028 | 1.0064680664 | 0.0002317745 | 0.0079 | 1.0183568757 | 0.0002345123 | |
| 0.0029 | 1.0066998410 | 0.0002318279 | 0.0080 | 1.0185913881 | 0.0002345663 | |
| 0.0030 | 1.0069316689 | 0.0002318813 | 0.0081 | 1.0188259544 | 0.0002346204 | |
| 0.0031 | 1.0071635501 | 0.0002319347 | 0.0082 | 1.0190605747 | 0.0002346744 | |
| 0.0032 | 1.0073954848 | 0.0002319881 | 0.0083 | 1.0192952491 | 0.0002347284 | |
| 0.0033 | 1.0076274729 | 0.0002320415 | 0.0084 | 1.0195299776 | 0.0002347825 | |
| 0.0034 | 1.0078595144 | 0.0002320949 | 0.0085 | 1.0197647600 | 0.0002348365 | |
| 0.0035 | 1.0080916094 | 0.0002321484 | 0.0086 | 1.0199995966 | 0.0002348906 | |
| 0.0036 | 1.0083237578 | 0.0002322019 | 0.0087 | 1.0202344872 | 0.0002349447 | |
| 0.0037 | 1.0085559596 | 0.0002322553 | 0.0088 | 1.0204694319 | 0.0002349988 | |
| 0.0038 | 1.0087882149 | 0.0002323088 | 0.0089 | 1.0207044308 | 0.0002350529 | |
| 0.0039 | 1.0090205238 | 0.0002323623 | 0.0090 | 1.0209394837 | 0.0002351071 | |
| 0.0040 | 1.0092528861 | 0.0002324158 | 0.0091 | 1.0211745908 | 0.0002351612 | |
| 0.0041 | 1.0094853019 | 0.0002324693 | 0.0092 | 1.0214097520 | 0.0002352154 | |
| 0.0042 | 1.0097177712 | 0.0002325229 | 0.0093 | 1.0216449674 | 0.0002352695 | |
| 0.0043 | 1.0099502941 | 0.0002325764 | 0.0094 | 1.0218802369 | 0.0002353237 | |
| 0.0044 | 1.0101828705 | 0.0002326300 | 0.0095 | 1.0221155606 | 0.0002353779 | |
| 0.0045 | 1.0104155005 | 0.0002326836 | 0.0096 | 1.0223509385 | 0.0002354321 | |
| 0.0046 | 1.0106481841 | 0.0002327371 | 0.0097 | 1.0225863706 | 0.0002354863 | |
| 0.0047 | 1.0108809212 | 0.0002327907 | 0.0098 | 1.0228218569 | 0.0002355406 | |
| 0.0048 | 1.0111137120 | 0.0002328443 | 0.0099 | 1.0230573975 | 0.0002355948 | |
| 0.0049 | 1.0113465563 | 0.0002328980 | 0.0100 | 1.0232929923 | 0.0002356490 | |
| 0.0050 | 1.0115794543 | 0.0002329516 |
Correctiefactor u als functie van t'
Deze tabel hoort bij de rekenmethode van Perryman.
De tabel is op maat gesneden voor de resolutie van de antilogaritmentabel van 0.0001 en de logaritmentabel van 10 decimalen.
De formule waar de tabel op gebaseerd is staat te lezen in de wiskundige uitleg van de Perryman-methode.
Voorbeeld van het gebruik: als t' ligt tussen 0.050299 en 0.060062, neem dan voor u de correctiefactor 6*10-6.
Onderstaande tabel is nauwkeuriger dan die van Perryman, want opnieuw berekend met de computer
| t' | u | t' | u | t' | u | t' | u | |||
|---|---|---|---|---|---|---|---|---|---|---|
| 0.000000 | 0.147776 | 0.549500 | 0.864327 | |||||||
| 0 | 15 | 28 | 13 | |||||||
| 0.004362 | 0.160330 | 0.605518 | 0.876059 | |||||||
| 1 | 16 | 27 | 12 | |||||||
| 0.013202 | 0.173366 | 0.640779 | 0.887436 | |||||||
| 2 | 17 | 26 | 11 | |||||||
| 0.022206 | 0.186944 | 0.668831 | 0.898488 | |||||||
| 3 | 18 | 25 | 10 | |||||||
| 0.031383 | 0.201138 | 0.692845 | 0.909242 | |||||||
| 4 | 19 | 24 | 9 | |||||||
| 0.040744 | 0.216041 | 0.714184 | 0.919720 | |||||||
| 5 | 20 | 23 | 8 | |||||||
| 0.050299 | 0.231771 | 0.733582 | 0.929944 | |||||||
| 6 | 21 | 22 | 7 | |||||||
| 0.060062 | 0.248483 | 0.751488 | 0.939929 | |||||||
| 7 | 22 | 21 | 6 | |||||||
| 0.070046 | 0.266388 | 0.768201 | 0.949694 | |||||||
| 8 | 23 | 20 | 5 | |||||||
| 0.080268 | 0.285784 | 0.783933 | 0.959250 | |||||||
| 9 | 24 | 19 | 4 | |||||||
| 0.090745 | 0.307122 | 0.798837 | 0.968612 | |||||||
| 10 | 25 | 18 | 3 | |||||||
| 0.101498 | 0.331134 | 0.813033 | 0.977790 | |||||||
| 11 | 26 | 17 | 2 | |||||||
| 0.112549 | 0.359185 | 0.826612 | 0.986796 | |||||||
| 12 | 27 | 16 | 1 | |||||||
| 0.123925 | 0.394444 | 0.839649 | 0.995638 | |||||||
| 13 | 28 | 15 | 0 | |||||||
| 0.135655 | 0.450462 | 0.852204 | 1.000000 | |||||||
| 14 | 29 | 14 | ||||||||
| 0.147776 | 0.549500 | 0.864327 |
y = y0 + (x-x0).(y1-y0)/(x1-x0)
Deze methode gaat er vanuit dat de functie y = f(x) lineair verandert tussen x0 en x1. Dat is meestal niet het geval, waardoor een fout wordt gemaakt.
Eigenlijk is de lineaire interpolatie een 2-punts Lagrange interpolatie. In goede wiskundeboeken staat de afleiding van deze methode. Tevens staat in de boeken te lezen dat er sprake is van een restterm. Dat is een poging om de fout te schatten.
Voor een 2-punts Lagrange interpolatie luiden de formules:
f(x) = f(x0+p.h) = (1-p).f0 + p.f1 + R1
R1 = (1/2).p.(p-1).h2.f(2)(ξ) ≈ (1/2).p.(p-1).Δ02
waarbij:
f(x) is de functiewaarde die we willen weten
x0 is een tabelwaarde die gelijk is aan of net iets kleiner is dan x
h is de (gelijkmatige) afstand tussen de x-waarden = x1-x0 = x2-x1, enzovoorts
p is de fractie van h die we nodig hebben om uitgaande van x0 de gevraagde x te bereiken: p =(x-x0)/h
f0 is de functiewaarde f(x0) = y0
f1 is de functiewaarde f(x1) = y1
R1 is de Lagrange restterm
f(2)(ξ) is de tweede afgeleide van de functie in een niet nader te bepalen tussenpunt ξ
Δ02 is de waarde van de tweede verschilrij, horend bij punt x0
Als we een tabel met getallen hebben, kunnen we een verschilrij bepalen. Dat is de reeks getallen die ontstaat door telkens het verschil van twee opeenvolgende y-waarden te nemen. De tweede verschilrij is de reeks verschillen tussen twee opeenvolgende waarden van de eerste verschilrij, enzovoorts. Onderstaande tabel laat de eerste vier verschilrijen zien van een tabel met log-waarden. Merk op dat volgens afspraak het symbool voor de voorwaartse verschilrij de Griekse letter Delta is (Δ) en dat de tabelwaarde -0.0000000095 in de vierde verschilrij hoort bij x0. De waarde -0.0000273562 is Δ02, de waarde uit de tweede verschilrij, horend bij x0.
| x | fn = log(x) | Δ1 | Δ2 | Δ3 | Δ4 | |
|---|---|---|---|---|---|---|
| x-1 | 1.24 | 0.0934216852 | ||||
| 0.0034883278 | ||||||
| x0 | 1.25 | 0.0969100130 | -0.0000277957 | |||
| 0.0034605321 | 0.0000004395 | |||||
| x1 | 1.26 | 0.1003705451 | -0.0000273562 | -0.0000000106 | ||
| 0.0034331759 | 0.0000004289 | |||||
| x2 | 1.27 | 0.1038037210 | -0.0000269273 | -0.0000000095 | ||
| 0.0034062486 | 0.0000004194 | |||||
| x3 | 1.28 | 0.1072099696 | -0.0000265079 | |||
| 0.0033797407 | ||||||
| x4 | 1.29 | 0.1105897103 |
Met wat rekenwerk kan worden bepaald dat Δ02 = f2-2.f1+f0 en Δ04 = f4-4.f3+6.f2-4.f1+f0.
Gewapend met bovenstaande kennis kunnen we de log van 1.25341 berekenen.
We zien dat 1.25 en 1.26 in de tabel staan, dus stellen we x0 = 1.25 en x1 = 1.26. Uit de tabel halen we f0 = 0.0969100130 en f1 = 0.1003705451. Het is duidelijk dat h = 0.01 en p = (1.25341-1.25)/0.01 = 0.341.
Invullen:
f(x) = log 1.25341 = (1-0.341)*0.0969100130 + 0.341*0.1003705451 = 0.0980900544.
Verschil met de exacte waarde: 31009*10-10.
Nu de restterm bepalen uit de waarde van de tweede verschilrij:
R1 = 0.5*0.341*(0.341-1)*-0.0000273562 = 0.0000030737
Optellen bij de eerder verkregen f(x):
log 1.25341 = 0.0980900544 + 0.0000030737 = 0.0980931281
Verschil met de exacte waarde: 272*10-10.
Dat is al een verbetering, maar nog lang geen 10 decimalen nauwkeurigheid.
De restterm kunnen we ook op een andere manier bepalen, als we de tweede afgeleide kennen van de functie. Toevallig is die in dit geval bekend. We geven in voorbereiding op het vervolg alvast een lijstje tot en met de vierde afgeleide:
f(x) = log(x) = ln(x)/ln(10)
f(1)(x) = (1/ln 10)*(1/x)
f(2)(x) = -(1/ln 10)*(1/x2)
f(3)(x) = (2/ln 10)*(1/x3)
f(4)(x) = -(6/ln 10)*(1/x4)
De restterm op basis van de tweede afgeleide in een tussenpunt, laten we zeggen 1.25341:
R1 = 0.5*0.341*(0.341-1) * 0.012 * -(1/ln 10)*(1/1.253412) = 0.0000031060
Optellen bij de eerder verkregen f(x):
log 1.25341 = 0.0980900544 + 0.0000031060 = 0.0980931604
Verschil met de exacte waarde: -51*10-10.
Dat ziet er nog beter uit.
De les die we hieruit kunnen leren is dat we met een lineaire interpolatie op deze wijze geen 10 decimalen nauwkeurigheid kunnen bereiken. Het toevoegen van de restterm wil een beetje helpen. Als we de functie kennen waar de tabel op is gebaseerd en daar de tweede afgeleide van kunnen bepalen, dan kunnen we soms een betere waarde van de restterm berekenen.
Zou een 4-punts Lagrange interpolatie wel een nauwkeurigheid van 10 decimalen kunnen geven?
De formule voor de 4-punts Lagrange interpolatie ziet er wat ingewikkelder uit:
f(x) = f(x0+p.h) = (-1/6).p.(p-1).(p-2).f-1 + (1/2).(p2-1).(p-2).f0 - (1/2).p.(p+1).(p-2).f1 + (1/6).(p2-1).p.f2 + R3
R3 = (1/24).(p2-1).p.(p-2).h4f(4)(ξ) ≈ (1/24).(p2-1).p.(p-2).Δ04
Zo tegen het begin van de tabel is gewoon de eerste de beste tabelingang gelijk aan f-1. Als x ligt tussen x-1 en x0 dan is p kleiner dan 0 en daardoor wordt de restfout groter. Zelfde verhaal voor het tabeleinde: reken de laatste ingang als f2. Tegen het tabeleinde wordt p dan een waarde tussen 1 en 2, en ook daardoor wordt de restfout groter.
Als we onze uitgangsgegevens allemaal netjes invullen krijgen we als uitkomsten:
4-punts interpolatie zonder restterm: 0.09809315548, verschil met exact: -2.0*10-10
Restterm op basis van verschilrij: -2.0*10-10
4-punts interpolatie + restterm/verschilrij: 0.09809315528, verschil met exact: ≈ +0*10-10
Restterm op basis van afgeleide: -2.2*10-10
4-punts interpolatie + restterm/afgeleide: 0.09809315526, verschil met exact: 0.2*10-10
Geheel toevallig bereiken we hier juist met de verschilrij-restterm een iets betere interpolatie.
In dit geval geeft een 4-punts Lagrange interpolatie een nauwkeurigheid van 10 decimalen. Aanbevolen wordt om bij waarden van x die niet veel groter zijn dan 1, door te zetten tot een 5-punts interpolatie.
Dat is zo'n gedoe, dat de eerder besproken methode van Perryman veel sneller tot resultaten met 10 decimalen leidt.
Of wat we tegenwoordig doen: even ons zakrekenmachientje of calculatorprogrammaatje pakken!
log(x) = 0.86304*t + 0.36415*t3
met t = (x-1)/(x+1) en x moet liggen tussen 1/√10 en √10
De precisie is niet erg groot: hooguit 6*10-4.
Hieronder geven we een indruk van een stuk code dat al meer dan 25 jaar geleden is ontwikkeld. De natuurlijke logaritme wordt met bijna 32 decimalen nauwkeurig berekend. Dat gebeurt met behulp van een zogeheten Chebyshev polynoom. In dit geval wordt een tiendegraads polynoom toegepast, dat op een speciale manier moet worden berekend om afrondingsfouten zo veel mogelijk te vermijden. Wij hebben in onderstaande code enkele administratieve details weggelaten. Die zijn nodig om ervoor te zorgen dat de compiler in kwestie het maximum kan halen uit wat er op uw machine mogelijk is. Neem dus niet onderstaande code over, maar gebruik de originele code of een vergelijkbare 'echte' routine, bijvoorbeeld uit de Cephes bibliotheek die bovendien moderner is.
-- Functie DLOG = ln(X), double precision Fortran -- Gewogen fout in de uitkomst: hooguit 4.15*10-32 -- SLATEC Fortran bibliotheek. -- Zie Netlib / SLATEC / special functions -- Auteur van deze routine: W. Fullerton, C-3, -- Los Alamos Scientific Laboratory -- Onderstaande is geen Fortran, maar onze eigen vertaling -- van de essentie van de routine. -- Vullen van wat constanten. ALNCS(1) = 1.3347199877973881561689386047187 ALNCS(2) = 0.69375628328411286281372438354225*0.001 ALNCS(3) = 0.42934039020450834506559210803662*0.000001 ALNCS(4) = 0.28933847795432594580466440387587*10^-9 ALNCS(5) = 0.20512517530340580901741813447726*10^-12 ALNCS(6) = 0.15039717055497386574615153319999*10^-15 ALNCS(7) = 0.11294540695636464284521613333333*10^-18 ALNCS(8) = 0.86355788671171868881946666666666*10^-22 ALNCS(9) = 0.66952990534350370613333333333333*10^-25 ALNCS(10) = 0.52491557448151466666666666666666*10^-28 ALNCS(11) = 0.41530540680362666666666666666666*10^-31 CENTER(1) = 1.0 CENTER(2) = 1.25 CENTER(3) = 1.50 CENTER(4) = 1.75 ALNCEN(1) = 0.0 ALNCEN(2) = 0.22314355131420975576629509030983 ALNCEN(3) = 0.40546510810816438197801311546434 ALNCEN(4) = 0.55961578793542268627088850052682 ALNCEN(5) = 0.69314718055994530941723212145817 ALN2 = 0.06814718055994530941723212145818 -- dit is ln(2)-0.625 -- Hier zou moeten worden bepaald hoe veel -- termen NTERMS van ALNCS moeten worden meegenomen -- in de berekening. Wij nemen gewoon alle 11. -- Vervolgens wordt X gereduceerd. N = 0 ABSX = abs(X) if ABSX >= 0.5 and ABSX < 1 then Y = X if ABSX > 1 then repeat while ABSX >= 1 N = N+1 ABSX = 0.5*ABSX end repeat end if if ABSX < 0.5 then repeat while ABSX < 0.5 N = N-1 ABSX = 2*ABSX end repeat end if Y = ABSX -- Eigenlijk Y = sign(X)*ABSX, maar X moet toch altijd > 0 zijn. -- Verdere reductie van X XN = N-1 Y = 2*Y NTRVAL = trunc(4*Y-2.5) -- of int() of floor() if NTRVAL = 5 then T = ((Y-1.0)-1.0)/(Y+2.0) end if if NTRVAL < 5 then T = (Y-CENTER(NTRVAL)) / (Y+CENTER(NTRVAL)) end if T2 = T*T --Chebyshev polynoom uitrekenen NTERMS = 11 FX = 578.0*T2-1.0 B1 = 0 B0 = 0 TWX = 2*FX repeat with i=1 to NTERMS B2 = B1 B1 = B0 NI = NTERMS+1-i B0 = TWX*B1-B2+ALNCS(NI) end repeat DCSEVL = 0.5*(B0-B2) DLOG = ALN2*XN + ALNCEN(NTRVAL) + 2.0*T + T*T2*DCSEVL + 0.625*XN -- DLOG is de uitkomst, ln(X)
Wat te doen als de precisie nog groter moet zijn, bijvoorbeeld twintigduizend decimalen?
Ook dan staan er verscheidene mogelijkheden open. Er kan gebruik worden gemaakt van de Taylor reeksontwikkeling van ln(1+x):
ln(1+x) = x - x2/2 + x3/3 - x4/4 + ...
Deze reeks convergeert alleen als x kleiner is dan 1. Dat betekent dat x eerst moet worden gereduceerd en dat gebeurt door een paar keer de wortel te trekken, immers:
ln(x)=2k*ln(x2-k).
Worteltrekken met willekeurige precisie kan in principe gebeuren op de manier die vergelijkbaar is met het trekken van een wortel met de hand, met een soort staartdelingsmethode. Aangezien de Taylor-reeks voor ln(1+x) erg traag convergeert, zijn er enkele modificaties bedacht zodat er minder termen hoeven te worden berekend. Het leuke van deze reeks is dat we weten dat de afbreekfout ten hoogste gelijk is aan de waarde van de laatst berekende term.
Helemaal aan het begin van dit verhaal staat een voorbeeld van een logaritme in meer dan 250 decimalen nauwkeurig, uitgerekend met een modern computerprogramma.
© Oscar van Vlijmen, mei 2003/May 2003
Datum laatste wijziging: 2007-02-20