Anvendelse af matematik til konkrete beregninger ved J.B. Sand, Datalogisk Institut, KU Praktisk/teoretisk PROBLEM BEREGNINGSPROBLEM og INDDATA LØSNINGSMETODE EVT. LØSNING REGNEMASKINE Når man vil regne noget ud, er det fordi man har et praktisk eller teoretisk problem, som man via matematikken har beskrevet helt eller delvist som et beregningsproblem. F.eks. vil man måske gerne finde ud af hvor megen maling, der skal bruges til at male en given væg, om en given spand kan rumme en vis mængde vand, hvilke rødder et givet andengradspolynomium har, eller om to givne linier skærer hinanden, og i bekræftende fald hvor. Disse praktiske og teoretiske problemer kan vi via matematikken beskrive som f.eks. følgende beregningsproblemer: Den givne væg har form som et rektangel med længde og højde på hhv. 5, 58 og 3, 42 meter, og malingens rækkeevne er fra 7 til 9 m 2 pr. liter. Vi ønsker derfor at beregne rektanglets areal i m 2 divideret med 8 m 2 /l dvs. malingens gennemsnitlige rækkeevne. Spanden har form som en cylinder med indvendig diameter og højde på hhv. 31, 5 og 51, 5 cm. Vi ønsker at beregne cylinderens rumfang for at se, om den kan rumme 40 l vand. Polynomiet er px = 10x 2 41347528x + 119, og vi ønsker rødderne beregnet med mindst 7 cifres nøjagtighed. Linierne l 1 og l 2 ligger i et to-dimensionelt koordinatsystem og er beskrevet ved ligningerne: l 1 : 696707 x 836005645 y = 10088917 l 2 : 717 x + 860356 y = 10383 Vi ønsker at beregne, om linierne skærer hinanden, og i givet fald selve skæringspunktet med mindst 1 ciffers nøjagtighed. Tallene ovenfor kaldes for inddata til beregningsproblemerne, og de har selvfølgelig betydning for hvilke uddata tal vi får som resultat af vores beregninger.
Vi mangler nu blot at finde en måde at løse beregningsproblemerne på, dvs. en løsningsmetode og en regnemaskine lommeregner/computer/os selv, for at vi kan få lavet de uddata, der eventuelt løser vores praktiske eller teoretiske problem jf. figuren i starten af afsnittet! Lad os se nærmere på, om vi kan få løst de fire nævnte problemer: Hvor megen maling skal der bruges til væggen? Vi ser af beregningsproblemet, at vi blot skal beregne rektanglets areal i m 2 og dividere dette areal med 8 m 2 /l. Som løsningsmetode bruger vi selvfølgelig den matematiske formel for arealet af et rektangel, og som regnemaskine er det nok lettest at bruge lommeregneren. Resultatet bliver så 2,38545 l Men løser dette vores praktiske problem?? Det ville jo være ærgerligt, hvis vi brugte tid på at købe en 2 1 l dunk maling, og det så viste sig, at løsningen 2 på vores praktiske problem faktisk var større end 2 1l! 2 Væggen kunne f.eks. være en gammel væg beklædt med hessian, der aldrig tidligere var blevet malet, og som derfor sikkert ville suge megen maling til sig. Hvis rækkeevnen kun er 7 m 2 /l, vil 2 1 l dunken ikke være tilstrækkelig! 2 Desuden kunne væggen jo være meget mørkere end den farve, som vi ønsker at male med, og væggen skulle så nok males mere end een gang! Endelig er det jo sjældent, at man checker hvor rektangulære ens vægge er, så måske er væggen slet ikke er rektangulær, hvis vi ser nærmere efter! Med andre ord: Pas på med at bruge beregnede løsninger, hvis der i beregningsproblemet 1 mangler væsentlige oplysninger om det virkelige problem, eller 2 er oplysninger, der ikke er 100% korrekte. Kan spanden rumme de 40 l vand? Belært af eksemplet ovenfor, checker vi nu beregningsproblemet for mangler og fejl! Det viser sig, at spanden er cylinder-formet, og at de indvendige mål er så nøjagtige, at vi med vores målebånd ikke kan aflæse dem mere nøjagtigt. Igen bruger vi en matematisk formel som løsningsmetode. Formlen siger, at rumfanget af en cylinder er π radius 2 højde, og vi kan derfor regne løsningen til beregningsproblemet ud på lommeregneren: Resultatet er 40134,53338... cm 3 = 40,1 l Da vi kun har målt diameteren og højden med 3 cifres nøjagtighed, kan vi jo nok ikke angive rumfanget med mere end 3 korrekte cifre, så derfor har vi afrundet resultatet til 40,1 l.
Men kan vi så være sikre på, at spanden kan rumme de 40 l? Selvom beregningsproblemet gengav det virkelige problem så korrekt som muligt, kunne de eksakte mål jo f.eks. være diameter = 31,45023423... cm og højde = 51,45114530... cm og dette vil faktisk betyde, at spanden ikke helt kan rumme 40 l, men kun ca. 39,97 l. Dvs. Pga. den begrænsede nøjagtighed af inddata, kan vi kun angive resultatet med 2 korrekte cifre: 40 l, og derfor kan vi heller ikke løse dette problem. Hvilke rødder har polynomiet p? Belært af de to foregående eksempler, checker vi beregningsproblemet og inddata! Vi finder, at vi har en korrekt og fuldstændig beskrivelse af vores problem, og at inddata består af eksakte heltal. Som løsningsmetode vil vi bruge den velkendte matematiske formel for rødderne i et andengradspolynomium px = ax 2 + bx + c: x = b ± b 2 4ac/2a. Vi benytter en lommeregner, hvor vi kan lagre tal og mellemresultater med 10 cifres nøjagtighed, idet vi ikke selv orker at regne med så mange cifre. Selvom vi kunne have benyttet en computer, skulle vi have bedt den om ekstra præcision, idet den normalt kun regner med ca. 7 cifres nøjagtige decimaltal, og dette er sandsynligvis ikke nok til at finde rødderne med den ønskede nøjagtighed på 7 cifre. Vi får følgende mellemresultater på lommeregneren: b 2 = 1, 709618072 10 15 b 2 4ac = 1, 709618072 10 15 b2 4ac = 41347528, 00... x = 41347528,00±41347528,00 20 x = 4134752, 800 og x = 0, 000000000 Hvis vi gør prøve ved at indsætte de beregnede rødder i polynomiet, får vi dog, at p4134752, 800 og p0, 000000000 begge giver værdien 119, så har vi fundet rødderne med den ønskede nøjagtighed på 7 cifre? Det kan vises, at det første resultat 4134752,800 faktisk er den korrekte rod afrundet til 10 cifre!, så dette resultat er OK. I det andet resultat har vi dog kun 5! korrekte decimaler, og her burde vi i stedet have anvendt en anden matematisk formel. Der gælder nemlig følgende:
I et andengradspolynomium px = ax 2 + bx + c vil produktet af de to rødder x 1 og x 2 være b + b 2 4ac b b 2 4ac 2a 2a = b2 b 2 4ac 2 4a 2 = c a. Dvs. hvis roden x 1 er forskellig fra 0, er roden x 2 lig med c/a/x 1. Vi prøver at bruge den understregede formel og lommeregneren og finder nu den anden rod afrundet til 10 cifres nøjagtighed: x 2 = 11, 90000000/4134752, 800 = 2, 878043882 10 6. Vi får altså løst dette problem ved at udskifte løsningsmetoden. Moralen er: På regnemaskiner bør man såvidt muligt undgå løsningsmetoder, hvor man skal trække to næsten lige store tal fra hinanden, idet nøjagtigheden vil mindske. Løsningerne til ligningen ax 2 + bx + c = 0, hvor a 0, bør derfor findes således: x 1 = x 2 = { b + b2 4ac/2a, hvis b 0 b b 2 4ac/2a, hvis b > 0 { c/a/x1, hvis x 1 0 b/a, hvis x 1 = 0 Skærer de to linier hinanden, og i givet fald hvor? Igen har vi et beregningsproblem, der er en korrekt og fuldstændig beskrivelse af vores teoretiske problem, og igen er inddata eksakte heltal. Vi finder nogle matematiske formler, der siger, at to linier givet ved ligningerne l 1 : a 11 x + a 12 y = b 1 l 2 : a 21 x + a 22 y = b 2 skærer hinanden hvis og kun hvis d = a 11 a 22 a 21 a 22 er forskellig fra 0, og skæringspunktet x, y er da givet ved x = b 1 a 22 b 2 a 12 /d og y = a 11 b 2 a 21 b 1 /d. Ved at sætte koefficienterne ind i udtrykket for d finder vi via lommeregneren, at d = 696707 860356 717 836005645 = 200 0,
Da vi her trækker to næsten lige store tal fra hinanden, ved vi dog fra det foregående eksempel, at nøjagtigheden på resultatet d = 200 nok er mindsket fra de 10 cifres nøjagtighed, som vi lagrede inddata med på lommeregneren, så kan vi overhovedet være sikre på, at d er forskellig fra 0? Hvis vi ser på de to tal, som vi subtraherer, kan vi dog let se, at det første ender på cifret 2, og at det andet ender på 5, så d er altså forskellig fra 0, dvs. linierne skærer hinanden! Da tallene, som vi subtraherer i d, hver er på 12 cifre, skal vi dog nok ikke tro på mere end det første ciffer i d = 200, så det er nok tvivlsomt, at vi kan bevare 1-ciffers-nøjagtigheden, når vi regner skæringspunktets koordinater ud via formlen: x = 10088917 860356 10383 836005645/d = 931690 = 9 10 5 y = 696707 10383 717 10088917/d = 776, 460 = 8 10 2 Faktum er, at hverken x eller y er blevet beregnet med een ciffers nøjagtighed, men hvad kan vi gøre for at få et mere nøjagtigt resultat? Der findes ikke formler, hvor man kan undgå at beregne noget, der er proportionalt med d, så derfor har vi kun to muligheder: 1 benytte en regnemaskine, der kan regne med mere end 10 cifres nøjagtighed f.eks. udføre beregningerne i dobbelt præcision på en computer, eller selv lave beregningerne, eller 2 prøve at omformulere beregningsproblemet, så det kan løses mere præcist på regnemaskinen. Lad os prøve det sidste. Det er svært at beregne skæringspunktet nøjagtigt, fordi vi ikke kan lagre de 12-cifrede produkter, som vi får som mellemresultater. Hvis vi kunne finde en fælles faktor i koefficienterne for en af ligningerne, kunne vi dividere alle koefficienterne med denne faktor og således få mindre koefficienter og produkter. Den nye ligning ville stadig beskrive den samme linie, så dette ville blot være en omformulering af det oprindelige beregningsproblem. Det synes dog at være lidt besværligt at finde en sådan fælles faktor i dette eksempel. Derimod kunne vi prøve at ændre den ene af linierne, så de to linier ikke er så tæt på at være parallelle, som de er nu: 696707 Normalvektoren til linien l 836005645 1 peger i næsten modsat 717 retning af normalvektoren til l 860356 2, hvilket gør linierne l 1 og l 2 næsten parallelle. Vi kan dog lave den første vektor vinkelret på den anden ved at trække
et multiplum af den anden fra den første: a11 a 12 = 696707 836005645 Den nye normalvektor er vinkelret på m 717 860356 717 860356, hvis. m = 717 696707 + 860356 836005645 717 2 + 860356 2 = 971, 697... Vi ønsker at bevare den nøjagtighed på 100%, som inddata har, og benytter derfor m = 972. Vi får: omformuleret beregningsproblem: Vi ønsker at afgøre, hvorvidt der er en løsning x, y til de to ligninger: l 1 972 l 2 : 217 x + 260387 y = 3359 l 2 : 717 x + 860356 y = 10383 og i givet fald beregne løsningen med mindst 1 ciffers nøjagtighed. Vores formel og regnemaskine giver nu d = 227 med 100% nøjagtighed, og det korrekte x, y afrundet til 10 cifres nøjagtighed: Moralen er: x = 820870, 4097 og y = 684, 1057269. Hvis et beregningsproblem ikke kan løses tilstrækkelig nøjagtigt på en regnemaskine, må vi enten benytte en mere nøjagtig regnemaskine eller prøve at omformulere beregningsproblemet. Når man skal løse to lineære ligninger med to ubekendte, kan man f.eks. omformulere problemet ved at trække et passende multiplum af den ene ligning fra den anden. Man bør dog passe på ikke at få en dårligere nøjagtighed i den nye ligning end den nøjagtighed, der var i den gamle. Hvis man vil læse mere om, hvordan man bør udføre beregninger, kan man finde flere oplysninger i bøger, der omhandler såkaldte numeriske beregninger. I sådanne bøger vil man også kunne finde løsningsmetoder til beregningsproblemer, hvis løsning ikke kan beskrives via matematiske formler!