Sadržaj:

Kako napraviti program numeričke integracije u Pythonu: 10 koraka
Kako napraviti program numeričke integracije u Pythonu: 10 koraka

Video: Kako napraviti program numeričke integracije u Pythonu: 10 koraka

Video: Kako napraviti program numeričke integracije u Pythonu: 10 koraka
Video: Uvod u Python - Predavanje 3 2024, Juli
Anonim
Kako napraviti program numeričke integracije u Pythonu
Kako napraviti program numeričke integracije u Pythonu

Ovo je vodič o tome kako stvoriti i pokrenuti program koji će evaluirati određene integrale pomoću algoritma numeričke integracije. Korake sam podijelio u 3 odjeljka: razumijevanje algoritma koji će se koristiti za izradu programa, kodiranje programa pomoću programskog jezika Python i pokretanje programa. Ovaj vodič je namijenjen nekome kome će možda trebati brzo napraviti kalkulator za procjenu određenih integrala, ili mu je možda potreban algoritam za upotrebu u programu većeg opsega. Očekuje se osnovno znanje računanja, ali se provjeravaju relevantne matematičke informacije. Poznavanje programiranja se ne očekuje, ali je korisno jer samo ukratko opisujem kako programiranje zapravo funkcionira.

Šta će vam trebati:

Lični računar sa pristupom internetu

Korak 1: Razumijevanje algoritma Dio 1: Definitivni integral i njegova upotreba

Razumijevanje algoritma 1. dio: Definitivni integral i njegova upotreba
Razumijevanje algoritma 1. dio: Definitivni integral i njegova upotreba

Pretpostavit ću da znate malo šta je integral u kontekstu osnovnog računa. Integrali su važni jer vam omogućuju da zbrojite niz vrijednosti pomnožen s beskonačno malom dužinom; ovo je korisno u mnogim područjima finansija, teorije brojeva, fizike, hemije, kao i u mnogim drugim poljima. Ovaj će vam program, međutim, omogućiti samo izračunavanje površine ispod krivulje za konačan interval, ili drugim riječima, ne procjenjuje anti-izvedenice-za to je potreban mnogo snažniji algoritam. Ovaj je algoritam koristan ako trebate procijeniti određeni integral u većem programu specificiranom prema nečemu drugom, ili ako želite provjeriti svoj odgovor radi li se o definitivnim integralima koji su rađeni ručno.

Osnovni definitivni integral predstavlja područje ispod krivulje definirano funkcijom, npr. f (x). Za definitivni integral tražimo područje između dvije točke (označene sa a i b respektivno). Na slici je tirkizno područje područje na koje mislim, a jednadžba za određivanje ovoga je također prikazana u tom području. Funkcija prikazana na slici je proizvoljna.

Korak 2: Razumijevanje algoritma Dio 2: Numerička aproksimacija

Razumijevanje algoritma 2. dio: Numerička aproksimacija
Razumijevanje algoritma 2. dio: Numerička aproksimacija

Računaru je potreban širok skup uputa za izračunavanje te površine ispod proizvoljne funkcije koja će raditi za bilo koju funkciju, pa analitičke metode koje možda poznajete nemaju koristi jer su previše specifične. Jedna metoda za približno izračunavanje integrala, s kojom računalo zapravo može rukovati, izvodi se ispunjavanjem područja od interesa korisnički definiranom količinom pravokutnika jednake širine i promjenjive visine, a zatim se zbrajaju sve površine pravokutnika. Kruta svojstva pravokutnika ostavit će dio ukupne površine netaknutim, stoga se to smatra aproksimacijom; međutim, što više pravokutnika možete ugurati između granica (a i b), aproksimacija će biti točnija jer netaknuta područja postaju oskudnija. Budući da će računalo izvoditi zadatak, možete postaviti broj pravokutnika u željenoj regiji na vrlo veliki broj, čineći aproksimaciju iznimno točnom. Na pratećoj slici zamislite da je svaki pravokutnik na označenom području jednake širine. Dao sam sve od sebe da ih učinim jednakim širinama u Microsoft Paint -u, ali nisam obavio najbolji posao.

Korak 3: Razumijevanje algoritma Dio 3: Pravilo sredine

Razumijevanje algoritma 3. dio: pravilo srednje tačke
Razumijevanje algoritma 3. dio: pravilo srednje tačke

Ovo pravilo označava način pravljenja pravokutnika i njihovu primjenu u aproksimaciji. Svaki pravokutnik od "N" pravokutnika mora imati jednaku širinu, Δx, ali svaki n -ti pravokutnik ne može biti potpuno isti: promjenjivi faktor je visina koja varira kako se funkcija procjenjuje u određenoj točki. Pravilo srednje tačke dobilo je ime po tome što visinu svakog pravokutnika procjenjujete kao f (x_n), gdje je "x_n" odgovarajuća središnja točka svakog pravokutnika, postavljena lijevo ili desno od pravokutnika. Korištenje srednje točke je poput implementacije prosjeka koji će aproksimaciju učiniti preciznijom nego da koristite desnu ili lijevu stranu. Pomoćna slika za ovaj korak sažima kako je pravilo srednje tačke matematički definirano.

Korak 4: Kreiranje programa 1. dio: Preuzimanje Python kompajlera/uređivača

Sada kada razumijete algoritam koji je potrebno implementirati, pitanje je da nabavite računar koji će umjesto vas izvršiti proračun. Prvi korak da kažete računaru šta da radi je da nabavite alate za to. Ovaj algoritam može biti kodiran na bilo kojem jeziku; radi jednostavnosti, ovaj program će biti kodiran u jeziku Python. Da biste naredili svom računaru da izvršava operacije s Pythonom, trebat će vam uređivač koji uzima upute napisane na tom jeziku koje će se zatim kompajlirati na strojni jezik koji vaš računar može razumjeti kako bi mogao izvršavati zadatke koje mu naložite. U današnje vrijeme uređivač i kompajler obično su integrirani, međutim to nije uvijek slučaj. Možete koristiti bilo koji uređivač/kompajler koji vam odgovara, ali pokazat ću vam kako nabaviti moj lični favorit za Python: Canopy. Ako već imate uređivač/kompajler, možete preskočiti ove korake.

  1. Idite na
  2. Kliknite Download Canopy
  3. Kliknite na dugme za preuzimanje koje odgovara vašem operativnom sistemu

    Preuzimanje će početi automatski

  4. Slijedite upute za ukapavanje nakon pokretanja datoteke izvršenja
  5. Pokrenite program
  6. Na glavnom izborniku programa kliknite "Uređivač"
  7. Kliknite "kreiraj novu datoteku" na sredini ekrana

Od ove točke trebali biste vidjeti prazan bijeli prozor s kursorom koji podsjeća na osnovni dokument za obradu teksta. Sada ste spremni za početak kodiranja algoritma numeričke integracije za rješavanje određenih integrala. Koraci u nastavku će imati isječak koda koji ćete kopirati i objašnjenje šta taj isječak čini za program u cjelini.

Korak 5: Kreiranje programa Dio 2: Uvoz funkcija i definiranje varijabli

Kreiranje programa 2. dio: Uvoz funkcija i definiranje varijabli
Kreiranje programa 2. dio: Uvoz funkcija i definiranje varijabli

Kopirajte kôd sa slike.

Za svaki program za koji znate da kodira postojat će varijable. Varijabla je naziv koji se daje vrijednosti na kojoj će se raditi i koja se može promijeniti. U većini programskih jezika (ako ne u svim) morate inicijalizirati varijablu prije nego što program može u nju unijeti promjene. U slučaju ovog programa, nazvao sam varijable "N", "a," i "b." Ove vrijednosti predstavljaju broj iteracija (AKA broj pravokutnika), donju i gornju granicu. Možete ih nazvati kako god želite, ali kako bi se podudarale formule date u "Razumijevanje algoritma, dio 3: Pravilo sredine", najbolje je da ostanu iste. Primijetite da nisu samo postavljene na određenu vrijednost. To je zato što se unose da, kada se program pokrene, korisnik programa može definirati koja će vrijednost biti. Tekst pod navodnicima, nakon naredbe za unos, prikazuje se kada pokrenete program i govori vam koju vrstu vrijednosti treba unijeti. Također ćete primijetiti da se "int" i "float" koriste prije oznaka unosa. Ovi izrazi govore računaru koji tip promenljive će biti ova vrednost. "Int" je cijeli broj, a "float" je vrijednost s pomičnim zarezom (tj. Decimalni broj). Mora biti jasno zašto su oni označeni kao takvi.

Svaki tekst prisutan nakon "#" je komentar koji omogućava programeru da slijedi kôd na humanistički način; Napisao sam određene komentare u svom kodu koje ćete kopirati, ali slobodno dodajte komentare koji vam konkretno pomažu. Program neće pročitati ništa sa "#" prije nego kao naredbu.

Deo koda koji glasi "from math import *" govori programu da uveze niz matematičkih funkcija koje se mogu koristiti bez potrebe da ih sami programirate. "*" Samo znači "sve". Pročitajte ovaj dio koda kao: iz matematičke biblioteke uvezite sve funkcije. Ovo vam omogućava da koristite matematičke funkcije poput sinusa, kosinusa, dnevnika, izraza itd. Ove se funkcije mogu matematički integrirati u kod.

Korak 6: Kreiranje programa Dio 3: Kreiranje funkcije za integraciju

Kreiranje programa 3. dio: Kreiranje funkcije za integraciju
Kreiranje programa 3. dio: Kreiranje funkcije za integraciju

Kopirajte kôd sa slike ispod prethodnog koda.

UPOZORENJE: Ovaj odjeljak je gust i želim razjasniti neke stvari koje bi mogle biti zbunjujuće. Kada govorimo o programiranju, riječ "funkcija" često se pojavljuje. Ovaj pojam se često pojavljuje i kada govorite o matematici. Dakle, od sada pa nadalje, kada govorim o funkciji u programskom smislu, pisaću "Python funkcija", a kada govorim o matematičkoj funkciji, reći ću "matematička funkcija". U nekom trenutku ćemo koristiti Python funkciju kao reprezentaciju dotične matematičke funkcije.

Ovaj sljedeći isječak koda srce je programa. Ovdje je definirana Python funkcija koja izvodi algoritam numeričke integracije koristeći pravilo sredine. "def Integrate (N, a, b)" glasi: definirajte funkciju pod nazivom "Integrate" koja prihvaća varijable "N", "a," i "b" i vraća područje ispod krivulje (matematička funkcija) koja je takođe definisana u okviru funkcije "Integrate" Python. Ovu funkciju Python možete nazvati bilo čim dok kodirate, ali ima smisla nazvati je integracijom jer je to funkcija koja zaista integrira matematičku funkciju.

U ovom trenutku vrijedi komentirati kako Python odvaja blokove koda. Blok koda je cijeli odjeljak koji obavlja određeni zadatak. Različiti programski jezici će imati određene načine razlikovanja ovih "blokova". Za Python, blok se razlikuje po uvlakama: svaki odjeljak koji izvršava zadatak ima svoju uvlaku, a unutar drugih uvučenih blokova mogu postojati uvučeni blokovi. Ovo predstavlja zadatke unutar zadataka i u osnovi govori redoslijed kojim se kôd mora izvršiti. U slučaju definirane Python funkcije "Integrate", sve unutar te funkcije je uvučeno u jedan blok, čime se razlikuju zadaci koji će se izvršavati unutar te funkcije. U ovoj Python funkciji postoje uvučeni dijelovi koji izvršavaju i vlastite zadatke. To ide ovako: postavljena je naredba (zadatak), dvotočka slijedi naredbu, a ono što naredba radi je uvučeno ispod.

Odmah nakon definiranja "integrirajuće" Python funkcije, definirat ćete drugu Python funkciju koja se zove f (x). Ovo predstavlja matematičku funkciju koja će biti integrirana. Za svaku drugu matematičku funkciju koju želite integrirati, morat ćete otići u ovu programsku liniju da biste je promijenili (za razliku od varijabli koje su definirane pri pokretanju programa). Svaka Python funkcija će imati povratnu vrijednost, to je ono što funkcija vraća kada joj dodate vrijednost. U ovom slučaju ubačena vrijednost je "x", a ovaj "x" izraz će uzeti vrijednost bilo čega što ste bacili-to je privremena vrijednost.

Zatim, for-petlja djeluje kao zbir definiran u formulama u odjeljku "Razumijevanje algoritma" ovog vodiča. Ovo zbrajanje zahtijeva još nekoliko varijabli, od kojih će jedna djelovati kao povratna vrijednost za cijelu funkciju "Integriraj" Python. Prije for-petlje, ove sam varijable označio kao "vrijednost" i "vrijednost2". zadatak for-petlje je ponavljanje raspona vrijednosti za označenu varijablu, koja se prikladno može definirati unutar naredbe for-loop; u ovom slučaju, ta varijabla je "n." Raspon za koji se ponavlja iteracija je 1 do N+1. Trebali biste primijetiti da se zbrajanje definirano u gore navedenim formulama kreće samo od 1 do N. Mi ga definiramo na ovaj način jer jezik Python broji svaku ponovljenu vrijednost počevši od nule, tako da u osnovi moramo pomaknuti raspon vrijednosti tako da odgovara našim željenim raspon. For-loop tada dopušta sumiranje svih visina pravokutnika zajedno i pohranjuje tu vrijednost u varijablu koju sam nazvao "value". To se vidi u komadu koda koji se prikazuje kao: vrijednost += f (a +((n- (1/2))*((b-a)/N))).

Odatle, sljedeći dio koda koristi varijablu zvanu "value2" koja se zatim dodjeljuje kao zbir svih visina svakog pravokutnika pomnožene sa standardiziranom širinom svakog pravokutnika-ovo je naš konačni odgovor koji želimo prikazuje naš program i stoga je povratna vrijednost funkcije "Integrate" Python.

Korak 7: Kreiranje programa Dio 4: Prikaz odgovora

Kreiranje programa Dio 4: Prikaz odgovora
Kreiranje programa Dio 4: Prikaz odgovora

Kopirajte kôd sa slike ispod prethodnog koda.

Sada kada se odgovor može dobiti pomoću funkcije "Integriraj" Python, želimo ga moći prikazati. Ovdje se radi samo o stavljanju vrijednosti koje je korisnik unio ("N", "a," i "b") u "Integriraj" Python funkciju i ispisivanju na ekranu. Ova naredba je prikazana u retku 21 i zaista je sve što trebate učiniti da biste dovršili ovaj korak. Kôd u redovima 19 i 20 je upravo tu da "popravi" izlaz cijelog programa. "print (" …………… biti odštampan nakon tog reda teksta.

Korak 8: Pokretanje programa Dio 1: Pokretanje programa kakav jeste

Pokretanje programa 1. dio: Pokretanje programa kakav jeste
Pokretanje programa 1. dio: Pokretanje programa kakav jeste

Ako ne koristite Canopy, vjerojatno uopće ne morate uopće slijediti ovaj korak, a pokretanje programa može zahtijevati različite procedure. U programu Canopy, prije nego što možete pokrenuti program, morat ćete ga spremiti. Tip datoteke za Python program je.py datoteka-ona se automatski sprema kao ova. Odaberite mjesto na koje želite spremiti datoteku, tada ćete moći pokrenuti program.

Pokretanje programa:

  1. Pritisnite zeleno dugme koje izgleda kao "dugme za reprodukciju" koje se nalazi na alatnoj traci odmah iznad mjesta na kojem se prikazuje naziv vaše datoteke (pogledajte sliku).
  2. Program će se zatim pokrenuti na donjem ekranu uređivača koji je poznat kao okruženje za analizu podataka Canopy. Pod pretpostavkom da ste kopirali upite kako sam ih napisao, na dnu okruženja za analizu podataka Canopy trebali biste vidjeti upit: "Unesite koliko puta želite zbrojiti (više puta = preciznije):". (pogledajte sliku)
  3. Unesite vrijednost koliko puta želite ponoviti iteraciju, tj. 10000 (koliko pravokutnika želite ugurati u svoje područje), a zatim pritisnite enter.
  4. Pojavit će se još upita s izjavama koje bi trebale biti poznati unosni upiti koje ste kodirali u programu u koraku 5. Ispunite ih na odgovarajući način, kao u gornjem broju 3.
  5. Integral treba ocijeniti i pojaviti rezultat.

Ako ste kodirali program kao što je prikazano na prethodnim slikama, upravo ste integrirali f (x) = x^2 preko nekih granica. Integral x^2 je lako ručno procijeniti, stoga biste trebali provjeriti i uvjeriti se da je program dao vrlo blizak odgovor na ispravnu analitičku vrijednost određenu rukom. Kada pokrenem program sa vrijednostima N = 10000, a = 0 i b = 10, dobivam odgovor 333.33333249999964. Tačan analitički odgovor je 333.333. Ovo je nevjerojatno precizno i brzo. U osnovi ste stisnuli 10 000 pravokutnika između 0 i 10 na osi x i upotrijebili ih za približavanje površine ispod krivulje x^2!

Korak 9: Pokretanje programa Dio 2: Integriranje drugih matematičkih funkcija

Pokretanje programa 2. dio: Integriranje drugih matematičkih funkcija
Pokretanje programa 2. dio: Integriranje drugih matematičkih funkcija

U prethodnom koraku, ako ste dosljedno slijedili, integrirali ste f (x) = x^2. To nije jedina matematička funkcija koju ovaj program može integrirati. Podsjetimo se da ste iz koraka 5 uvezli niz matematičkih biblioteka Python funkcija u program. To vam omogućuje korištenje složenijih matematičkih funkcija koje se mogu integrirati. Hajde da pokušamo. Naravno, možete koristiti bilo koju funkciju koju želite, ali dalje ću pokazati točnost ovog koda integriranjem određene matematičke funkcije koja daje dobro poznatu vrijednost kada se integrira u određenom rasponu. Ta funkcija je f (x) = Sin [x]. Ova matematička funkcija prikazana je na prvoj popratnoj slici, iscrtana od 0 do 2π, a područje interesa je zasjenjeno tirkizno. Postoji jednaka količina pozitivne površine kao i negativne u ovom intervalu, pa ako zbrojite ukupnu površinu, trebali biste dobiti nulu. Da vidimo da li se to zaista dogodilo:

Stavljanje matematičke funkcije f (x) = Sin [x] u program:

  1. Prije ponovnog pokretanja programa, pod komentarom "#type your function after return" upišite: sin (x) gdje se x ** 2 trenutno nalazi. (pogledajte sliku).
  2. Pokrenite program ponovnim pritiskom na zeleno dugme za reprodukciju.
  3. Upišite 10000 za vrijednost N (koliko puta želite zbrojiti).
  4. stavite "0" za donju granicu.
  5. Stavite 6,2832 za gornju granicu (približno 2π).
  6. Pogledajte koju vrijednost dobijate.

Kad sam to učinio, na kraju sam dobio vrijednost 1.079e-10: ovo je jednako 0,0000000001079, što je zaista blizu nule, pa se čini da je točno i pokazuje da algoritam na odgovarajući način obrađuje negativno područje.

Korak 10: Pokretanje programa Dio 3: Proširenje programa

Na ovom mjestu ste gotovi: imate radni definitivni integralni algoritam kodiran u Pythonu koji radi glatko i daje vrlo precizne odgovore. Međutim, ovaj program se može poboljšati. Nisam programer i imam minimalno iskustvo s Pythonom. U stvari, morao sam se osvježiti korištenjem Pythona da završim ovaj vodič, ali to bi vam trebalo dati samopouzdanje da je Python tako jednostavan jezik za učenje. Moja poenta je da ovaj program možete proširiti tako da ga učinite efikasnijim, možda implementirate neki GUI i učinite ga prilagođenijim korisniku.

Moje mišljenje o proširenju programa:

  • Implementirajte grafičko korisničko sučelje koje vam omogućuje pokretanje programa bez upotrebe okruženja za interaktivnu analizu podataka Canopy
  • Učinite tako da matematička funkcija koja se integrira ne mora biti unesena unutar programa, već se može unijeti nakon pokretanja programa (u početku sam to pokušavao, ali nisam mogao shvatiti).
  • Definirajte "Integriraj" Python funkciju tako da preuzme funkciju f (x) na način da se u njoj definira funkcija f (x).

Ovo su samo neki primjeri područja poboljšanja, ali jamčim da postoje mnoga druga područja koja se mogu poboljšati. Stoga ostavljam ovaj korak kao primjer nedostataka koje ovaj program ima, a možda i vježbu svima koji žele dodatno poboljšati program.

Preporučuje se: