INHOUDSOPGAWE:
- Stap 1: Begrip van die algoritme Deel 1: die definitiewe integrale en die gebruik daarvan
- Stap 2: Begrip van die algoritme Deel 2: Numeriese benadering
- Stap 3: Begrip van die algoritme Deel 3: die middelpuntreël
- Stap 4: Skep die program Deel 1: Laai 'n Python -samesteller/redakteur af
- Stap 5: Skep die program Deel 2: Die invoer van funksies en die definisie van veranderlikes
- Stap 6: Die opstel van die program Deel 3: Die skep van 'n funksie vir integrasie
- Stap 7: Skep van die program Deel 4: Vertoon die antwoord
- Stap 8: Die program uitvoer Deel 1: Die program uitvoer soos dit is
- Stap 9: Die uitvoering van die program Deel 2: Integrasie van ander wiskundige funksies
- Stap 10: Die program uitvoer Deel 3: Uitbreiding van die program
Video: Hoe om 'n numeriese integrasieprogram in Python op te stel: 10 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Dit is 'n handleiding oor hoe om 'n program te skep en uit te voer wat definitiewe integrale evalueer met behulp van 'n numeriese integrasie -algoritme. Ek het die stappe in 3 afdelings verdeel: die algoritme verstaan wat gebruik sal word om die program te maak, die program met die Python -programmeertaal te kodeer en die program uit te voer. Hierdie handleiding is bedoel vir iemand wat moontlik vinnig 'n sakrekenaar moet maak om definitiewe integrale te evalueer, of dalk die algoritme nodig het vir gebruik in 'n groter program. Basiese berekeningskennis word verwag, maar relevante wiskundige inligting word hersien. Kennis van programmering word nie verwag nie, maar is nuttig, aangesien ek slegs kortliks beskryf hoe die programmering werklik werk.
Wat u benodig:
'N Persoonlike rekenaar met toegang tot die internet
Stap 1: Begrip van die algoritme Deel 1: die definitiewe integrale en die gebruik daarvan
Ek neem aan dat u 'n bietjie weet wat 'n integrale is in die konteks van basiese berekening. Integrale is belangrik omdat dit u toelaat om 'n verskeidenheid waardes op te som vermenigvuldig met 'n oneindige klein lengte; dit is nuttig op baie gebiede van finansies, getalleteorie, fisika, chemie, sowel as op baie ander terreine. Hierdie program laat u egter slegs die oppervlakte onder 'n kromme vir 'n beperkte interval bereken, of met ander woorde, dit evalueer nie anti-afgeleides nie-daarvoor is 'n baie kragtiger algoritme nodig. Hierdie algoritme is handig as u 'n definitiewe integraal in 'n groter program moet evalueer, of as u 'n definitiewe integrale met die hand wil ondersoek.
'N Basiese definitiewe integraal stel die oppervlakte onder 'n kromme voor wat deur 'n funksie gedefinieer word, bv. f (x). Vir 'n definitiewe integrale soek ons die gebied tussen twee punte (onderskeidelik a en b). In die prentjie is die turkoois gebied die gebied waarna ek verwys, en die vergelyking om dit te bepaal, word ook in daardie gebied getoon. Die funksie in die prentjie is willekeurig.
Stap 2: Begrip van die algoritme Deel 2: Numeriese benadering
'N Rekenaar benodig 'n wye stel instruksies vir die berekening van die oppervlakte onder 'n willekeurige funksie wat vir enige funksie sal werk, dus is analitiese metodes wat jy dalk ken nie van nut nie, aangesien dit te spesifiek is. Een metode om ongeveer integrale te bereken, wat 'n rekenaar eintlik kan hanteer, word gedoen deur die belangstelling te vul met 'n gebruikersgedefinieerde hoeveelheid reghoeke van dieselfde breedte en veranderlike hoogte en dan 'n opsomming van alle oppervlaktes van die reghoek. Die stewige eienskappe van reghoeke laat 'n deel van die totale oppervlakte onaangeraak, en daarom word dit as 'n benadering beskou; Hoe meer reghoeke jy tussen die grense (a en b) kan druk, hoe akkurater sal die benadering wees, aangesien die onaangeraakte streke yl word. Aangesien 'n rekenaar die taak sal verrig, kan u die aantal reghoeke in die gewenste gebied as 'n baie groot getal stel, wat die benadering baie akkuraat maak. Stel u in die ondersteunende prentjie voor dat elke reghoek in die aangewese gebied ewe breed is. Ek het my bes gedoen om hulle ewe breed te maak in Microsoft Paint, maar het nie die beste werk gedoen nie.
Stap 3: Begrip van die algoritme Deel 3: die middelpuntreël
Hierdie reël dui aan hoe die reghoeke gemaak en gebruik word in die benadering. Elke reghoek uit 'N' reghoeke moet ewe breed wees, Δx, maar elke nde reghoek kan nie presies dieselfde wees nie: die wisselende faktor is die hoogte wat wissel na gelang van die funksie wat op 'n sekere punt geëvalueer word. Die middelpuntreël kry sy naam omdat u die hoogte van elke reghoek as f (x_n) evalueer, waar 'x_n' die onderskeie middelpunt van elke reghoek is, links of regs van die reghoek. Die gebruik van die middelpunt is soos om 'n gemiddelde te implementeer, wat die benadering meer akkuraat sal maak as as u regs of links gebruik. Die ondersteunende prentjie vir hierdie stap gee 'n opsomming van hoe die middelpuntreël wiskundig gedefinieer word.
Stap 4: Skep die program Deel 1: Laai 'n Python -samesteller/redakteur af
Noudat u die algoritme verstaan wat geïmplementeer moet word, is dit 'n kwessie om 'n rekenaar te laat doen om die berekening vir u uit te voer. Die eerste stap om 'n rekenaar te vertel wat om te doen, is om die gereedskap daarvoor te kry. Hierdie algoritme kan in enige taal gekodeer word; Vir eenvoud word hierdie program in die Python -taal gekodeer. Om u rekenaar opdrag te gee om operasies met Python uit te voer, benodig u 'n redakteur wat instruksies neem wat in die taal geskryf is, wat dan saamgestel kan word in masjientaal wat u rekenaar kan verstaan, sodat hy die take kan uitvoer wat u moet opdra. In hierdie tyd is 'n redakteur en samesteller gewoonlik geïntegreer, maar dit is nie altyd die geval nie. U kan enige redakteur/samesteller gebruik waarmee u gemaklik is, maar ek sal u wys hoe u my persoonlike gunsteling vir Python: Canopy kan kry. As u reeds 'n redakteur/samesteller het, kan u hierdie stappe oorslaan.
- Gaan na
- Klik op Download Canopy
-
Klik op die aflaai -knoppie wat ooreenstem met u bedryfstelsel
Die aflaai sal outomaties begin
- Volg die instillasie -instruksies nadat u die uitvoeringslêer begin het
- Begin die program
- Klik op "Editor" in die hoofkieslys van die program
- Klik op "skep 'n nuwe lêer" in die middel van die skerm
Vanaf hierdie punt moet u 'n leë wit venster sien met 'n wyser wat op 'n basiese woordverwerkingsdokument lyk. U is nou gereed om die numeriese integrasie -algoritme te kodeer vir die oplossing van definitiewe integrale. Die volgende stappe bevat 'n stukkie kode wat u sal kopieer en 'n verduideliking van wat die brokkie vir die hele program doen.
Stap 5: Skep die program Deel 2: Die invoer van funksies en die definisie van veranderlikes
Kopieer die kode in die prentjie.
Daar is veranderlikes vir enige program wat u mag koder. 'N Veranderlike is 'n naam wat gegee word aan 'n waarde wat gebruik sal word en wat kan verander. In die meeste programmeertale (indien nie almal nie) moet u 'n veranderlike inisieer voordat die program daaraan kan verander. In die geval van hierdie program het ek die veranderlikes 'N', 'a' en 'b' genoem. Hierdie waardes verteenwoordig onderskeidelik die aantal iterasies (AKA aantal reghoeke), onderste grens en boonste grens. U kan dit alles noem wat u wil, maar om by die formules te pas wat in 'Begrip van die algoritme deel 3: die middelpuntreël' is, is dit die beste om dit dieselfde te hou. Let daarop dat hulle nie net 'n spesifieke waarde het nie. Dit is omdat hulle insette gemaak het dat die gebruiker van die program, wanneer die program uitgevoer word, kan definieer wat die waarde daarvan sal wees. Die teks in aanhalings, na die invoeropdrag, verskyn wanneer u die program uitvoer, en vertel u watter tipe waarde u moet invoer. U sal ook sien dat "int" en "float" voor die invoerbenamings gebruik word. Hierdie terme vertel die rekenaar watter tipe veranderlike hierdie waarde sal wees. 'N "int" is 'n heelgetal, en 'n "float" is 'n drywende puntwaarde (dit wil sê 'n desimaal). Dit behoort duidelik te wees waarom hierdie as sodanig aangewys word.
Enige teks wat na 'n "#" voorkom, is 'n opmerking waarmee die programmeerder die kode op 'n humanistiese manier kan volg; Ek het sekere opmerkings gemaak in my kode wat u gaan kopieer, maar voeg gerus kommentaar by wat u spesifiek help. Die program lees niks met 'n "#" voor dit as 'n opdrag nie.
Die gedeelte van die kode wat 'van wiskunde -invoer *' lees, vertel die program om 'n verskeidenheid wiskundige funksies in te voer wat gebruik kan word sonder om dit in jouself te hoef te programmeer. Die '*' beteken net 'alles'. Lees hierdie gedeelte van die kode as: voer alle funksies uit die wiskundebiblioteek in. Hiermee kan u wiskundige funksies soos sinus, cosinus, log, exp, ens. Gebruik. Hierdie funksie kan wiskundig in die kode geïntegreer word.
Stap 6: Die opstel van die program Deel 3: Die skep van 'n funksie vir integrasie
Kopieer die kode op die foto onder die vorige kode.
WAARSKUWING: Hierdie afdeling is dig, en ek wil 'n paar dinge verduidelik wat moontlik verwarrend kan wees. As u oor programmering praat, verskyn die woord 'funksie' baie. Hierdie term verskyn ook baie wanneer u oor wiskunde praat. Dus, vanaf hierdie punt, as ek praat oor 'n funksie in die programmeringssin, sal ek 'Python -funksie' skryf, en as ek oor die wiskundige funksie praat, sal ek 'wiskundige funksie' sê. Op 'n stadium sal ons 'n Python -funksie gebruik as voorstelling vir die betrokke wiskundige funksie.
Hierdie volgende stukkie kode is die kern van die program. Hier word 'n Python -funksie gedefinieer wat die algoritme van numeriese integrasie uitvoer met behulp van die middelpuntreël. "def Integrate (N, a, b)" lui as: definieer 'n funksie genaamd 'Integrate' wat die veranderlikes 'N', 'a' en 'b' aanvaar en die oppervlakte onder die kromme (die wiskundige funksie) teruggee wat ook gedefinieer word binne die 'Integrate' Python -funksie. U kan hierdie Python -funksie enigiets noem as u die kodering doen, maar dit is sinvol om dit te integreer, aangesien dit 'n funksie is wat inderdaad 'n wiskundige funksie integreer.
Op hierdie punt is dit die moeite werd om kommentaar te lewer oor hoe Python blokke kode skei. 'N Blok kode is 'n hele afdeling wat 'n sekere taak verrig. Verskillende programmeertale sal spesifieke maniere hê om hierdie "blokke" te onderskei. Vir Python word 'n blok onderskei deur inkepings: elke taak-uitvoerende afdeling het sy eie inspringing, en daar kan blokke in ander ingeboude blokke wees. Dit verteenwoordig take binne take, en vertel in wese die volgorde waarin die kode uitgevoer moet word. In die geval van die gedefinieerde Python -funksie "Integrate", word alles binne die funksie in een blok ingedraai, wat die take onderskei wat binne die funksie uitgevoer sal word. Daar is ook ingedeelde dele in hierdie Python -funksie wat hul eie take verrig. Dit lui soos volg: 'n opdrag (taak) word uiteengesit, 'n dubbelpunt volg die opdrag, en wat die opdrag doen, word daaronder ingespan.
Onmiddellik nadat u die 'integreer' Python -funksie gedefinieer het, definieer u 'n ander Python -funksie genaamd f (x). Dit verteenwoordig die wiskundige funksie wat geïntegreer sal word. Vir elke verskillende wiskundige funksie wat u wil integreer, moet u na hierdie programlyn gaan om dit te verander (anders as die veranderlikes wat gedefinieer word wanneer die program uitgevoer word). Elke Python -funksie sal 'n opbrengswaarde hê; dit is wat die funksie gee as u dit 'n waarde gee. In hierdie geval is die ingegooi waarde "x", en hierdie "x" term sal die waarde van wat jy ook al gooi-dit is 'n tydelike waarde.
Vervolgens dien 'n for-lus as die opsomming wat gedefinieer word in die formules in die gedeelte "Die algoritme begryp" van hierdie tutoriaal. Hierdie opsomming benodig nog 'n paar veranderlikes, waarvan een as die opbrengswaarde vir die hele "Integrate" Python -funksie sal dien. Voor die voorlus het ek hierdie veranderlikes as 'waarde' en 'waarde2' aangewys. die taak van die for-lus is om te herhaal oor 'n reeks waardes vir 'n aangewese veranderlike, wat maklik binne die for-lus-opdrag gedefinieer kan word; in hierdie geval is die veranderlike 'n '. Die reeks waarvoor die iterasie voorkom, is 1 tot N+1. U moet opmerk dat die opsomming wat in die voorgenoemde formules gedefinieer word, slegs wissel van 1 tot N. Ons definieer dit so omdat die Python -taal elke herhaalde waarde van nul tel, dus ons moet in wese die omvang van die waardes verskuif om by ons gewenste waarde te pas reeks. Die voor-lus maak dan voorsiening vir die opsomming van al die hoogtes van die reghoek saam en stoor die waarde in die veranderlike wat ek 'waarde' genoem het. Dit word gesien in die stuk kode wat verskyn as: waarde += f (a +((n- (1/2))*((b-a)/N))).
Van daar af gebruik die volgende stuk van die kode die veranderlike genaamd "waarde2", wat dan die som van alle hoogtes van elke reghoek vermenigvuldig met die gestandaardiseerde breedte van elke reghoek is-dit is ons finale antwoord vertoon deur ons program, en is dus die opbrengswaarde van die "Integrate" Python -funksie.
Stap 7: Skep van die program Deel 4: Vertoon die antwoord
Kopieer die kode op die foto onder die vorige kode.
Noudat die antwoord verkry kan word deur die 'Integrate' Python -funksie, wil ons dit kan vertoon. Dit is net 'n kwessie om die waardes wat deur die gebruiker ingevoer is ("N", "a" en "b") in die "Integrate" Python -funksie te plaas en dit op die skerm te druk. Hierdie opdrag word op reël 21 getoon, en is eintlik al wat u hoef te doen om hierdie stap te voltooi. Die kode op reëls 19 en 20 is net daar om die uitset van die hele program te verbeter. "druk (" ……………………… " na die reël teks gedruk word.
Stap 8: Die program uitvoer Deel 1: Die program uitvoer soos dit is
As u Canopy nie gebruik nie, hoef u waarskynlik nie eers hierdie stap te volg nie, en die uitvoering van die program kan verskillende prosedures vereis. In Canopy, voordat u die program kan begin, moet u dit stoor. Die lêertipe vir 'n Python-program is 'n.py-lêer-dit word outomaties gestoor. Kies waar u die lêer wil stoor, dan kan u die program uitvoer.
Die uitvoering van die program:
- Klik op die groen knoppie wat lyk soos 'n 'speelknoppie' op die werkbalk net bokant die plek waar u lêernaam verskyn (sien prentjie).
- Die program sal dan in die onderste skerm van die redakteur, bekend as die Canopy-data-analise-omgewing, uitgevoer word. Gestel jy het die aanwysings gekopieer soos ek dit geskryf het, moet jy onderaan die Canopy-data-analise-omgewing die aanwysing sien: "Voer in hoeveel keer jy wil som (meer kere = meer akkuraat):." (verwys na prentjie)
- Voer 'n waarde in vir hoeveel keer u die iterasie wil doen, dit wil sê 10000 (hoeveel reghoeke u in u gebied wil druk), en druk dan op enter.
- Meer aanwysings sal verskyn met stellings wat die bekende invoeraanwysings behoort te wees wat u in stap 5. in die program gekodeer het. Vul dit toepaslik in, net soos in nommer 3 hierbo.
- Die integrale moet geëvalueer word en 'n resultaat moet verskyn.
As u die program gekodeer het soos in die voorafgaande foto's, het u net f (x) = x^2 oor 'n paar grense geïntegreer. Die integrale van x^2 is maklik om met die hand te evalueer; daarom moet u seker maak of die program 'n baie noue antwoord gee op die korrekte analitiese waarde wat met die hand bepaal word. As ek die program met die waardes N = 10000, a = 0 en b = 10 uitvoer, kry ek die antwoord 333.33333249999964. Die korrekte analitiese antwoord is 333.333. Dit is ongelooflik akkuraat en vinnig. U het in werklikheid 10 000 reghoeke tussen 0 en 10 op die x -as ingedruk en dit gebruik om die oppervlakte onder die kromme x^2 te benader!
Stap 9: Die uitvoering van die program Deel 2: Integrasie van ander wiskundige funksies
As u in die vorige stap getrou gevolg het, het u f (x) = x^2 geïntegreer. Dit is nie die enigste wiskundige funksie wat hierdie program kan integreer nie. Onthou, vanaf stap 5 het u die wiskundige biblioteekreeks van Python -funksies in die program ingevoer. Hiermee kan u meer ingewikkelde wiskundige funksies gebruik wat geïntegreer kan word. Kom ons gee 'n kans. U kan natuurlik enige funksie gebruik wat u wil, maar ek sal die akkuraatheid van hierdie kode verder demonstreer deur 'n spesifieke wiskundige funksie te integreer wat 'n bekende waarde oplewer wanneer dit oor 'n sekere reeks geïntegreer word. Die funksie is f (x) = Sin [x]. Hierdie wiskundige funksie word vertoon in die eerste meegaande prentjie, geteken van 0 tot 2π, en die gebied van belang is in turkoois. Daar is 'n gelyke hoeveelheid positiewe oppervlakte, aangesien daar 'n negatiewe oppervlakte in hierdie interval is, dus as u die totale oppervlakte optel, moet u nul kry. Kom ons kyk of dit werklik gebeur:
Om die wiskundige funksie f (x) = Sin [x] in die program te plaas:
- Voordat u die program weer begin, onder die opmerking "#tik u funksie na terugkeer", tik: sin (x) waar x ** 2 tans geleë is. (verwys na prentjie).
- Begin die program deur weer op die groen speelknoppie te druk.
- Tik 10000 vir die N -waarde (hoeveel keer jy wil som).
- sit "0" in vir die onderste grens.
- Sit 6.2832 in vir die boonste grens (ongeveer 2π).
- Kyk watter waarde u kry.
Toe ek dit doen, kry ek uiteindelik 'n waarde van 1.079e-10: dit kom neer op.0000000001079, wat regtig naby nul is, dus dit blyk akkuraat te wees en toon aan dat die algoritme die negatiewe gebied voldoende hanteer.
Stap 10: Die program uitvoer Deel 3: Uitbreiding van die program
Op hierdie punt is u klaar: u het 'n werkende, integrale algoritme wat in Python gekodeer is, wat glad verloop en baie akkurate antwoorde gee. Hierdie program kan egter verbeter word. Ek is nie 'n programmeerder nie, en ek het minimale ervaring met Python. Eintlik moes ek my verfris met die gebruik van Python om hierdie tutoriaal te voltooi, maar dit moet u vertroue gee dat Python so 'n maklike taal is om te leer. My punt is dat u hierdie program kan uitbrei deur dit doeltreffender te maak, miskien 'n GUI te implementeer en dit meer gebruikersvriendelik te maak.
My gedagtes oor die uitbreiding van die program:
- Implementeer 'n grafiese gebruikerskoppelvlak waarmee u die program kan uitvoer sonder om die interaktiewe data-analise-omgewing van Canopy te gebruik
- Maak dat die wiskundige funksie wat geïntegreer moet word, nie binne die program hoef in te voer nie, maar kan ingevoer word nadat die program uitgevoer is (ek het dit aanvanklik probeer doen, maar kon dit nie agterkom nie).
- Definieer 'n 'Integrate' Python -funksie, sodat die f (x) -funksie die f (x) -funksie daarin wil hê.
Dit is slegs voorbeelde van verbeteringsgebiede, maar ek kan verseker dat daar nog baie ander gebiede is wat verbeter kan word. Ek laat hierdie stap toe as 'n voorbeeld van die gebreke wat hierdie program het, en miskien 'n oefening vir almal wat die program verder wil verbeter.
Aanbeveel:
Hoe om 'n Raspberry Pi op te stel en te begin gebruik: 4 stappe
Hoe om 'n Raspberry Pi op te stel en te begin gebruik: Vir die lesers van die toekoms is ons in 2020. Die jaar waarin u gelukkig is om gesond te wees en nie deur Covid-19 besmet is nie , kry baie meer vrye tyd as wat u ooit kon dink. So, hoe kan ek myself op 'n nie te dom manier besig hou nie? O ja
Hoe om OSMC op te stel met Hyperion op Raspberry Pi met WS2812b Led Strip: 8 stappe
Hoe om OSMC op te stel met Hyperion op Raspberry Pi met WS2812b Led Strip: Soms is ek baie goed in Engels, soms nie … Eerste dinge eerste. Dit is my eerste onderrig en Engels is nie my moedertaal nie, so wees asseblief nie te hard met my nie. Dit gaan nie oor hoe om die raam te bou nie, dit is maklik. Dit gaan oor installasie
Hoe om 'n rekenaar saam te stel: 29 stappe
Hoe om 'n rekenaar saam te stel: Die bou van 'n rekenaar kan frustrerend en tydrowend wees, as u nie weet wat u moet doen of wat u nodig het nie. As u dink dat u alles reg gedoen het, maar dit steeds nie kan aanskakel nie, of die luidspreker nie meer laat piep nie. Weet jy het gemors, en ha
Stuur numeriese data van een Arduino na 'n ander: 16 stappe
Stuur numeriese data van een Arduino na 'n ander: inleiding deur David Palmer, CDIO Tech. aan die Universiteit van Aston. Moes u ooit 'n paar nommers van die een Arduino na die ander stuur? Hierdie instruksies wys hoe. U kan maklik toets of dit werk deur eenvoudig 'n string getalle te tik om by die S te stuur
Gebruik numeriese bedieningsblokke met Arduino: 4 stappe
Gebruik van numeriese bedieningsblokkies met Arduino: Numeriese bedieningspanele kan 'n eenvoudige alternatief vir eindgebruikers bied vir verskillende koppelvlakke vir u projekte. Of as u baie knoppies nodig het, kan dit u baie tyd bespaar met betrekking tot konstruksie. Ons verbind hulle met die Arduino l