Læringsprogram. - Numeriske metoder. Lavet af: Benjamin Løv Timmermann, Nicklas Nygaard Larsen og Kim Clemensen Holdt 3.4 Roskilde Tekniske Gymnasium

Relaterede dokumenter
lineær regression er en metode man bruger for at finde den mindste afstand mellem bestemte punkter ved at bruge denne formel: a= n i=1 i=1

Læringsprogram. Numeriske metoder. Matematik A Programmering C Studieområdet. Roskilde Tekniske Gymnasium Klasse 3.4

Numerisk differentiation og integration med Python

Dokumentation af programmering i Python 2.75

Differentialregning. Ib Michelsen

Integralregning Infinitesimalregning

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje.

Michael Jokil

Eksponentielle modeller

Opgave 1 - Lineær Funktioner. Opgave 2 - Funktioner. Opgave 3 - Tredjegradsligning

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

HTX, RTG. Rumlige Figurer. Matematik og programmering

Vejledning til WordMat på Mac

Vi har valgt at analysere vores gruppe ud fra belbins 9 grupperoller, vi har følgende roller

PeterSørensen.dk : Differentiation

Integralregning med TI-Interactive! Stamfunktioner Integraler Arealer Jan Leffers (2005)

Bedste rette linje ved mindste kvadraters metode

Projektopgave Rumlige figurer. Matematik & Programmering Lars Thomsen Klasse 3.4 HTX Roskilde Vejledere: Jørn & Karl 05/

Projektopgave 1. Navn: Jonas Pedersen Klasse: 3.4 Skole: Roskilde Tekniske Gymnasium Dato: 5/ Vejleder: Jørn Christian Bendtsen Fag: Matematik

Arealer som summer Numerisk integration

Pointen med Differentiation

MATEMATIK A. Indhold. 92 videoer.

Eksponentielle modeller

Undervisningsbeskrivelse for Matematik A 2. E 2011/2012

Brugervejledning til Graph

Mere om differentiabilitet

For at få tegnet en graf trykkes på knappen for graftegning. Knap for graftegning

BEVISER TIL KAPITEL 3

Klasse 1.4 Michael Jokil

Visualiseringsprogram

ROSKILDE TEKNISKE GYMNASIUM. Læringsprogram. Lommeregner

Forelæsning 11: Kapitel 11: Regressionsanalyse

Introduktion til differentialregning 1. Jens Siegstad og Annegrethe Bak

MATEMATIK A-NIVEAU. Anders Jørgensen & Mark Kddafi. Vejledende eksempler på eksamensopgaver og eksamensopgaver i matematik, 2012.

Undervisningsbeskrivelse

Statistik i GeoGebra

Undervisningsbeskrivelse

Undervisningsbeskrivelse

Matematik A og Informationsteknologi B

Newton-Raphsons metode

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

Undervisningsbeskrivelse

Eksaminationsgrundlag for selvstuderende

Undervisningsbeskrivelse

Opvarmningsopgaver. Gang parentesen ud: Forkort brøken: Gang parentesen ud: (1.5 + x) 2 (1 + x) 3. Forkort brøken. Gang parentesen ud: (x 0 + x) 3

Matematik B-niveau STX 7. december 2012 Delprøve 1

Undervisningsbeskrivelse

Matematik Terminsprøve 2h3g Ma/3

Undervisningsbeskrivelse

Matematik B-niveau 31. maj 2016 Delprøve 1

Eksempler på problemløsning med differentialregning

Matematik A, STX. Vejledende eksamensopgaver

Regneark Excel fortsat

Graph brugermanual til matematik C

Modellering af elektroniske komponenter

TERMINSPRØVE APRIL u Ma MATEMATIK. onsdag den 11. april Kl

Betydningen af ordet differentialkvotient...2. Sekant...2

Komunikation/It C Helena, Katrine og Rikke

Vektorer og lineær regression

Undervisningsbeskrivelse

Stx matematik B december Delprøven med hjælpemidler

ØVEHÆFTE FOR MATEMATIK C FORMLER OG LIGNINGER

Tak for kaffe! Tak for kaffe! Side 1 af 16

Oversigt. 1 Gennemgående eksempel: Højde og vægt. 2 Korrelation. 3 Regressionsanalyse (kap 11) 4 Mindste kvadraters metode

Computerundervisning

Mujtaba og Farid Integralregning

Vektorer og lineær regression. Peter Harremoës Niels Brock

2 Erik Vestergaard

1 monotoni & funktionsanalyse

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Differential- regning

Mini SRP. Afkøling. Klasse 2.4. Navn: Jacob Pihlkjær Hjortshøj, Jonatan Geysner Hvidberg og Kevin Høst Husted

Kompendium i faget. Matematik. Tømrerafdelingen. 2. Hovedforløb. Y = ax 2 + bx + c. (x,y) Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard

Automatisering Af Hverdagen

Matematik B. Studentereksamen. Tirsdag den 27. maj 2014 kl stx141-MAT/B

Matematisk modellering og numeriske metoder

Matematik A-niveau 22. maj 2015 Delprøve 2. Løst af Anders Jørgensen og Saeid Jafari

AT-forløb Jordskælv i Chile 1.u

FUNKTIONER. Eks. hvis man sætter 3 ind på x s plads bliver værdien 2*3 + 5 = 11. Sætter man 4 ind på x s plads vil værdien blive 2*4 + 5 = 13

Transkript:

Læringsprogram - Numeriske metoder Lavet af: Benjamin Løv Timmermann, Nicklas Nygaard Larsen og Kim Clemensen Holdt 3.4 Roskilde Tekniske Gymnasium

Indhold Introduktion... 3 Programmering som kommunikation... 3 Teknisk planlægning... 4 Ressourceplan... 4 Design... 4 Kravspecifikation... 5 Kommunikation planlægning... 5 Målgruppeanalyse... 5 Budskab... 5 Planlægning af tid... 5 Matematikken... 6 Numerisk differentiation... 6 Numerisk integration... 6 Numerisk rodbestemmelse... 6 Lineær regression... 7 Mindste kvadraters metode... 7 Korrelationskoefficient... 7 Moduler og dokumentation... 7 Sympy modulet... 7 Math modulet... 8 future modulet... 8 Dokumentation... 8 Differentiation... 8 Integration... 9 Rodbestemmelse... 9 Lineær regression... 10 Test... 11 Testspecifikation... 11 Testresultater... 11 Konklusion... 11 2

Introduktion Vi har fået stillet til opgave at lave et læringsprogram, der er i stand til at hjælpe elever, med en grundviden inden for matematik, at lære hvordan numerisk differentiation, numerisk integration, rodbestemmelse og lineær regression hænger sammen. Derefter skal programmet sammenligne den numeriske og den eksakte værdi. Programmering som kommunikation Kommunikation er et vidt begreb og kan foregå på mange måder, så som at tale og lytte, skrive og læse, tegne og observere, men udviklingen af computeren gav os endnu en mulighed programmering. Så kan det diskuteres om det rent faktisk også er at kommunikere, så lad os derfor se på hvad begrebet kommunikation dækker over. Kommunikation kan defineres som den samlede verbale og nonverbale interaktion mellem individer indbyrdes og/eller institutioner. Kommunikation (fra Latin commmunicatio = samkvem, trafik, forbindelse, udveksling af meddelelser, indbyrdes forståelse). (kommunikere = udveksle meddelelser el. synspunkter; få kontakt med andre). Grundlæggende er kommunikation i modsætning til information (som er en envejsmeddelelse til andre) en udveksling af informationer/viden mellem flere individer. - http://da.wikipedia.org/wiki/kommunikation Kommunikation er altså hvis 2 eller flere personer/institutioner interagere med hinanden. Derfor kan man altså sige at det man har programmeret, f.eks. en lommeregner, kommunikere med brugeren, da de udveksler informationer. Se eksempel: 3

Billedet viser et hurtigt program i Python der kommunikere ved at man giver den 2 tal og så lægger den dem sammen for dig. Python er et programmeringssprog ligesom C++ og JavaScript. Hvis man skulle finde nogle modargumenter for at man skulle sige at det ikke var kommunikation, så kunne det være at man ikke kan føre en dynamisk samtale med programmet. Men det er jo heller ikke derfor man bruger et program. Programmet bruger man til at udnytte dets egenskaber. Desuden kan vi heller ikke vide hvor længe der går før programmer der kan før en samtale kommer ud på markedet. Teknisk planlægning Ressourceplan Tidsplan Antal moduler Indhold Uge: Mat Pgr IT 1 2 1 2 Lineær regression 2 3 1 2 Numerisk differentiation Numerisk integration Design Tkinter og Qtdesigner 3 Terminsprøver 4 3 2 2 Dokumentation, afprøvning og aflevering Som det kan ses i skemaet har vi god tid til at få implementeret funktionerne. Design Vi starter med at kigge på det indre design, som er den kode der skal drive programmet. Når man starter programmet vil et vindue åbne, hvor der er mulighed for at vælge, hvilken matematisk funktion man ønsker at bruge. Det gøres ved at skifte fane i toppen. Efter valget af det matematiske begreb, beder programmet om de relevante inputs der er nødvendige for programmet. Kan man ikke helt finde ud af hvad man skal skrive kan man i toppen af programmet trykke på hjælp hvor man kan finde informationer om de enkelte funktioner og hvordan de bruges. Derudover findes der også en forklaring af de tilhørende matematiske begreber. 4

Kravspecifikation Programmet skal primært opfylde de betingelser der blev opsat i oplægget. Benjamin Timmermann, Nicklas Nygaard og Kim Holdt Finde den bedste lineære regression, ud fra et sæt punkter. Kunne regne numerisk differentiation. Kunne regne numerisk integration. Være muligt for brugeren at vælge antal inddelinger. Sammenligne det numeriske resultat med en analytisk løsning. Beskrive de metoder der er anvendt. Derudover skal programmet være brugervenligt opbygget, altså skal vores UI være let og overskueligt og output skal være fint. Kommunikation planlægning Målgruppeanalyse Vores målgruppe er folk, som har en basis viden indenfor matematiske begreber som lineær regression, numerisk differentiation, numerisk integration, og som kan bruge matematiske programmer. Der findes mange matematiske programmer, som kan hjælpe gymnasium elever. Programmer som Graph, Geogebra og Graphmatica, som kan yde hjælp til eleverne. Derfor laver vi nogle programmer som kan hjælpe elever med at løse de forskellige begreber. Vi kan altså konkludere at vores målgruppe er: Gymnasium elever Elever som har en indsigt i matematiske begreber og matematiske programmer Andre personer som søger hjælp til at forstå i de matematiske begreber programmet viser Budskab Vores budskab er at vise ved hjælp af et program i Python, at man kan udregne de forskellige begreber som; lineær regression, numerisk differentiation, numerisk integration. Og vi ønsker at de forskellige elever skal få en oplevelse af et program, som kan hjælpe med at udregne matematiske begreber. Planlægning af tid Tidsplan Antal moduler Indhold Uge: Mat Pgr IT 1 2 1 2 Lineær regression, og numerisk differentiation 2 3 1 2 Numerisk integration Start på rapporten. Qtdesigner 3 Terminsprøver 4 3 2 2 Dokumentation, Qtdesigner, afprøvning, laver rapporten færdig og afleverer. 5

Matematikken For at kunne implementere matematikken, må vi nødvendigvis kunne forstå hvorfor og hvordan det hænger sammen. Numerisk differentiation Numerisk differentiation går i alt sin enkelthed ud på at finde differentialkvotienten, ved numeriske metoder, altså ikke ved at finde den afledte funktion, men ved tilnærmelse af den afledte funktion, med hældningskoefficienten for en sekant til grafen. Formlen for numerisk differentiation ser sådan ud: X 0 er den x-værdi hvor man ønsker at finde hældningen. h er afstanden fra x 0 til der hvor man skal finde sekanten. Numerisk integration Numerisk integration er ligesom numerisk differentiation, ikke en eksakt løsning, men en tilnærmelse. Den fungerer altså ikke ved at man finde stamfunktionen, men ved at man dele intervallet op og benytter summer. Jo flere intervaller man har jo mere præcis bliver det. Numerisk integration inde for et interval, findes ved at opdele intervallet i flere delintervaller. Herefter finder man midtsummerne af disse delintervaller. Det giver formlen: Man kan også gøre det samme med venstre- eller højresummen, men i de fleste tilfælde giver det, det mest præcise resultat, når man bruger midtsummen. Numerisk rodbestemmelse Numerisk rodbestemmelse gøres ved hjælp af Newton-Raphsons metode. Newton-Raphsons metode benyttes kvadratisk konvergens til løsning af. Fremgangsmåden er at man starter med et x 0 og i dette punkt laver man en tangent til f(x 0 ). Ved denne tangent finder man skæringen, med x-aksen som nu bliver til. bliver nu det det nye punkt som man laver en tangent til, og finder skæring med x-aksen, og der med. Og sådan bliver man ved indtil forskellen af punkterne er tilfredsstillende. Formlen ser ud som følgende: Funktionen skal være kontinuert og differentiable. 6

Benjamin Timmermann, Nicklas Nygaard og Kim Holdt Lineær regression Lineær regression handler om at finde den bedste rette linje, der tilnærmer sig et punktsæt. Det kunne for eksempel være som på billede på højre. Hvor den røde linje er den rette linje der tilnærmer sig de blå punkter. Denne linje kan fastsættes efter mindste kvadraters metode. Linjen skal selvfølgelig lægge så tæt som muligt på samtlige punkter. Som et udtryk for hvor langt linjen ligger på punkterne, har man korrelationskoefficient, som skal være så tæt på 1 som mulig. Mindste kvadraters metode En ret linje har formlen: Vi ønsker altså at finde konstanterne på følgene måde: og. De kan findes ved mindste kvadraters metode. Man kan finde Hvor er gennemsnittet at alle x-værdierne, og er gennemsnittet at alle y-værdierne. Når man har fundet, kan man finde, på følgene måde. Korrelationskoefficient Korrelationskoefficient, som er et udtryk for hvor tæt linjen ligger på punkterne, kaldes også. Den regnes sådan: ( ) Korrelationskoefficient ligger altid mellem 0 og 1. Jo tætter den er på 1 jo tætter ligger linjen på punkterne. Hvis den er 1 går den gennem alle punkterne. Moduler og dokumentation Sympy modulet I størstedelen af vores udregninger har vi brugt funktioner fra Sympy modulet. Bl.a. egenskaben til at se som værdien/variablen og ikke som bogstavet x. Derudover henter vi også en integral funktion, da det er omfattende at lave funktionen selv. Sympy er et rigtig godt modul til matematiske beregninger, da det har godt og vel alle matematiske funktioner indbygget og er i stand til at opstille funktioner så det ser præsentabelt ud. Noget lign: 7

Det er altså godt at sætte tingene op med når vores program nu er et program der skal lære andre hvordan matematikken fungerer. Det giver et bedre overblik for dem der skal se på det. Math modulet Math er indbygget Python som standard og herfra henter vi kun kvadratrods funktionen sqrt(). future modulet Dette modul gør så vores udregninger altid er decimaler og at de ikke bliver nedrundet til et helt tal. Dokumentation Differentiation Vi startede ud med at lave delen af vores kode der kan differentiere. Her startede vi ud med at tilføje de input vi skal bruge, altså, og. h=input("h:") x0=input("x:") f=raw_input("f(x):") Så har vi delt formlen for numerisk differentiation op i 3 dele, så vi har plus og minus som 2 funktioner hvorefter vi indsætter resten af formlen. Grunden til at vi har delt det op er at vi ikke kunne få den til at udregne resultatet korrekt da vi havde det i en enkelt linje. Det bliver printet til sidst. def plush(): x=x0+h fevalplus=eval(f) return fevalplus def minush(): x=x0-h fevalminus=eval(f) return fevalminus fdif=(plush()-minush())/(2*h) print "numerisk:",fdif Til sidst har vi den analytiske metode, altså den eksakte differentiation som er en funktion vi henter fra Sympy modulet. Derudover har vi importeret funktionen der gør at programmet i denne sidste del ser som og ikke som bogstavet x som også er beskrevet i afsnittet omkring Sympy modulet. from sympy.abc import x, y d=diff (f, x) print "eksakt:",d.subs(x,x0).n() 8

Integration I denne del havde vi modsat differentiations delen, ikke nogle problemer under udviklingen. Læse lidt om Sympy og så skrive programmet. Til at starte med har vi igen input, interval og delinterval. Så implementerer vi formlerne for numerisk integration. f=raw_input("f(x)") istart=input("interval start:") islut=input("interval slut") n=input("antal delintervaller:") i=abs(islut-istart) Vi definerer som er længden af delintervallet og som er afstanden fra til. h=i/n m=(istart+(h/2)) Vi laver en liste hvor vi indsætter en -værdi for alle midtpunkterne. Den næste liste indeholder funktionen af for hvert midtpunkt. Herefter printer vi resultatet. liste=[] while m<islut: liste.append(m) m=m+h g=0 Mliste=[] while n>g: x=liste[g] g=g+1 M=eval(f)*h Mliste.append(M) print "numerisk:", sum(mliste) Igen har vi den analytiske metode som er løsningen til vores program som er hentet fra Sympy modulet. e = Integral(f, (x, istart, islut)) print "eksakt:", e.n() Rodbestemmelse Input igen,, og. f=raw_input("f(x)") x0=input("gæt") vi=input("maksimum antal iterationer") så laver vi en while løkke der gentages indtil implementeret.. I løkken er formlen for rodbestemmelse while vi>i: def F(): from sympy.abc import x, y d=diff (f, x) 9

D=d.subs(x,(xliste[i-1])) return D x=x0 i=i+1 x=x-(eval(f))/(f()) xliste.append(x) print i print x.n() Lineær regression Vi laver derefter vores funktion der kan udregne en tendenslinje i forhold til nogle punkter. For at gøre det let, laver vi vores X og Y, så vi kan angive flere punkter på én gang, vha.. Vi sikrer os også at den fortæller os hvis der ikke er lige mange punkter defineret. def linreg(x, Y): if len(x)!= len(y): raise ValueError, 'unequal length' N = len(x) Da det vil blive en gentagelse, så definere vi de variabler vi skal bruge. Ellers får vi en fejl. Så de er altså 0. Vi bruger for til at gentage nogle beregninger vi skal bruge lige om lidt, derefter står der in som vi bruger til at fortælle hvad den skal bruge for hver gang den gentager sig. Der trækker vi X og Y ind vha. map. Så kører vi nogle regnesekvenser vi skal bruge senere, hvilket giver os nogle variabler. Sx = Sy = Sxx = Syy = Sxy = 0.0 for x, y in map(none, X, Y): Sx = Sx + x Sy = Sy + y Sxx = Sxx + x*x Syy = Syy + y*y Sxy = Sxy + x*y Vi definere nu hvordan determinanten skal regnes. Den skal vi bruge til at regne a og b. Så bruger vi de samme linjer med for og in. Det bruger vi denne gang til at bestemme et punkt. det = Sxx * N - Sx * Sx a, b = (Sxy * N - Sy * Sx)/det, (Sxx * Sy - Sx * Sxy)/det meanerror = residual = 0.0 for x, y in map(none, X, Y): meanerror = meanerror + (y - Sy/N)**2 residual = residual + (y - a * x - b)**2 RR = 1 - residual/meanerror ss = residual / (N-2) Var_a, Var_b = ss * N / det, ss * Sxx / det (RR) for hver gang vi regner Vi bruger return for at udskrive vores resultat. Det kommer du i formatet (a, b, RR). Derudover afsluttes vores funktion. return a, b, RR Til sidst definerer vi punktmængden vi laver vores tendenslinje ud fra, hvorefter den printer hele vores funktion, linereg, hvor den regner med de punkter vi har defineret i linjerne før. 10

X=[1,2,2,3,3,4] Y=[2,1,3,2,4,3] print linreg(x,y) Under udviklingen af programmet har haft fordelene af ekstreme programming, da vi har været 3 i gruppen. Test Testspecifikation Programmet laver de forskellige tegninger, når den får input fra brugeren. Samt angiver de forskellige begreber tilhørende de forskellige matematiske ligninger. Korrekte outputs. Testpersoner vil bestå af klasse-/skolekammerater og familiemedlemmer. Testpersonerne vil blive bedt om at bedømme vores program på en skala far 1-10 hvor 10 er det bedste, samt en kommentar til forbedringsforslag. Testresultater Tester (person) Karakter Kommentar 1 (Klassekammerat) 3. år HTX 7 Savner et andet sprogbrug, men ellers var det godt. Havde en god overskuelighed. 2 (Familie) 1. år STX 10 Det er nemt at overskue, og der er ikke noget man kan misforstå eller blive forvirret af. Det er enkelt og meget let at bruge. 3 (Familie) 1. år STX 10 Det er dejligt simpelt og nemt at gå til. 4 (Familie) Uddannet revisor 3 Det er svært at bruge og forstår ikke hvordan og hvad det kan bruges til. Vi kan altså se at der stilles lidt højere krav i 3.g end i 1.g. Det må hænge sammen med den aktuelle viden inden for matematik. Men samtidig kan det også ses at de ældre generationer skal have lidt mere forklaring inden for brugen af programmet. Unge, som er inden for vores målgruppe, har altså lettere ved at bruge det. Konklusion Under udviklingen af dette program har vi fået en større forståelse af hvordan man sætter sig ind i nye moduler, som vi anser for en meget vigtig egenskab. Vi har formået at lave et program der kan regne alle de ting vi beskrev i kravspecifikationen. Derudover er det lykkes os at lave et fint design til vores program, som dog ikke er implementeret. 11