Fizika · Straipsnis
Slankiojo kablelio aritmetika ir skaitinis stabilumas
Nagrinėti baigtinio tikslumo skaičių vaizdavimą, apvalinimą ir reikšminių skaitmenų praradimą, palyginti du skaičiavimo būdus ir atskirti uždavinio jautrumą nuo algoritmo stabilumo.
Ankstesnis straipsnis: Mokslinis programavimas ir atkuriami skaičiavimai
Grįžti į fizikąPerskaitę galėsite
- Apibūdinti nurodyto slankiojo kablelio formato ženklą, mantisę, pagrindą, tikslumą ir eksponentės diapazoną.
- Atskirti numatytą realiojo skaičiaus reikšmę, jos saugomą atvaizdą, apskaičiuotą rezultatą ir jį atvaizduojantį tekstą.
- Sekti operacijas, kurios pirmiausia atliekamos tiksliai, o tada apvalinamos, naudojant ribotą dešimtainį mokomąjį formatą, įskaitant atvejus, kai dvi apvalinimo reikšmės vienodai artimos arba rezultatas nepatenka į formato diapazoną.
- Apskaičiuoti absoliučiąją ir santykinę skaitinę paklaidą, aiškiai nurodant atskaitos reikšmes ir vienetus.
- Palyginti jautrumą įvesties duomenims su apvalinimo poveikiu ir paaiškinti, kodėl sėkmingas išraiškos pertvarkymas nėra universalus stabilumo įrodymas.
- Vykdyti trumpus „Python“ bandymus tiksliai taip, kaip pateikta, ir taikyti nurodytą palyginimo toleranciją, nelaikant jos matavimo neapibrėžtimi.
Atskirti fizikinius dydžius ir skaitinius atvaizdus
Fizikinis dydis ir jam išreikšti naudojamas skaičius yra skirtingi dalykai. Kai ilgis x = 1.25 m, skaitinė vertė 1.25 išreiškia ilgį metrais; tas pats ilgis yra 1250 mm. Prieš skaičiuodami užrašykite vienetą. Programa, kuri saugo tik skaičių, automatiškai neišsaugo numatyto dydžio ar vieneto.
Matematinis modelis gali pateikti tikslią realiojo skaičiaus reikšmę, tačiau baigtinis kompiuterinis formatas negali atvaizduoti kiekvieno realiojo skaičiaus. Atskirkite numatytą įvestį, saugomą reikšmę, apskaičiuotą rezultatą ir skaitytojui rodomą tekstą.
Toliau pateikti skaičiavimai yra originalūs tikslūs mokomieji pavyzdžiai, o ne išmatuoti ilgiai ar prietaisų specifikacijos. Jų paklaida reiškia skirtumą nuo nurodytos tikslios matematinės atskaitos reikšmės. Matavimo neapibrėžtis, apytikslis fizikinis modelis ir neteisingas vienetų perskaičiavimas lieka atskiri klausimai.
Keturi klausimai prieš pasitikint skaitiniu rezultatu
1. Kokia reikšmė atvaizduojama?
Užrašykite numatytą pradinę reikšmę, jos vienetą ir formatą. Sutrumpintas dešimtainis rodinys neparodo, kad kiekvienas numatytas realusis skaičius buvo išsaugotas tiksliai.
2. Kurios operacijos buvo apvalintos?
Šios pamokos originali suma, skaičiuojama trijų reikšminių skaitmenų formatu, skirtingai išdėsčius skliaustus gali būti 0 m arba 0.200 m. Patikrinkite kiekvieną tarpinę operaciją ir jos reikšmių diapazoną.
3. Kuris uždavinys jautrus?
Pakeitus abi tikslias įvesties ilgio reikšmes vos 0.005 m, jų 0.0100 m skirtumas gali pasikeisti 100%. Jautrumas įvesties duomenims egzistuoja net ir skaičiuojant tiksliai.
4. Koks palyginimas buvo nurodytas?
Tolerancija apibrėžia skaitinio artumo patikrą. Ji nesuteikia fizikinės neapibrėžties ir neįrodo, kad modelis ir algoritmas yra tinkami.
Riboto slankiojo kablelio formato apibrėžimas
Slankiojo kablelio formatas nusako pagrindą, baigtinę mantisę ir leistiną laipsnio rodiklio intervalą. Mantisėje yra reikšminiai skaitmenys, o laipsnio rodiklis keičia mastelį. Pavyzdžiui, skaičiaus 7.12 × 10² mantisė yra 7.12, o laipsnio rodiklis dešimtainėje sistemoje – 2. Neigiamoms reikšmėms reikia ženklo, o nuliui – atskiro atvaizdavimo. Tikslumą nusako reikšminių skaitmenų skaičius, o ne skaitmenų skaičius po kablelio.
Skaičiavimams ranka apibrėžkime originalų mokomąjį dešimtainį formatą su trimis reikšminiais skaitmenimis. Juo atvaizduojamos nenulinės skaitinės reikšmės yra ±d.dd × 10ᵉ, kur pirmasis skaitmuo d yra 1–9, kiti du skaitmenys yra 0–9, o sveikasis laipsnio rodiklis e yra −2, −1, 0, 1 arba 2. Nulį įtraukime atskirai. Taigi mažiausia teigiama reikšmė yra 0.0100, o didžiausia – 999. Tai skaitinės ribos, išreikštos kiekvienam skaičiavimui pasirinktu matavimo vienetu.
Apibrėžkime R(q) tik tada, kai q = 0 arba 0.0100 ≤ |q| ≤ 999. Ši funkcija grąžina artimiausią atvaizduojamą reikšmę; jei įvestis yra tiksliai per vidurį tarp dviejų reikšmių, rinkimės tą, kurios paskutinis mantisės skaitmuo yra lyginis. Nuliui grąžinamas nulis. Jei nenulinė įvestis arba tikslus tarpinis rezultatas nepatenka į šią apibrėžimo sritį, sustokime ir praneškime apie leistino intervalo pažeidimą. Tokios reikšmės tyliai nepakeičiame nuliu ar begalybe ir neapibrėžiame subnormaliųjų reikšmių. Šis formatas yra mokomasis modelis, o ne teiginys apie konkretų kompiuterį.
Atlikdami kiekvieną šio modelio operaciją, pirmiausia apskaičiuokime tikslų skaitinį rezultatą, o tada pritaikykime R. Skliaustai nurodo veiksmų eilę, o kiekvienos operacijos rezultatas apvalinamas atskirai. R yra mūsų nurodyta matematinė taisyklė, o ne Python funkcija round. Kai skaičiuojama su dydžiu, taisyklę taikykime jo skaitinei vertei, išreikštai nurodytu matavimo vienetu, ir išlaikykime gauto dydžio rūšį bei matavimo vienetą. Neapibrėžta tiksli operacija, pavyzdžiui, dalyba iš nulio, neduoda rezultato, kurį būtų galima apvalinti.
| Tiksli skaitinė įvestis q | R(q) | Priežastis |
|---|---|---|
| 7.123 | 7.12 | Artimiausia atvaizduojama reikšmė yra 7.12. |
| 7.125 | 7.12 | Tiksliai per vidurį: paskutinis skaitmuo 2 yra lyginis. |
| 7.135 | 7.14 | Tiksliai per vidurį: paskutinis skaitmuo 4 yra lyginis. |
| 100.2 | 100 | Kai reikšmė yra 100 arba didesnė, atvaizduojamų skaičių žingsnis yra 1. |
| 0.001 | Reikšmė už diapazono ribų | Ši nenulinė įvesties reikšmė yra mažesnė už 0.0100. |
| 1100 | Diapazono viršijimas | Ši įvesties reikšmė viršija 999. |
Matuokite skaitinę paklaidą pagal atskaitos reikšmę
Tarkime, z yra tikslus atskaitos rezultatas, o ẑ – apskaičiuotas jo artinys; abu yra tos pačios rūšies dydžiai, išreikšti tuo pačiu vienetu. Paklaida su ženklu yra ẑ − z, o absoliučioji paklaida – |ẑ − z|. Jei z ≠ 0, santykinės paklaidos modulis yra |ẑ − z|/|z| – bedimensis santykis. Kai atskaitos reikšmė lygi nuliui, santykinė paklaida neapibrėžta; vietoj jos taikykite tinkamą absoliutųjį palyginimą. Toliau paklaidų analizei naudojama tiksli atskaitos aritmetika; maža paklaidos reikšmė pati nebūtinai gali būti atvaizduota mokomuoju formatu.
Kai pateiktas tikslus ilgis yra 7.123 m, išsaugojus R(7.123) m = 7.12 m, paklaida su ženklu yra −0.003 m, o absoliučioji paklaida – 0.003 m. Santykinės paklaidos modulis yra 0.003/7.123 = 3/7123, apytiksliai 0.000421, arba 0.0421%. Paklaida apskaičiuojama pagal tikslią mokomojo pavyzdžio įvestį, o ne nustatoma pagal rodomų skaitmenų po kablelio skaičių.
Šiame slankiojo kablelio formate atstumas tarp gretimų atvaizduojamų skaičių kinta priklausomai nuo mastelio. Tarp 1.00 ir 9.99 šis atstumas yra 0.01; tarp 100 ir 999 jis yra 1. Todėl mažas dėmuo gali išnykti, kai pridedamas prie gerokai didesnės reikšmės. Vienos operacijos vietinė apvalinimo paklaidos riba savaime neapriboja viso skaičiavimo paklaidos.
Sekite apvalinamų operacijų tvarką
Įprasta realiųjų skaičių sudėtis yra asociatyvi: skliaustai rezultato nekeičia, (a + b) + c = a + (b + c). Aritmetika su apvalinimu gali duoti skirtingus rezultatus, nes kiekvienas tarpinis rezultatas vėl atvaizduojamas naudojamu formatu. Sekite kiekvieną operaciją, o ne apvalinkite tik galutinę tikslią sumą.
Pateikite padėties pokyčius su ženklais išilgai vienos fiksuotos ašies, kurių skaitinės reikšmės metrais yra a = 100, b = 0.200 ir c = −100. Tiksli jų suma realiųjų skaičių aritmetikoje yra 0.200 m. Grupuojant iš kairės, R(100 + 0.200) = 100, tada R(100 − 100) = 0. Grupuojant iš dešinės, R(0.200 − 100) = −99.8, tada R(100 − 99.8) = 0.200. Visi išvardyti nenuliniai rezultatai patenka į mūsų nurodytą diapazoną.
Šiuo atveju grupavimas iš dešinės išsaugo mažą dėmenį. Tai neįrodo, kad vienas grupavimo būdas visada geriausias ar kad savavališkai keisti operacijų tvarką tikroje programoje yra nekenksminga. Būtina nurodyti ir patikrinti faktiškai naudojamą formatą, operacijas, kompiliatorių ir programinį realizavimą; mūsų skaičiavime ranka apvalinimo eiga nurodyta aiškiai.
Tirkite reikšminių skaitmenų praradimą ir atsargiai pertvarkykite
Atimant beveik lygias reikšmes, jų pirmieji reikšminiai skaitmenys panaikinami. Jei šios reikšmės jau turi aproksimavimo paklaidų, jų skirtumo santykinė paklaida gali būti gerokai didesnė. Pati atimtis nebūtinai sukelia paklaidą: ji gali išryškinti ankstesnio apvalinimo paklaidas.
Šios pamokos originaliam plotų palyginimo pavyzdžiui nurodykite tikslius kvadratų kraštinių ilgius a = 1.01 m ir b = 1.00 m. Tikslus jų plotų skirtumas yra D = a² − b² = 0.0201 m². Taikydami mūsų formatą, apvalinkite skaitinius rezultatus, išreikštus m²: R(1.01 × 1.01) = 1.02 ir R(1.00 × 1.00) = 1.00. Jų suapvalintas skirtumas yra R(1.02 − 1.00) = 0.0200. Galutinė šių suapvalintų operandų atimtis yra tiksli, tačiau ploto paklaida yra −0.0001 m².
Tapatybė a² − b² = (a − b)(a + b) leidžia pasirinkti kitą skaičiavimo būdą. Metrais išreikštų ilgių skaitinis skirtumas ir suma yra R(1.01 − 1.00) = 0.0100 ir R(1.01 + 1.00) = 2.01. Jų sandauga, išreikšta m², yra R(0.0100 × 2.01) = 0.0201 — tiksli šio atvejo atskaitos reikšmė. Svarbūs ir matavimo vienetai, ir kiekvienas tarpinis apvalinimas.
Laikykite tai patikrintu pagerinimu šiems tiksliems pradiniams duomenims, o ne teorema, kad skaičiavimas pagal išskaidytą į dauginamuosius išraišką yra tikslus ar stabilus su visais pradiniais duomenimis. Išraiškos pertvarkymas negali atkurti informacijos, jau prarastos dėl pradinių duomenų neapibrėžties ar apvalinimo, ir gali sukelti kitų problemų, susijusių su vaizduojamų reikšmių diapazonu ar apibrėžimo sritimi.
Atskirkite sąlygotumą ir stabilumą
Sąlygotumas yra matematinio uždavinio savybė: jis nusako, kiek pasikeičia tikslus rezultatas, kai pasikeičia nurodyti pradiniai duomenys. Jis priklauso nuo pradinių duomenų reikšmių ir nuo to, kaip matuojami pokyčiai. Uždavinys gali būti jautrus net tada, kai kiekviena aritmetinė operacija atliekama tiksliai. Highamas šį skirtumą aprašo pasitelkdamas sąlygotumo skaičius, kuriais lyginamas pradinių duomenų ir rezultato jautrumas.
Tiksliam ilgių skirtumo uždaviniui d = a − b imkite a = 1.04 m ir b = 1.03 m, taigi d = 0.0100 m. Pakeiskite pateiktus pradinius duomenis į a′ = 1.045 m ir b′ = 1.025 m. Kiekviena pradinė reikšmė pasikeičia 0.005 m, mažiau nei 0.5% jos pradinio dydžio, tačiau d′ = 0.0200 m: tai 100% pokytis pradinio skirtumo atžvilgiu. Tai jautrumo baigtiniams pokyčiams skaičiavimas, atliekamas tikslia realiųjų skaičių aritmetika, atskiras nuo mūsų pavyzdžių su apvalinamomis operacijomis.
Stabilumas yra algoritmo savybė: jis nusako, kaip vykdant algoritmą atsiradusios paklaidos veikia rezultatą. Vienas svarbus apibrėžimas — atgalinis stabilumas — kelia klausimą, ar apskaičiuotas rezultatas yra tikslus uždavinio sprendinys su šiek tiek pakeistais pradiniais duomenimis, pokyčio mažumą vertinant pagal aritmetikos tikslumą ir nurodytą paklaidos matą. Jautrus uždavinys gali turėti stabilų algoritmą, tačiau jo rezultatas vis tiek gali būti santykinai jautrus.
Šios pamokos originaliuose sumos ir ploto pavyzdžiuose lyginami konkretūs skaičiavimo būdai; jais nenustatoma jokia bendroji atgalinio stabilumo riba. Kita vertus, perėjus prie didesnio tikslumo formato, galima sumažinti skaičių vaizdavimo ir operacijų paklaidas, nesumažinant pateiktų fizikinių duomenų neapibrėžties. Atskirkite tikslų uždavinį, jo jautrumą pradiniams duomenims ir įgyvendintą algoritmą.
Nagrinėkite dvejetainius slankiojo kablelio skaičius ir apibrėžkite palyginimus
Baigtinė dvejetainė trupmena yra sveikasis skaičius, padalytas iš dvejeto laipsnio. Todėl tikslus dešimtainis skaičius 0.125 = 1/8 turi baigtinį dvejetainį atvaizdą; 0.1 = 1/10 jo neturi, nes šios nesuprastinamos trupmenos vardiklis turi dauginamąjį penketą. Python mokomojoje medžiagoje aiškinama ši skaičių vaizdavimo problema ir atskiriama saugoma dvejetainė reikšmė nuo jos sutrumpinto dešimtainio rodinio. Tai nereiškia, kad kiekviena saugoma reikšmė yra netiksli.
Patikrintame CPython interpretatoriuje, kuriame float skaičių pagrindas yra du, o tikslumas — 53 bitų, išraiška 0.1 + 0.2 rodoma kaip 0.30000000000000004. Tai patikrintas pavyzdys nurodytoje float aplinkoje; mūsų trijų skaitmenų dešimtainis formatas yra atskiras modelis.
Toje aplinkoje palyginimo (0.1 + 0.2) == 0.3 rezultatas yra False. Lygybės tikrinimas lygina saugomas reikšmes, o ne numatytų dešimtainių realiųjų įvesties skaičių lygybę.
Baigtinėms palyginamoms reikšmėms a ir b Python funkcija math.isclose taiko sąlygą |a − b| ≤ max(r max(|a|, |b|), A), kur r yra santykinė palyginimo tolerancija, o A – absoliučioji palyginimo tolerancija. Čia naudokite neneigiamas tolerancijas, kai r < 1. Jei reikšmės išreiškia fizikinius dydžius, abi skaitinės įvesties reikšmės ir A turi būti išreikštos tuo pačiu pasirinktu matavimo vienetu, o r yra bedimensis dydis. Funkcija už jus matavimo vienetų nepriskiria.
Vien santykinė palyginimo tolerancija negali leisti nenulinės reikšmės laikyti artima nuliui, kai r < 1. Tinkama teigiama absoliučioji tolerancija tai gali leisti. Tolerancijas rinkitės pagal nurodytą skaitinį tikrinimą ir jo paskirtį; numatytosios vertės ar tenkinama palyginimo sąlyga nenustato matavimo neapibrėžties, nepatvirtina modelio tinkamumo ir nėra stabilumo įrodymas. Nebaigtines reikšmes reikia tikrinti atskirai.
Patikrinkite skaičiavimą ir nurodykite jo ribas
Prieš interpretuodami skaitinį rezultatą, išsaugokite informaciją apie įvesties reikšmių prasmę ir matavimo vienetus, skaičių formatą ir diapazoną, veiksmų tvarką ir palyginimo taisyklę. Jei turite nedidelės apimties atvejį su tiksliu rezultatu, palyginkite su juo. Užfiksuokite diapazono ribų pažeidimus ir nebaigtinius rezultatus, užuot kiekvieną grąžintą skaičių laikę fizikiniu atsakymu.
Tikslumo pakeitimas arba algebriškai lygiaverčio skaičiavimo būdo naudojimas gali atskleisti skaitinio skaičiavimo problemą. Dviejų rezultatų sutapimas yra naudinga informacija, kurią verta išnagrinėti, tačiau jis neįrodo bendrų fizikinių prielaidų teisingumo ir neatmeta abiem skaičiavimams bendros klaidos galimybės. Dokumentuokite, kurios įvesties reikšmės buvo tiksliai nustatytos sąlygoje, o kurios gautos matuojant, ir nepateikite skaitinio rezultato skaitmenų kaip fizikinės neapibrėžties įverčio.
Šioje pamokoje patikrintos skaičiavimo baigtiniu skaičių formatu ypatybės, vienas naudingas pertvarkymas ir tikslus jautrumo pavyzdys. Kitoje mokymosi plano temoje „Šaknų paieška ir optimizavimas“ sprendiniams ir ekstremumams rasti naudojamos skaitinės procedūros; skaičių vaizdavimas, algoritmo sąlygos ir stabdymo kriterijai tebėra dalis informacijos, reikalingos jų rezultatams interpretuoti.
Išnagrinėti pavyzdžiai
Palyginkite du sumavimo būdus su apvalinimu
Nurodytu dešimtainiu formatu susumuokite tikslius padėties pokyčius su ženklais išilgai vienos nekintančios ašies: 100 m, 0.200 m ir −100 m. Naudokite abu skliaustų išdėstymo būdus. Kuris rezultatas sutampa su tikslia realiųjų skaičių suma?
- Naudokite metrais išreikštas skaitines reikšmes ir apvalinkite po kiekvieno veiksmo. Visas tris įvesties reikšmes galima pavaizduoti tiksliai.
- Grupuojant iš kairės, tiksli pirmoji suma yra 100.200. Artimiausia trijų skaitmenų reikšmė yra 100, todėl 0.200 indėlis prarandamas.
- Kitas atimties veiksmas grupuojant iš kairės duoda R(100 − 100) = 0, taigi apskaičiuota bendra suma yra 0 m.
- Grupuojant iš dešinės, R(0.200 − 100) = −99.8; ši reikšmė tiksliai atvaizduojama. Tada R(100 − 99.8) = 0.200.
- Tiksli realiųjų skaičių suma yra 0.200 m. Grupuojant iš kairės gauto rezultato absoliučioji paklaida yra 0.200 m, o santykinė paklaida – 100%; grupuojant iš dešinės gautas rezultatas šiuo atveju yra tikslus.
Grupuojant iš kairės gaunama 0 m, o grupuojant iš dešinės – 0.200 m. Tik grupuojant iš dešinės gautas rezultatas sutampa su šia tikslia atskaitos reikšme; šis pavyzdys nenustato visų galimų sumavimo metodų pranašumo tvarkos.
Palyginkite plotų skirtumų skaičiavimą tiesiogiai ir išskaidžius dauginamaisiais
Naudodami dešimtainį formatą, apskaičiuokite kvadratų, kurių tikslios kraštinės yra 1.01 m ir 1.00 m, plotų skirtumą. Palyginkite tiesioginį kėlimą kvadratu su dauginamaisiais išskaidytos tapatybės naudojimu.
- Tiksli atskaitos reikšmė yra (1.01² − 1.00²) m² = 0.0201 m². Abi kraštinių įvesties reikšmės tiksliai atvaizduojamos.
- Tiesiogiai keliant kvadratu gaunamos tikslios skaitinės reikšmės 1.0201 ir 1.0000, išreikštos m²; jos suapvalinamos iki 1.02 ir 1.00.
- Suapvalinus jų atimties rezultatą, gaunama 0.0200 m². Jo paklaida su ženklu yra −0.0001 m², o santykinės paklaidos modulis – 1/201, maždaug 0.498%.
- Skaičiuojant pagal dauginamaisiais išskaidytą išraišką, gaunamas 0.0100 m skirtumas ir 2.01 m suma; abi reikšmės yra tikslios šiame formate. Jų sandauga yra 0.0201 m² ir taip pat tiksliai atvaizduojama.
- Nurodykite, kodėl atsirado tiesioginio skaičiavimo paklaida: pirmoji kvadratu pakelta reikšmė buvo suapvalinta prieš tiksliai atimant suapvalintus operandus. Skaičiavimo išskaidžius dauginamaisiais pagerėjimas patikrintas tik šioms įvesties reikšmėms.
Skaičiuojant tiesiogiai gaunama 0.0200 m²; skaičiuojant pagal dauginamaisiais išskaidytą išraišką gaunama tiksli reikšmė 0.0201 m². Lyginama skaitinė paklaida naudojant nurodytą formatą, o ne išmatuoto ploto neapibrėžtis.
Atlikite palyginimą dvejetainiu slankiojo kablelio formatu
Patikrintoje dvejetainėje aplinkoje, kurioje Python float reikšmės turi 53 bitų tikslumą, išnagrinėkite dešimtainiu pavidalu įvestų skaičių sumą ir palyginkite ją su 0.3, tikrindami lygybę ir taikydami nurodytą absoliučiąją toleranciją.
- Importuokite palyginimo modulį naudodami
import math. Šiuose bandymuose naudojamos bedimensės skaitinės reikšmės, o ne matavimų rezultatai. - Vykdykite
print(0.1 + 0.2). Patikrintas interpretatorius rodo 0.30000000000000004. - Vykdykite
print((0.1 + 0.2) == 0.3). Patikrintas išvesties rezultatas yraFalse: saugomas rezultatas skiriasi nuo saugomos 0.3 reikšmės. - Vykdykite
print(math.isclose(0.1 + 0.2, 0.3, rel_tol=0.0, abs_tol=1e-15)). Taikant nurodytą absoliučiojo palyginimo taisyklę, patikrintas išvesties rezultatas yraTrue. - Tolerancija 10⁻¹⁵ yra originalus šio skaitinio bandymo pasirinkimas, o ne fizikinė neapibrėžtis ar universali riba. Pakeitus rodymo formatą, saugomos reikšmės nepasikeistų.
Tikslios saugomų reikšmių lygybės patikra nepraeina, o nurodyta artumo patikra praeina. Abu rezultatai atitinka nurodytą skaičių vaizdavimo būdą ir palyginimo taisyklę.
Pabandykite patys
Raskite R(8.765) ir R(8.775) mokomajame dešimtainiame formate. Kas turėtų nutikti tikslioms įvesties reikšmėms 0.001 ir 1100?
Rodyti atsakymą ir paaiškinimą
R(8.765) = 8.76 ir R(8.775) = 8.78. Kitos dvi įvesties reikšmės sukelia nurodytas diapazono pažeidimo klaidas.
Kiekviena iš pirmųjų reikšmių yra per vidurį tarp gretimų šimtųjų; pasirinkite lyginį paskutinį reikšminės dalies skaitmenį – 6 arba 8. Nenulinė reikšmė 0.001 yra mažesnė už 0.0100, o 1100 viršija 999. Pagal mūsų taisyklę jos nėra tyliai pakeičiamos nuliu ar begalybe.
Pateiktas tikslus ilgis 6.283 m vaizduojamas kaip 6.28 m. Raskite paklaidą su ženklu, absoliučiąją ir santykinę paklaidą. Ar šią santykinės paklaidos formulę galima naudoti, kai tiksli atskaitos reikšmė lygi nuliui?
Rodyti atsakymą ir paaiškinimą
Paklaida su ženklu yra −0.003 m, absoliučioji paklaida – 0.003 m, o santykinės paklaidos modulis – 3/6283, maždaug 0.0477 %. Kai atskaitos reikšmė lygi nuliui, santykinė paklaida neapibrėžta.
Iš apytikslės reikšmės atimkite tiksliąją atskaitos reikšmę, tada paklaidos modulį padalykite iš 6.283 m. Santykyje matavimo vienetai susiprastina. Dalyba iš nulio nėra paklaidos matas; tokiu atveju pateikite absoliutųjį palyginimą.
Sudėkite padėties pokyčius su ženklais išilgai vienos fiksuotos ašies, kurių skaitinės vertės metrais yra 100, 0.400 ir −100, naudodami (a + b) + c ir a + (b + c) ir po kiekvienos operacijos taikydami R. Palyginkite su tikslia suma.
Rodyti atsakymą ir paaiškinimą
Pirmuoju grupavimo būdu gaunama 0 m; antruoju – 0.400 m, t. y. tikslioji atskaitos reikšmė.
R(100.400) = 100, tada R(100 − 100) = 0. Grupavus kitaip, R(0.400 − 100) = −99.6, tada R(100 − 99.6) = 0.400. Visos tarpinės reikšmės priklauso formato apibrėžimo sričiai.
Kai tikslūs kvadratų kraštinių ilgiai yra 2.01 m ir 2.00 m, apskaičiuokite plotų skirtumą tiesiogiai ir pagal (a − b)(a + b), po kiekvienos operacijos apvalindami nurodytais matavimo vienetais išreikštą rezultatą.
Rodyti atsakymą ir paaiškinimą
Skaičiuojant tiesiogiai gaunama 0.0400 m²; skaičiuojant pagal išskaidytą reiškinį gaunama tiksli reikšmė 0.0401 m².
Tikslūs kraštinių ilgių kvadratai yra 4.0401 ir 4.0000 m²; jie suapvalinami iki 4.04 ir 4.00, o jų skirtumas yra 0.0400 m². Skaičiuojant pagal išskaidytą reiškinį naudojamos tiksliai atvaizduojamos reikšmės 0.0100 m ir 4.01 m, kurių sandauga 0.0401 m² taip pat atvaizduojama. Tai dar vienas patikrintas atvejis, o ne įrodymas, galiojantis visiems įvesties duomenims.
Uždavinyje d = a − b, kai skaičiuojama tiksliai, pakeiskite a = 1.04 m ir b = 1.03 m į a′ = 1.035 m ir b′ = 1.035 m. Koks yra rezultato pokytis? Ar jam atsirasti būtina apvalinimo paklaida?
Rodyti atsakymą ir paaiškinimą
Skirtumas pasikeičia iš 0.0100 m į 0 m; absoliutusis pokytis yra 0.0100 m, o pokytis pradinio skirtumo atžvilgiu – 100%. Apvalinimo paklaida tam nebūtina.
Įvesties duomenų pokyčiai yra −0.005 m ir +0.005 m, o atliekant tikslią atimtį mažasis skirtumas pakinta visu savo pradiniu dydžiu. Tai tiksliojo uždavinio jautrumas pateiktiems įvesties duomenims; skaičiavimas naudojant daugiau skaitmenų šio įvesties duomenų pokyčio nepanaikina.
Importavę math, palyginkite baigtinę reikšmę 10⁻¹⁰ su nuliu naudodami
math.isclose(1e-10, 0.0, rel_tol=1e-9, abs_tol=0.0). Tada pakartokite nustatę nulinę santykinę toleranciją ir 10⁻⁹ absoliučiąją toleranciją. Paaiškinkite rezultatus ir jų taikymo ribas.Rodyti atsakymą ir paaiškinimą
Iškvietimas naudojant tik santykinę toleranciją grąžina
False; iškvietimas naudojant absoliučiąją toleranciją grąžinaTrue. Nė vienas iš šių rezultatų nėra teiginys apie matavimo neapibrėžtį.Pirmojo kvietimo atveju nenulinis skirtumas negali tenkinti |a| ≤ r|a|, kai r < 1. Antrasis kvietimas yra
math.isclose(1e-10, 0.0, rel_tol=0.0, abs_tol=1e-9): jis leidžia mažesnį nei 10⁻⁹ skirtumą pasirinktu skaitiniu vienetu. Šios palyginimo tolerancijos apibrėžia pateiktą patikrą; jos nei patvirtina fizikinį nulį, nei įrodo algoritmo stabilumą.
Ką verta įsidėmėti
- Prieš interpretuodami apskaičiuotą skaičių, nurodykite dydžių prasmę, vienetus, formato tikslumą, diapazoną ir apvalinimo taisykles.
- Baigtinis skaičių atvaizdavimas ir pakartotinis apvalinimas gali pakeisti rezultatus net tada, kai kiekviena atskira operacija atliekama pagal jai nustatytą taisyklę.
- Santykinei skaitinei paklaidai nustatyti naudokite nenulinę tikslią atskaitos reikšmę; arti nulio nurodykite tinkamą absoliutųjį palyginimą.
- Reikšminių skaitmenų praradimas atimant gali išryškinti operanduose jau esančias paklaidas, o patikrintas išraiškos pertvarkymas gali pagerinti konkretų skaičiavimą.
- Sąlygotumas nusako tikslaus uždavinio jautrumą pradiniams duomenims; stabilumas nusako, kaip algoritmas susidoroja su vykdymo paklaidomis.
- Tiksliai išsaugokite kodą ir aplinkos įrašus, nurodykite leistinuosius palyginimo nuokrypius ir atskirkite skaitines patikras nuo fizikinės neapibrėžties ir modelio validavimo.
Šaltiniai
Šio straipsnio sąvokų ir mokymo būdų šaltiniai.
- What Every Computer Scientist Should Know About Floating-Point Arithmetic (1991)David Goldberg — edited reprint in Oracle Numerical Computation Guide; original ACM Computing Surveys paperMokomoji medžiaga
- Floating-Point Arithmetic: Issues and LimitationsPython Software Foundation — Python documentationMokomoji medžiaga
- Notes on floating point number, numerical computations and pitfalls (6 November 2012)Indian Institute of Technology Delhi — Department of Computer Science and Engineering, shared course notesMokomoji medžiaga · PDF
Nicholas J. Higham — original author explanation; University of Manchester numerical-analysis context2 šaltiniai
- What Is a Condition Number? (19 March 2020)Nicholas J. Higham — original author explanation; University of Manchester numerical-analysis contextMokomoji medžiaga
- What is Numerical Stability? (4 August 2020)Nicholas J. Higham — original author explanation; University of Manchester numerical-analysis contextMokomoji medžiaga
- math.isclose and math.isfinite — Mathematical functionsPython Software Foundation — Python standard-library documentationŽinynas