Sisukord:

Kuidas luua Pythonis arvulist integratsiooniprogrammi: 10 sammu
Kuidas luua Pythonis arvulist integratsiooniprogrammi: 10 sammu

Video: Kuidas luua Pythonis arvulist integratsiooniprogrammi: 10 sammu

Video: Kuidas luua Pythonis arvulist integratsiooniprogrammi: 10 sammu
Video: Riigikogu 20.06.2023 2024, Juuli
Anonim
Kuidas luua Pythonis arvulist integratsiooniprogrammi
Kuidas luua Pythonis arvulist integratsiooniprogrammi

See on õpetus, kuidas luua ja käivitada programm, mis hindab kindlaid integraale numbrilise integratsiooni algoritmi abil. Olen jaganud sammud kolmeks osaks: programmi koostamisel kasutatava algoritmi mõistmine, programmi kodeerimine Pythoni programmeerimiskeele abil ja programmi käivitamine. See õpetus on mõeldud inimesele, kellel võib tekkida vajadus kiiresti kalkulaatorit teha kindlate integraalide hindamiseks või võib -olla vajab algoritmi suuremahulises programmis kasutamiseks. Oodatakse põhilisi arvutusteadmisi, kuid vaadatakse üle asjakohane matemaatiline teave. Programmeerimisoskust ei eeldata, kuid see on kasulik, kuna kirjeldan vaid lühidalt, kuidas programmeerimine tegelikult toimib.

Mida vajate:

Personaalarvuti, millel on juurdepääs Internetile

1. samm. Algoritmi mõistmine 1. osa: kindel integraal ja selle kasutamine

Algoritmi 1. osa mõistmine: kindel integraal ja selle kasutamine
Algoritmi 1. osa mõistmine: kindel integraal ja selle kasutamine

Eeldan, et teate natuke, mis on integraal põhiarvutuse kontekstis. Integraalid on olulised, kuna need võimaldavad liita väärtuste massiivi, mis on korrutatud lõpmatu väikse pikkusega; see on kasulik paljudes rahanduse, numbriteooria, füüsika, keemia ja ka paljude muude valdkondade valdkondades. See programm võimaldab teil aga arvutada kõvera all oleva ala ainult piiratud ajavahemiku jooksul või teisisõnu ei hinda see tuletisinstrumente-selleks on vaja palju võimsamat algoritmi. See algoritm on kasulik, kui peate hindama kindlat integraali suuremas programmis, mis on määratud millegi muu jaoks, või kui soovite oma vastust kontrollida käsitsi tehtud kindlate integraalide osas.

Põhiline kindel integraal tähistab funktsiooni järgi määratletud kõvera all olevat ala, nt. f (x). Kindla integraali jaoks otsime kahe punkti vahelist ala (vastavalt tähistatud a ja b). Pildil on türkiissinine piirkond, millele ma viitan, ja selle määramise võrrand on ka selles piirkonnas näidatud. Pildil näidatud funktsioon on meelevaldne.

2. samm. Algoritmi mõistmine 2. osa: numbriline lähendamine

Algoritmi mõistmine 2. osa: numbriline lähendamine
Algoritmi mõistmine 2. osa: numbriline lähendamine

Arvuti vajab laia juhiste kogumit selle ala arvutamiseks suvalise funktsiooni all, mis töötab mis tahes funktsiooni puhul, seega ei pruugi teile tuttavad analüüsimeetodid olla kasulikud, kuna need on liiga spetsiifilised. Üks meetod integraalide ligikaudseks arvutamiseks, millega arvuti tegelikult hakkama saab, täidetakse huvipakkuv ala kasutaja määratud hulga võrdse laiuse ja muutuva kõrgusega ristkülikutega, seejärel liidetakse kokku kõik ristküliku alad. Ristkülikute jäigad omadused jätavad osa kogu pindalast puutumata, mistõttu peetakse seda ligikaudseks; aga mida rohkem ristkülikuid saab piiride (a ja b) vahele toppida, seda täpsem on lähendamine, kuna puutumata piirkonnad muutuvad hõredamaks. Kuna ülesannet täidab arvuti, saate määrata soovitud piirkonna ristkülikute arvu väga suureks, muutes lähendamise äärmiselt täpseks. Kujutage tugipildil ette, et iga ristkülik määratud alal on võrdse laiusega. Andsin endast parima, et need oleksid Microsoft Paintis võrdse laiusega, kuid ei teinud parimat tööd.

3. samm: mõista algoritmi 3. osa: keskpunkti reegel

Algoritmi mõistmine 3. osa: keskpunkti reegel
Algoritmi mõistmine 3. osa: keskpunkti reegel

See reegel määrab, kuidas ristkülikuid koostatakse ja kasutatakse lähendamisel. Igal ristkülikul, mis on "N" ristkülikutest, peab olema võrdne laius Δx, kuid iga n -nda ristkülik ei saa olla täpselt sama: varieeruv tegur on kõrgus, mis varieerub vastavalt teatud punktis hinnatud funktsioonile. Keskpunkti reegel sai oma nime sellest, et hindate iga ristküliku kõrgust f (x_n), kus "x_n" on iga ristküliku vastav keskpunkt vastavalt ristküliku vasakule või paremale. Keskpunkti kasutamine on nagu keskmise rakendamine, mis muudab lähendamise täpsemaks kui siis, kui kasutaksite paremat või vasakut. Selle sammu toetav pilt võtab kokku, kuidas keskpunkti reegel on matemaatiliselt määratletud.

4. samm: programmi loomine 1. osa: Pythoni kompilaatori/redaktori allalaadimine

Nüüd, kui mõistate rakendamist vajavat algoritmi, peate arvutuse teie eest arvutama laskma. Esimene samm arvutile ütlemiseks, mida teha, on selleks tööriistade hankimine. Seda algoritmi saab kodeerida mis tahes keeles; lihtsuse huvides kodeeritakse see programm Pythoni keeles. Et anda arvutile käsk Pythoniga toiminguid teha, vajate redaktorit, mis võtab vastu selles keeles kirjutatud juhised, mis seejärel kompileeritakse teie arvutisse mõistetavasse masinakeelde, et see saaks täita ülesandeid, mida te talle teete. Praegusel ajal on toimetaja ja kompilaator tavaliselt integreeritud, kuid see pole alati nii. Võite kasutada mis tahes toimetajat/kompilaatorit, mis teile sobib, kuid ma näitan teile, kuidas saada oma isiklik lemmik Python: Canopy jaoks. Kui teil on juba redaktor/kompilaator, võite need toimingud vahele jätta.

  1. Minge aadressile
  2. Klõpsake nuppu Laadi alla varikatus
  3. Klõpsake oma operatsioonisüsteemile vastavat allalaadimisnuppu

    Allalaadimine algab automaatselt

  4. Pärast täitmisfaili käivitamist järgige instillatsioonijuhiseid
  5. Käivitage programm
  6. Klõpsake programmi peamenüüs nuppu "Redaktor"
  7. Klõpsake ekraani keskel "loo uus fail"

Sellest hetkest alates peaksite nägema tühja valget akent, mille kursor sarnaneb põhilise tekstitöötlusdokumendiga. Nüüd olete valmis alustama numbrilise integratsiooni algoritmi kodeerimist kindlate integraalide lahendamiseks. Menetlusetappidel on koodilõik, mille kopeerite, ja selgitus selle kohta, mida see lõik programmi jaoks tervikuna teeb.

5. samm: programmi loomine 2. osa: funktsioonide importimine ja muutujate määramine

Programmi loomine 2. osa: Funktsioonide importimine ja muutujate määramine
Programmi loomine 2. osa: Funktsioonide importimine ja muutujate määramine

Kopeerige pildil olev kood.

Iga programmi puhul võite leida endale kodeerimise, seal on muutujaid. Muutuja on nimi, mis antakse väärtusele, mida hakatakse kasutama ja mis võib muutuda. Enamikus programmeerimiskeeltes (kui mitte kõigis) peate muutuja initsialiseerima, enne kui programm saab selles muudatusi teha. Selle programmi puhul olen nimetanud muutujad "N", "a" ja "b". Need väärtused tähistavad iteratsioonide arvu (AKA ristkülikute arv), vastavalt alumist piiri ja ülemist piiri. Võite neid nimetada mida iganes soovite, kuid selleks, et need vastaksid valemitele, mis on toodud jaotises „Algoritmi 3. osa mõistmine: keskpunkti reegel“, on kõige parem jätta need samaks. Pange tähele, et need pole lihtsalt määratud kindlale väärtusele. Seda seetõttu, et need on sisendid, mida programmi käivitamisel saab programmi kasutaja määratleda, milline see väärtus on. Jutumärkides olev tekst pärast sisestuskäsklust ilmub programmi käivitamisel ja ütleb teile, millist tüüpi väärtust sisestada. Samuti märkate, et enne sisestustähiseid kasutatakse "int" ja "float". Need terminid ütlevad arvutile, millist tüüpi muutuja see väärtus saab olema. "Int" on täisarv ja "ujuk" on ujukoma väärtus (st kümnendkoht). Peaks olema selge, miks need sellised on määratud.

Kõik tekstid pärast "#" on kommentaar, mis võimaldab programmeerijal koodi humanistlikul viisil järgida; Olen oma koodis teinud teatud kommentaare, mida te kopeerite, kuid lisage julgelt kommentaare, mis teid konkreetselt aitavad. Programm ei loe käsuna "#" -ga midagi ette.

Koodi osa, mis loeb "alates matemaatika importimisest", käsib programmil importida massiivi matemaatilisi funktsioone, mida saab kasutada ilma neid endasse programmeerimata. "*" Tähendab lihtsalt "kõik". Lugege seda koodi osa järgmiselt: importige matemaatikakogust kõik funktsioonid. See võimaldab teil kasutada matemaatilisi funktsioone, nagu siinus, koosinus, log, exp jne. Neid funktsioone saab koodi matemaatiliselt integreerida.

6. samm: programmi loomine 3. osa: integratsioonifunktsiooni loomine

Programmi loomine 3. osa: integratsioonifunktsiooni loomine
Programmi loomine 3. osa: integratsioonifunktsiooni loomine

Kopeerige eelmise koodi all oleval pildil olev kood.

HOIATUS: See jaotis on tihe ja tahan selgeks teha mõned asjad, mis võivad segadust tekitada. Programmeerimisest rääkides kerkib sõna "funktsioon" palju esile. See termin ilmub ka palju, kui räägite matemaatikast. Niisiis, sellest hetkest alates, kui ma räägin funktsioonist programmeerimise mõttes, kirjutan ma "Pythoni funktsiooni" ja kui ma räägin matemaatilisest funktsioonist, siis ma ütlen "matemaatiline funktsioon". Mingil hetkel kasutame kõnealuse matemaatilise funktsiooni esitusena Pythoni funktsiooni.

See järgmine koodilõik on programmi tuum. Siin määratletakse funktsioon Pythoni, mis teostab keskpunkti reegli abil numbrilise integratsiooni algoritmi. "def Integreeri (N, a, b)" loeb järgmiselt: defineeri funktsioon nimega "Integreeri", mis aktsepteerib muutujaid "N", "a" ja "b" ning tagastab kõvera all oleva ala (matemaatiline funktsioon) mis on määratletud ka funktsiooni "Integreeri" raames. Seda Pythoni funktsiooni saate kodeerimise ajal nimetada ükskõik kuidas, kuid seda on mõttekas nimetada integreerituks, kuna see on funktsioon, mis tõepoolest integreerib matemaatilise funktsiooni.

Siinkohal tasub kommenteerida, kuidas Python koodiplokke eraldab. Koodiplokk on terve sektsioon, mis täidab teatud ülesannet. Erinevatel programmeerimiskeeltel on nende "plokkide" eristamiseks määratud viisid. Pythoni puhul eristatakse plokke taanetega: igal ülesannet täitval lõigul on oma taane ja teiste taandplokkide sees võib olla taandplokke. See tähistab ülesandeid ülesannete piires ja sisuliselt ütleb koodi täitmise järjekorra. Määratletud Pythoni funktsiooni "Integreeri" puhul on kõik selle funktsiooni sees taandatud ühest plokist, eristades seega selle funktsiooni raames täidetavaid ülesandeid. Selles Pythoni funktsioonis on taandega osi, mis täidavad ka oma ülesandeid. See käib järgmiselt: esitatakse käsk (ülesanne), koolon järgib käsku ja see, mida käsk teeb, on taandatud all.

Kohe pärast funktsiooni "integreeri" määratlemist määratlete teise Pythoni funktsiooni, mida nimetatakse f (x). See tähistab integreeritavat matemaatilist funktsiooni. Iga erineva matemaatilise funktsiooni puhul, mida soovite integreerida, peate selle muutmiseks kasutama seda programmirida (erinevalt programmi käivitamisel määratletud muutujatest). Igal Pythoni funktsioonil on tagastamisväärtus, see on see, mille funktsioon tagastab, kui sellele väärtuse viskate. Sel juhul on sisse visatud väärtus "x" ja see "x" termin võtab selle väärtuse, mille te kunagi viskate-see on ajutine väärtus.

Järgmisena toimib for-loop selle õpetuse jaotise "Algoritmi mõistmine" valemites määratletud summeerimisena. See summeerimine nõuab veel paari muutujat, millest üks toimib kogu funktsiooni "Integreeri" tagastusväärtusena. Enne for-loopi olen määranud need muutujad väärtuseks "value" ja "value2". for-loop ülesanne on itereerida määratud muutuja väärtuste vahemikus, mida saab mugavalt määrata for-loop käsus; sel juhul on see muutuja "n". Vahemik, mille puhul iteratsioon toimub, on 1 kuni N+1. Pange tähele, et ülaltoodud valemites määratletud summeerimine jääb vahemikku 1 kuni N. Me määratleme selle sel viisil, sest Pythoni keel loeb iga korduva väärtuse alates nullist, seega peame sisuliselt väärtuste vahemikku nihutama, et see sobiks meie soovitud vahemik. For-loop võimaldab seejärel liita kõik ristküliku kõrgused kokku ja salvestab selle väärtuse muutujale, mida ma nimetasin "väärtuseks". Seda näeb kooditükis, mis kuvatakse järgmiselt: väärtus += f (a +((n- (1/2))*((b-a)/N))).

Sealt edasi kasutab järgmine kooditükk muutujat "väärtus2", mis seejärel määratakse iga ristküliku kõigi kõrguste summaks, mis on korrutatud iga ristküliku standardse laiusega-see on meie viimane vastus, mida soovime mida meie programm kuvab ja on seega funktsiooni "Integreeri" tagastusväärtus.

7. samm: programmi loomine 4. osa: vastuse kuvamine

Programmi loomine 4. osa: vastuse kuvamine
Programmi loomine 4. osa: vastuse kuvamine

Kopeerige eelmise koodi all oleval pildil olev kood.

Nüüd, kui vastuse saab Pythoni funktsiooni "Integreeri" kaudu, tahame seda kuvada. See on lihtsalt kasutaja sisestatud väärtuste ("N", "a" ja "b") lisamine funktsiooni "Integreeri" Python ja selle printimine ekraanile. See käsk on näidatud real 21 ja see on tõesti kõik, mida peate selle sammu lõpetamiseks tegema. Ridade 19 ja 20 kood on lihtsalt selleks, et kogu programmi väljundit "ilusaks muuta". "print (" ………………………. ")" eraldab programmi sisendiosa väljundiosast ja "print (" Siin on teie vastus: ")" on vaid tähis, mida vastus annab trükitakse pärast seda tekstirida.

8. samm: programmi käivitamine 1. osa: programmi käivitamine sellisena, nagu see on

Programmi käivitamine 1. osa: programmi käivitamine sellisena, nagu see on
Programmi käivitamine 1. osa: programmi käivitamine sellisena, nagu see on

Kui te Canopyt ei kasuta, ei pea te tõenäoliselt isegi seda sammu üldse järgima ja programmi käivitamine võib nõuda erinevaid toiminguid. Enne programmi käivitamist peate Canopy'is selle salvestama. Pythoni programmi failitüüp on.py-fail-see salvestatakse automaatselt sellisena. Valige koht, kuhu soovite faili salvestada, siis saate programmi käivitada.

Programmi käivitamine:

  1. Vajutage rohelist nuppu, mis näeb välja nagu "esitusnupp", mis asub tööriistaribal otse faili nime kuvamise kohal (vt pilti).
  2. Seejärel käivitatakse programm redaktori alumisel ekraanil, mida nimetatakse Canopy andmeanalüüsikeskkonnaks. Eeldades, et kopeerisite viipad nii, nagu ma need kirjutasin, peaksite Canopy andmeanalüüsi keskkonna allosas nägema viip: "Sisestage, mitu korda soovite summeerida (rohkem kordi = täpsem):." (vt pilti)
  3. Sisestage väärtus, mitu korda soovite iteratsiooni teha, st 10000 (mitu ristkülikut soovite oma piirkonda sisestada), seejärel vajutage sisestusklahvi.
  4. Ilmub rohkem viipasid avaldustega, mis peaksid olema tuttavad sisendviipad, mille programmis 5. sammus kodeerisite. Täitke need vastavalt ülaltoodud numbrile 3.
  5. Integraali tuleks hinnata ja tulemus peaks ilmuma.

Kui kodeerisite programmi nii, nagu on näidatud eelmistel piltidel, olete just integreerinud f (x) = x^2 üle mõne piiri. X^2 integraali on lihtne käsitsi hinnata, seetõttu peaksite kontrollima ja veenduma, et programm andis väga lähedase vastuse käsitsi määratud õigele analüütilisele väärtusele. Kui käivitan programmi väärtustega N = 10000, a = 0 ja b = 10, saan vastuseks 333.33333249999964. Õige analüütiline vastus on 333,333. See on uskumatult täpne ja kiire. Olete sisuliselt pigistanud 10 000 ristkülikut vahemikus 0 kuni 10 x -teljel ja kasutanud neid kõvera x^2 all oleva ala lähendamiseks!

9. samm: programmi käivitamine 2. osa: muude matemaatiliste funktsioonide integreerimine

Programmi käitamine 2. osa: muude matemaatiliste funktsioonide integreerimine
Programmi käitamine 2. osa: muude matemaatiliste funktsioonide integreerimine

Kui olete eelmises etapis ustavalt järginud, integreerisite f (x) = x^2. See pole ainus matemaatiline funktsioon, mida see programm saab integreerida. Meenutage alates 5. sammust, et importisite programmi Pythoni funktsioonide matemaatikakogu. See võimaldab kasutada keerukamaid matemaatilisi funktsioone, mida saab integreerida. Anname ühele võimaluse. Loomulikult võite kasutada mis tahes soovitud funktsiooni, kuid demonstreerin selle koodi täpsust, integreerides konkreetse matemaatilise funktsiooni, mis annab teatud vahemikku integreerituna hästi tuntud väärtuse. See funktsioon on f (x) = Sin [x]. See matemaatiline funktsioon kuvatakse esimesel kaasneval pildil, mis on joonistatud vahemikus 0 kuni 2π, ja huvipakkuv ala on varjutatud türkiissinisega. Positiivset ala on võrdselt, kuna selles vahemikus on negatiivset ala, nii et kui liidate kogupindala, peaksite saama nulli. Vaatame, kas see tegelikult juhtub:

Matemaatilise funktsiooni f (x) = Sin [x] sisestamine programmi:

  1. Enne programmi uuesti käivitamist tippige kommentaari "#type your function after return" alla: sin (x), kus x ** 2 praegu asub. (vt pilti).
  2. Käivitage programm, vajutades uuesti rohelist esitusnuppu.
  3. Sisestage N väärtuseks 10000 (mitu korda soovite summeerida).
  4. sisestage alumise piiri jaoks "0".
  5. Ülemise piiri jaoks (umbes 2π) sisestage 6.2832.
  6. Vaadake, mis väärtust saate.

Kui ma seda tegin, sain lõpuks väärtuse 1.079e-10: see võrdub.0000000001079, mis on tõesti nullilähedane, seega tundub see olevat täpne ja näitab, et algoritm käsitleb negatiivset ala piisavalt.

10. samm: programmi käivitamine 3. osa: programmi laiendamine

Siinkohal olete valmis: teil on Pythonis kodeeritud toimiv kindel integraalalgoritm, mis töötab sujuvalt ja annab väga täpsed vastused. Seda programmi saab aga täiustada. Ma ei ole programmeerija ja mul on Pythoniga minimaalne kogemus. Tegelikult pidin selle õpetuse lõpuleviimiseks värskendama end Pythoni kasutamisel, kuid see peaks andma teile kindlustunde, et Pythoni on nii lihtne õppida. Minu mõte on selles, et saate seda programmi laiendada, muutes selle tõhusamaks, rakendades võib -olla mõne graafilise kasutajaliidese ja muutes selle kasutajasõbralikumaks.

Minu mõtted programmi laiendamise kohta:

  • Rakendage graafiline kasutajaliides, mis võimaldab teil programmi käivitada ilma Canopy interaktiivse andmeanalüüsi keskkonda kasutamata
  • Tehke see nii, et integreeritav matemaatiline funktsioon ei peaks olema programmi sees sisestatud, vaid seda saab sisestada pärast programmi käivitamist (algselt proovisin seda teha, kuid ei saanud sellest aru).
  • Defineerige funktsioon „Integreeri”, et see võtaks funktsiooni f (x) vastavalt sellele, et selles on määratletud funktsioon f (x).

Need on vaid mõned näited parandamist vajavatest valdkondadest, kuid ma garanteerin, et on veel palju valdkondi, mida saab täiustada. Seega jätan selle sammu näitena selle programmi puudustest ja võib -olla harjutusest kõigile, kes soovivad programmi veelgi täiustada.

Soovitan: