Innholdsfortegnelse:

Hvordan lage et numerisk integreringsprogram i Python: 10 trinn
Hvordan lage et numerisk integreringsprogram i Python: 10 trinn

Video: Hvordan lage et numerisk integreringsprogram i Python: 10 trinn

Video: Hvordan lage et numerisk integreringsprogram i Python: 10 trinn
Video: Statistics with Python! Monte Carlo Integration 2024, Juli
Anonim
Hvordan lage et numerisk integreringsprogram i Python
Hvordan lage et numerisk integreringsprogram i Python

Dette er en opplæring i hvordan du oppretter og kjører et program som vil evaluere bestemte integraler ved hjelp av en numerisk integreringsalgoritme. Jeg har delt trinnene inn i 3 seksjoner: forstå algoritmen som skal brukes til å lage programmet, koding av programmet ved hjelp av programmeringsspråket Python og kjøring av programmet. Denne opplæringen er beregnet på noen som kanskje trenger å lage en kalkulator for å evaluere bestemte integraler, eller kanskje trenger algoritmen for bruk i et større program. Grunnleggende beregningskunnskap forventes, men relevant matematisk informasjon blir gjennomgått. Kunnskap om programmering er ikke forventet, men er nyttig siden jeg bare kort beskriver hvordan programmeringen faktisk fungerer.

Dette trenger du:

En personlig datamaskin med tilgang til internett

Trinn 1: Forstå algoritmen Del 1: Definite Integral og dens bruk

Forstå algoritmen Del 1: Definite Integral og dens bruk
Forstå algoritmen Del 1: Definite Integral og dens bruk

Jeg antar at du vet litt om hva et integral er i konteksten av grunnleggende beregning. Integraler er viktige fordi de lar deg summere en rekke verdier multiplisert med en uendelig liten lengde; dette er nyttig på mange områder av finans, tallteori, fysikk, kjemi, så vel som mange andre felt. Dette programmet lar deg imidlertid bare beregne arealet under en kurve i et begrenset intervall, eller med andre ord, det evaluerer ikke antidderivater-en mye kraftigere algoritme er nødvendig for det. Denne algoritmen er nyttig hvis du trenger å evaluere en bestemt integral i et større program spesifisert mot noe annet, eller hvis du vil sjekke svaret ditt for bestemte integraler som er gjort for hånd.

En grunnleggende bestemt integral representerer området under en kurve definert av en funksjon f.eks. f (x). For en bestemt integral søker vi området mellom to punkter (merket henholdsvis a og b). På bildet er den turkise regionen området jeg refererer til, og ligningen for å bestemme dette er også vist i den regionen. Funksjonen som vises på bildet er vilkårlig.

Trinn 2: Forstå algoritmen Del 2: Numerisk tilnærming

Forstå algoritmen Del 2: Numerisk tilnærming
Forstå algoritmen Del 2: Numerisk tilnærming

En datamaskin trenger et bredt sett med instruksjoner for å beregne området under en vilkårlig funksjon som vil fungere for en hvilken som helst funksjon, så analytiske metoder du kanskje er kjent med, er ikke til nytte siden de er for spesielle. En metode for å beregne ca. De stive egenskapene til rektangler vil la noe av det totale arealet være uberørt, og derfor blir dette betraktet som en tilnærming; Men jo flere rektangler du kan krype mellom grensene (a og b), desto mer nøyaktig blir tilnærmingen siden de urørte områdene blir mer sparsomme. Siden en datamaskin skal utføre oppgaven, kan du angi antall rektangler i ønsket region til å være et veldig stort tall, noe som gjør tilnærmingen ekstremt nøyaktig. I støttende bilde, tenk deg at hvert rektangel i det angitte området er like bredt. Jeg gjorde mitt beste for å få dem til samme bredde i Microsoft Paint, men gjorde ikke den beste jobben.

Trinn 3: Forstå algoritmen Del 3: midtpunktsregelen

Forstå algoritmen Del 3: midtpunktsregelen
Forstå algoritmen Del 3: midtpunktsregelen

Denne regelen angir hvordan rektanglene er laget og brukt i tilnærmingen. Hvert rektangel ut av "N" rektangler må ha samme bredde, Δx, men hvert niende rektangel kan ikke være nøyaktig det samme: Den varierende faktoren er høyden som varierer etter hvert som funksjonen evalueres på et bestemt tidspunkt. Midtpunktsregelen får navnet sitt fra det faktum at du vurderer høyden på hvert rektangel som f (x_n), hvor "x_n" er det respektive midtpunktet i hvert rektangel, slik det er plassert til venstre eller høyre for rektangelet. Å bruke midtpunktet er som å implementere et gjennomsnitt som vil gjøre tilnærmingen mer nøyaktig enn om du skulle bruke høyre eller venstre. Støttebildet for dette trinnet oppsummerer hvordan midtpunktsregelen er definert matematisk.

Trinn 4: Opprette programmet Del 1: Last ned en Python -kompilator/redaktør

Nå som du forstår algoritmen som må implementeres, er det et spørsmål om å få en datamaskin til å utføre beregningen for deg. Det første trinnet for å fortelle en datamaskin hva de skal gjøre, er å få verktøyene til å gjøre det. Denne algoritmen kan kodes på alle språk; For enkelhets skyld vil dette programmet bli kodet på Python -språket. For å beordre datamaskinen din til å utføre operasjoner med Python, trenger du en redaktør som tar instruksjoner skrevet på det språket som deretter vil bli samlet til maskinspråk som datamaskinen din kan forstå, slik at den kan utføre oppgavene du ber den gjøre. I disse dager er en redaktør og kompilator vanligvis integrert, men det er ikke alltid tilfelle. Du kan bruke hvilken som helst editor/kompilator du er komfortabel med, men jeg skal vise deg hvordan du får min personlige favoritt for Python: Canopy. Hvis du allerede har en redaktør/kompilator, kan du hoppe over disse trinnene.

  1. Gå til
  2. Klikk på Last ned Canopy
  3. Klikk på nedlastingsknappen som tilsvarer operativsystemet

    Nedlastingen starter automatisk

  4. Følg instillasjonsinstruksjonene etter at du har startet kjøringsfilen
  5. Kjør programmet
  6. Klikk "Editor" fra programmets hovedmeny
  7. Klikk på "opprett en ny fil" i midten av skjermen

Fra dette punktet bør du se et tomt hvitt vindu med en markør som ligner et grunnleggende tekstbehandlingsdokument. Du er nå klar til å begynne å kode den numeriske integreringsalgoritmen for å løse bestemte integraler. De påfølgende trinnene vil ha en kodebit som du vil kopiere og en forklaring på hva denne kodebiten gjør for programmet som helhet.

Trinn 5: Opprette programmet Del 2: Importere funksjoner og definere variabler

Opprette programmet Del 2: Importere funksjoner og definere variabler
Opprette programmet Del 2: Importere funksjoner og definere variabler

Kopier koden på bildet.

For ethvert program du måtte finne på å kode, vil det være variabler. En variabel er et navn gitt til en verdi som skal opereres og som kan endres. På de fleste programmeringsspråk (hvis ikke alle) må du initialisere en variabel før programmet kan gjøre endringer i den. Når det gjelder dette programmet har jeg kalt variablene "N", "a" og "b". Disse verdiene representerer henholdsvis antall iterasjoner (AKA antall rektangler), nedre grense og øvre grense. Du kan navngi disse hva du vil, men for å matche formlene gitt i "Forstå algoritmen del 3: midtpunktsregelen", er det best å beholde dem. Legg merke til at de ikke bare er satt til en bestemt verdi. Dette er fordi de er gjort input som, når programmet kjøres, kan brukeren av programmet definere hva verdien vil være. Teksten i anførselstegn, etter input -kommandoen, vises når du kjører programmet og forteller deg hvilken type verdi du skal skrive inn. Du vil også legge merke til at "int" og "float" brukes før inndatabetegnelsene. Disse begrepene forteller datamaskinen hvilken type variabel denne verdien vil være. Et "int" er et heltall, og en "float" er en flytende verdi (dvs. en desimal). Det bør være klart hvorfor disse er utpekt som sådan.

Enhver tekst som er tilstede etter et "#" er en kommentar som lar programmereren følge koden på en humanistisk måte; Jeg har gitt visse kommentarer i koden min som du vil kopiere, men legg gjerne til kommentarer som hjelper deg spesielt. Programmet vil ikke lese noe med et "#" før det som en kommando.

Den delen av koden som leser "fra matematisk import *" forteller programmet å importere en rekke matematiske funksjoner som kan brukes uten å måtte programmere dem i deg selv. "*" Betyr bare "alt". Les denne delen av koden som: fra mattebiblioteket importerer du alle funksjonene. Dette lar deg bruke matematiske funksjoner som sinus, cosinus, log, exp, etc. Disse funksjonene kan matematisk integreres i koden.

Trinn 6: Opprette programmet Del 3: Opprette en funksjon for integrasjon

Opprette programmet Del 3: Opprette en funksjon for integrasjon
Opprette programmet Del 3: Opprette en funksjon for integrasjon

Kopier koden på bildet under den forrige koden.

ADVARSEL: Denne delen er tett, og jeg vil klargjøre noen ting som potensielt kan være forvirrende. Når du snakker om programmering, dukker ordet "funksjon" mye opp. Dette begrepet dukker også opp mye når du snakker om matte. Så, fra dette tidspunktet, når jeg snakker om en funksjon i programmeringsforstand, vil jeg skrive "Python -funksjon", og når jeg snakker om den matematiske funksjonen, vil jeg si "matematisk funksjon". På et tidspunkt vil vi bruke en Python -funksjon som representasjon for den aktuelle matematiske funksjonen.

Denne neste kodebiten er hjertet i programmet. Her er en Python -funksjon definert som utfører algoritmen for numerisk integrasjon ved hjelp av midtpunktsregelen. "def Integrate (N, a, b)" leser som: definere en funksjon kalt "Integrer" som godtar variablene "N", "a" og "b" og returnerer området under kurven (den matematiske funksjonen) som også er definert i "Integrer" Python -funksjonen. Du kan kalle denne Python -funksjonen hva som helst når du gjør kodingen, men det er fornuftig å kalle den integrert siden det er en funksjon som faktisk integrerer en matematisk funksjon.

På dette tidspunktet er det verdt å kommentere hvordan Python segregerer kodeblokker. En blokkblokk er en hel seksjon som utfører en bestemt oppgave. Ulike programmeringsspråk vil ha bestemte måter å skille mellom disse "blokkene". For Python kjennetegnes en blokk med innrykk: hver oppgaveutførende seksjon har sin egen innrykk, og det kan være innrykkede blokker i andre innrykkede blokker. Dette representerer oppgaver innenfor oppgaver, og forteller i hovedsak i hvilken rekkefølge koden må utføres. Når det gjelder den definerte Python -funksjonen "Integrer", er alt innenfor den funksjonen innrykket i en blokk og skiller dermed oppgavene som skal utføres i den funksjonen. Det er innrykkede deler i denne Python -funksjonen som også utfører sine egne oppgaver. Det går som følger: en kommando (oppgave) er angitt, et kolon følger kommandoen, og det kommandoen gjør er innrykket under.

Umiddelbart etter at du har definert "integrer" Python -funksjonen, vil du definere en annen Python -funksjon kalt f (x). Dette representerer den matematiske funksjonen som vil bli integrert. For hver forskjellige matematiske funksjon du vil integrere, må du gå til denne programlinjen for å endre den (i motsetning til variablene som er definert når programmet kjøres). Hver Python -funksjon vil ha en returverdi, dette er hva funksjonen returnerer når du kaster den en verdi. I dette tilfellet er den kastede verdien "x", og denne "x" -begrepet vil ta verdien av det du kaster den-det er en midlertidig verdi.

Deretter fungerer en forløkke som summeringen definert i formlene i delen "Forstå algoritmen" i denne opplæringen. Denne summeringen krever et par flere variabler, hvorav den ene vil fungere som returverdi for hele "Integrer" Python -funksjonen. Før forløkken har jeg angitt disse variablene som "verdi" og "verdi2". oppgaven til forløkken er å iterere over en rekke verdier for en angitt variabel, som enkelt kan defineres innenfor for-loop-kommandoen; i dette tilfellet er variabelen "n". Området som iterasjonen skjer for er 1 til N+1. Du bør legge merke til at summeringen definert i de ovennevnte formlene bare varierer fra 1 til N. Vi definerer det på denne måten fordi Python -språket teller hver iterert verdi som starter fra null, så vi må i hovedsak forskyve verdiene for å passe til ønsket område. Forløkken tillater deretter summering av alle rektangelets høyder sammen og lagrer denne verdien i variabelen som jeg kalte "verdi". Dette sees i koden som vises som: verdi += f (a +((n- (1/2))*((b-a)/N))).

Derfra bruker det neste stykket i koden variabelen kalt "verdi2", som deretter blir tildelt summen av alle høyder i hvert rektangel multiplisert med den standardiserte bredden på hvert rektangel-dette er vårt endelige svar som vi vil ha vises av programmet vårt, og er dermed returverdien for "Integrer" Python -funksjonen.

Trinn 7: Opprette programmet Del 4: Vise svaret

Opprette programmet Del 4: Vise svaret
Opprette programmet Del 4: Vise svaret

Kopier koden på bildet under den forrige koden.

Nå som svaret kan oppnås gjennom "Integrer" Python -funksjonen, ønsker vi å kunne vise det. Dette er bare et spørsmål om å sette verdiene som ble lagt inn av brukeren ("N", "a" og "b") i "Integrer" Python -funksjonen og skrive den ut på skjermen. Denne kommandoen vises på linje 21, og er egentlig alt du trenger å gjøre for å fullføre dette trinnet. Koden på linje 19 og 20 er bare der for å "finjustere" utgangen fra hele programmet. "print (" ………………………. ")" skiller inngangsseksjonen til programmet fra output -delen, og "print (" Her er svaret ditt: ")" er bare en betegnelse som svaret skrives ut etter den tekstlinjen.

Trinn 8: Kjøre programmet Del 1: Kjøre programmet som det er

Kjøre programmet Del 1: Kjøre programmet som det er
Kjøre programmet Del 1: Kjøre programmet som det er

Hvis du ikke bruker Canopy, trenger du sannsynligvis ikke engang å følge dette trinnet i det hele tatt, og det kan kreve forskjellige prosedyrer å kjøre programmet. I Canopy, før du kan kjøre programmet, må du lagre det. Filtypen for et Python-program er en.py-fil-den lagres automatisk som dette. Velg hvor du vil at filen skal lagres, så vil du kunne kjøre programmet.

Kjører programmet:

  1. Trykk på den grønne knappen som ser ut som en "spillknapp" på verktøylinjen like over der filnavnet ditt vises (se bildet).
  2. Programmet vil deretter kjøre i den nederste skjermen til redaktøren som er kjent som Canopy data-analyse miljø. Forutsatt at du kopierte meldingene slik jeg skrev dem, bør du se bunnen av Canopy-dataanalysemiljøet ledeteksten: "Skriv inn hvor mange ganger du vil summere (flere ganger = mer nøyaktig):." (se bildet)
  3. Skriv inn en verdi for hvor mange ganger du vil gjøre iterasjonen, dvs. 10000 (hvor mange rektangler du vil skyve inn i området ditt), og trykk deretter enter.
  4. Flere meldinger vises med uttalelser som burde være de kjente inndatapromptene du kodet inn i programmet i trinn 5. Fyll dem ut på riktig måte, akkurat som i nummer 3 ovenfor.
  5. Integralet bør evalueres, og et resultat skal vises.

Hvis du har kodet programmet som vist på de foregående bildene, har du nettopp integrert f (x) = x^2 over noen grenser. Integrasjonen av x^2 er lett å evaluere for hånd, derfor bør du sjekke og sørge for at programmet ga et veldig nært svar på den korrekte analytiske verdien som er bestemt for hånd. Når jeg kjører programmet med verdiene N = 10000, a = 0 og b = 10, får jeg svaret 333.33333249999964. Det riktige analytiske svaret er 333.333. Dette er utrolig nøyaktig og raskt. Du har i hovedsak presset 10 000 rektangler mellom 0 og 10 på x -aksen og brukt dem til å tilnærme området under kurven x^2!

Trinn 9: Kjøre programmet Del 2: Integrering av andre matematiske funksjoner

Kjøre programmet Del 2: Integrering av andre matematiske funksjoner
Kjøre programmet Del 2: Integrering av andre matematiske funksjoner

I forrige trinn, hvis du har fulgt trofast, integrerte du f (x) = x^2. Det er ikke den eneste matematiske funksjonen dette programmet kan integrere. Husk fra trinn 5 at du importerte matematikkbiblioteket med Python -funksjoner til programmet. Dette lar deg bruke mer kompliserte matematiske funksjoner som kan integreres. La oss gi en sjanse. Selvfølgelig kan du bruke hvilken som helst funksjon du vil, men jeg vil ytterligere demonstrere nøyaktigheten av denne koden ved å integrere en bestemt matematisk funksjon som gir en velkjent verdi når den integreres over et bestemt område. Denne funksjonen er f (x) = Sin [x]. Denne matematiske funksjonen vises i det første medfølgende bildet, plottet fra 0 til 2π, og interesseområdet er skyggelagt i turkis. Det er like mye positivt område som det er negativt område i dette intervallet, så hvis du summerer det totale arealet, bør du få null. La oss se om dette faktisk skjer:

Sette den matematiske funksjonen f (x) = Sin [x] inn i programmet:

  1. Før du kjører programmet igjen, under kommentaren "#type funksjonen din etter retur", skriver du: sin (x) der x ** 2 er plassert. (se bildet).
  2. Kjør programmet ved å trykke på den grønne avspillingsknappen igjen.
  3. Skriv 10000 for N -verdien (hvor mange ganger du vil summere).
  4. sett "0" for den nedre grensen.
  5. Sett 6.2832 inn for den øvre grensen (ca. 2π).
  6. Se hvilken verdi du får.

Da jeg gjorde dette, endte jeg opp med å få en verdi på 1.079e-10: dette tilsvarer.0000000001079, som egentlig er nær null, så det ser ut til å være nøyaktig, og viser at algoritmen håndterer negativt område tilstrekkelig.

Trinn 10: Kjøre programmet Del 3: Utvide programmet

På dette tidspunktet er du ferdig: du har en fungerende bestemt integrert algoritme kodet opp i Python som går jevnt og gir veldig nøyaktige svar. Imidlertid kan dette programmet forbedres. Jeg er ikke en programmerer, og jeg har minimal erfaring med Python. Faktisk måtte jeg oppdatere meg på å bruke Python for å fullføre denne opplæringen, men det burde gi deg tillit til at Python er et så enkelt språk å lære. Poenget mitt er at du kan utvide dette programmet ved å gjøre det mer effektivt, kanskje implementere noen GUI, og gjøre det mer brukervennlig.

Mine tanker om å utvide programmet:

  • Implementere et grafisk brukergrensesnitt som lar deg kjøre programmet uten å bruke Canopy interaktive dataanalysemiljø
  • Gjør det slik at den matematiske funksjonen som skal integreres ikke trenger å være innsiden av programmet, men kan legges inn etter at programmet er kjørt (jeg prøvde først å gjøre dette, men klarte ikke å finne det ut).
  • Definer en "Integrer" Python -funksjon, slik at den tar funksjonen f (x) slik at f (x) -funksjonen er definert i den.

Dette er bare noen eksempler på forbedringsområder, men jeg garanterer at det er mange andre områder som kan forbedres. Så jeg lar dette trinnet være et eksempel på feilene i dette programmet og kanskje en øvelse for alle som ønsker å forbedre programmet ytterligere.

Anbefalt: