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, Studeni
Anonim
Kako napraviti program za numeričku integraciju u Pythonu
Kako napraviti program za numeričku integraciju u Pythonu

Ovo je vodič o tome kako stvoriti i pokrenuti program koji će procjenjivati 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 je vodič namijenjen nekome tko će možda morati 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.

Što će vam trebati:

Osobno računalo s pristupom internetu

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

Razumijevanje algoritma 1. dio: Određeni integral i njegova upotreba
Razumijevanje algoritma 1. dio: Određeni integral i njegova upotreba

Pretpostavit ću da znate malo o tome što je integral u kontekstu osnovnog računa. Integrali su važni jer vam omogućuju zbrajanje niza vrijednosti pomnoženih s beskonačno malom duljinom; ovo je korisno u mnogim područjima financija, teorije brojeva, fizike, kemije, kao i u mnogim drugim područjima. 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 izvedeni ručno.

Osnovni definitivni integral predstavlja područje ispod krivulje definirano funkcijom, npr. f (x). Za određeni integral tražimo područje između dvije točke (označene s a i b). Na slici je tirkizno područje područje na koje mislim, a jednadžba za to 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čunalu je potreban širok skup uputa za izračunavanje tog područja 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, koju računalo zapravo može obraditi, postiže se ispunjavanjem područja interesa korisnički definiranom količinom pravokutnika jednake širine i promjenjive visine, a zatim se zbrajaju sva područja 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 izvršavati 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. Učinio sam sve da ih u Microsoft Paintu učinimo jednake širine, ali nisam to najbolje odradio.

Korak 3: Razumijevanje algoritma 3. dio: pravilo srednje točke

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

Ovo pravilo označava način na koji se pravokutnici izrađuju i koriste u aproksimaciji. Svaki pravokutnik od "N" pravokutnika mora imati jednaku širinu, Δx, ali svaki n -ti pravokutnik ne može biti potpuno isti: varirajući faktor je visina koja varira kako se funkcija procjenjuje u određenoj točki. Pravilo srednje točke dobiva naziv po tome što visinu svakog pravokutnika procjenjujete kao f (x_n), gdje je "x_n" odgovarajuća središnja točka svakog pravokutnika, smještena lijevo ili desno od pravokutnika. Korištenje središnje točke je poput implementacije prosjeka koji će približavanje učiniti točnijim nego da koristite desnu ili lijevu stranu. Potporna slika za ovaj korak sažima kako je pravilo srednje točke matematički definirano.

Korak 4: Stvaranje programa 1. dio: Preuzimanje Python prevoditelja/uređivača

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

  1. Idite na
  2. Kliknite Preuzmi baldahin
  3. Pritisnite gumb za preuzimanje koji odgovara vašem operativnom sustavu

    Preuzimanje će početi automatski

  4. Slijedite upute za ukapavanje nakon pokretanja izvršne datoteke
  5. Pokrenite Program
  6. Na glavnom izborniku programa kliknite "Uređivač"
  7. Kliknite "kreiraj novu datoteku" u središtu zaslona

Od ove točke trebali biste vidjeti prazan bijeli prozor s kursorom nalik na osnovni dokument za obradu teksta. Sada ste spremni za početak kodiranja algoritma numeričke integracije za rješavanje određenih integrala. Koraci će imati isječak koda koji ćete kopirati i objašnjenje o tome što 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 se možda zateknete 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 je program može promijeniti. 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 srednje točke", najbolje je da ostanu iste. Primijetite da nisu samo postavljene na određenu vrijednost. To je zato što se radi o ulazima koji, 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čunalu koja će vrsta varijable biti ta vrijednost. "Int" je cijeli broj, a "float" je vrijednost s pomičnim zarezom (tj. Decimalni broj). Mora biti jasno zašto su označeni kao takvi.

Svaki tekst prisutan nakon "#" je komentar koji omogućuje 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 će vam posebno pomoći. Program neće pročitati ništa s "#" prije nego kao naredbu.

Dio koda koji glasi "from math import *" govori programu da uvozi niz matematičkih funkcija koje se mogu koristiti bez da ih morate sami programirati. "*" Samo znači "sve". Ovaj dio koda čitajte kao: iz matematičke knjižnice uvezite sve funkcije. To vam omogućuje korištenje matematičkih funkcija poput sinusa, kosinusa, dnevnika, izraza itd. Ove se funkcije mogu matematički integrirati u kod.

Korak 6: Izrada programa Dio 3: Stvaranje funkcije za integraciju

Izrada programa 3. dio: Stvaranje funkcije za integraciju
Izrada programa 3. dio: Stvaranje 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 također se često pojavljuje kada govorite o matematici. Dakle, od sada pa nadalje, kada govorim o funkciji u programskom smislu, napisat ću "Python funkciju", a kad govorim o matematičkoj funkciji, reći ću "matematička funkcija". U nekom trenutku ćemo koristiti Python funkciju kao prikaz dotične matematičke funkcije.

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

U ovom trenutku vrijedi komentirati kako Python odvaja blokove koda. Blok koda je cijeli odjeljak koji izvršava određeni zadatak. Različiti programski jezici imat će određene načine razlikovanja tih "blokova". Za Python, blok se razlikuje po uvlakama: svaki odjeljak koji izvršava zadatak ima svoju uvlaku, a unutar ostalih uvučenih blokova mogu postojati uvučeni blokovi. Ovo predstavlja zadatke unutar zadataka i u biti govori redoslijed kojim se kôd mora izvesti. U slučaju definirane Python funkcije "Integriraj", sve unutar te funkcije je uvučeno u jedan blok, čime se razlikuju zadaci koji će se izvršavati unutar te funkcije. Unutar ove Python funkcije 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 uvučeno je ispod.

Odmah nakon definiranja funkcije "integriraj" Python, definirat ćete drugu funkciju Pythona zvanu 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 poprimit će vrijednost onoga što ste joj dodali-to je privremena vrijednost.

Zatim, for-petlja djeluje kao zbroj 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 ponoviti niz vrijednosti za označenu varijablu, koja se prikladno može definirati unutar naredbe for-loop; u ovom slučaju ta je varijabla "n". Raspon za koji se ponavlja iteracija je 1 do N+1. Trebali biste primijetiti da zbrajanje definirano u gore spomenutim formulama ima samo raspon od 1 do N. Mi ga definiramo na ovaj način jer jezik Python broji svaku ponovljenu vrijednost počevši od nule, pa u biti moramo pomaknuti raspon vrijednosti tako da odgovara našim željenim domet. For-petlja tada omogućuje zbrajanje svih visina pravokutnika zajedno i pohranjuje tu vrijednost u varijablu koju sam nazvao "vrijednost". 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 zbroj svih visina svakog pravokutnika pomnožene sa standardiziranom širinom svakog pravokutnika-ovo je naš konačni odgovor koji želimo prikazuje naš program, pa je stoga povratna vrijednost funkcije "Integriraj" Python.

Korak 7: Kreiranje programa Dio 4: Prikaz odgovora

Kreiranje programa 4. dio: Prikaz odgovora
Kreiranje programa 4. dio: 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 samo radi o stavljanju vrijednosti koje je korisnik unio ("N", "a," i "b") u funkciju "Integriraj" Python i ispisivanju na zaslonu. Ova naredba prikazana je u retku 21 i doista je sve što trebate učiniti da biste dovršili ovaj korak. Kôd u retcima 19 i 20 samo je tu da "popravi" izlaz cijelog programa. "print (" …………… biti tiskan iza tog reda teksta.

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

Pokretanje programa 1. dio: Pokretanje programa kakav jest
Pokretanje programa 1. dio: Pokretanje programa kakav jest

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

Pokretanje programa:

  1. Pritisnite zeleni gumb koji izgleda kao "gumb za reprodukciju" koji se nalazi na alatnoj traci neposredno 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 = točnije):". (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 program u koraku 5. Ispravno ih ispunite, kao u gornjem 3.
  5. Integral treba ocijeniti i pojaviti se 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 lako je ručno procijeniti, stoga biste trebali provjeriti i uvjeriti se da je program dao vrlo blizak odgovor na ispravnu analitičku vrijednost koja je određena ručno. Kada pokrenem program s vrijednostima N = 10000, a = 0 i b = 10, dobivam odgovor 333.33333249999964. Točan analitički odgovor je 333.333. Ovo je nevjerojatno točno 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 2. dio: 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, iz koraka 5 uvezli ste niz matematičkih knjižnica Python funkcija u program. To vam omogućuje korištenje složenijih matematičkih funkcija koje se mogu integrirati. Pokušajmo jednom. Naravno, možete koristiti bilo koju funkciju koju želite, ali ja ću dodatno pokazati točnost ovog koda integriranjem određene matematičke funkcije koja daje dobro poznatu vrijednost kada se integrira u određenom rasponu. Ta je funkcija f (x) = Sin [x]. Ova matematička funkcija prikazana je na prvoj popratnoj slici, iscrtana od 0 do 2π, a područje interesa zasjenjeno je tirkizno. Postoji jednaka količina pozitivne površine kao i negativne površine u ovom intervalu, pa ako zbrojite ukupnu površinu, trebali biste dobiti nulu. Pogledajmo je 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 zelenu tipku 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 kakvu vrijednost dobivate.

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 3. dio: Proširenje programa

Na ovom ste mjestu gotovi: imate radni definitivni integralni algoritam kodiran u Pythonu koji radi glatko i daje vrlo točne odgovore. Međutim, ovaj program se može poboljšati. Nisam programer i imam minimalno iskustvo s Pythonom. Zapravo, morao sam se osvježiti korištenjem Pythona da dovršim ovaj vodič, ali to bi vam trebalo dati samopouzdanje da je Python tako jednostavan jezik za učenje. Mislim da ovaj program možete proširiti tako da ga učinite učinkovitijim, 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) kako bi se odredila funkcija f (x) unutar nje.

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 za svakoga tko želi dodatno poboljšati program.

Preporučeni: