Inhoudsopgave:

Een numeriek integratieprogramma maken in Python: 10 stappen
Een numeriek integratieprogramma maken in Python: 10 stappen

Video: Een numeriek integratieprogramma maken in Python: 10 stappen

Video: Een numeriek integratieprogramma maken in Python: 10 stappen
Video: Numerieke integratie 2024, Juli-
Anonim
Een numeriek integratieprogramma maken in Python
Een numeriek integratieprogramma maken in Python

Dit is een tutorial over het maken en uitvoeren van een programma dat bepaalde integralen evalueert met behulp van een numeriek integratiealgoritme. Ik heb de stappen in 3 secties verdeeld: het algoritme begrijpen dat zal worden gebruikt om het programma te maken, het programma coderen met de programmeertaal Python en het programma uitvoeren. Deze tutorial is bedoeld voor iemand die misschien snel een rekenmachine moet maken om bepaalde integralen te evalueren, of die het algoritme misschien nodig heeft voor gebruik in een groter programma. Basiskennis van wiskunde wordt verwacht, maar relevante wiskundige informatie wordt beoordeeld. Kennis van programmeren wordt niet verwacht, maar is wel handig aangezien ik slechts kort beschrijf hoe het programmeren eigenlijk werkt.

Wat je nodig zult hebben:

Een pc met toegang tot internet

Stap 1: Het algoritme begrijpen Deel 1: de definitieve integraal en het gebruik ervan

Het algoritme begrijpen Deel 1: de definitieve integraal en het gebruik ervan
Het algoritme begrijpen Deel 1: de definitieve integraal en het gebruik ervan

Ik ga ervan uit dat je een beetje weet wat een integraal is in de context van elementaire calculus. Integralen zijn belangrijk omdat je hiermee een reeks waarden kunt optellen, vermenigvuldigd met een oneindig kleine lengte; dit is nuttig op veel gebieden van financiën, getaltheorie, natuurkunde, scheikunde en vele andere gebieden. Met dit programma kun je echter alleen het gebied onder een curve berekenen voor een eindig interval, of met andere woorden, het evalueert geen anti-derivaten - daarvoor is een veel krachtiger algoritme nodig. Dit algoritme is handig als u een bepaalde integraal moet evalueren in een groter programma dat is gespecificeerd in de richting van iets anders, of als u uw antwoord wilt controleren op bepaalde, met de hand gemaakte integralen.

Een bepaalde basisintegraal vertegenwoordigt het gebied onder een kromme gedefinieerd door een functie, b.v. f(x). Voor een bepaalde integraal zoeken we het gebied tussen twee punten (respectievelijk aangeduid met a en b). Op de afbeelding is het turquoise gebied het gebied waarnaar ik verwijs, en de vergelijking om dit te bepalen wordt ook in dat gebied getoond. De in de afbeelding getoonde functie is willekeurig.

Stap 2: Het algoritme begrijpen Deel 2: Numerieke benadering

Het algoritme begrijpen Deel 2: Numerieke benadering
Het algoritme begrijpen Deel 2: Numerieke benadering

Een computer heeft een uitgebreide reeks instructies nodig voor het berekenen van dat gebied onder een willekeurige functie die voor elke functie werkt, dus analytische methoden die u misschien kent, zijn nutteloos omdat ze te specifiek zijn. Een methode om integralen bij benadering te berekenen, die een computer daadwerkelijk aankan, is door het interessegebied te vullen met een door de gebruiker gedefinieerd aantal rechthoeken van gelijke breedte en variabele hoogte en vervolgens alle gebieden van de rechthoek op te tellen. De starre eigenschappen van rechthoeken laten een deel van het totale gebied onaangetast, vandaar dat dit als een benadering wordt beschouwd; hoe meer rechthoeken u echter tussen de grenzen (a en b) kunt proppen, hoe nauwkeuriger de benadering zal zijn, aangezien de ongerepte gebieden schaarser worden. Aangezien een computer de taak zal uitvoeren, kunt u het aantal rechthoeken in het gewenste gebied instellen op een zeer groot aantal, waardoor de benadering uiterst nauwkeurig wordt. Stel je in de ondersteunende afbeelding voor dat elke rechthoek in het aangewezen gebied even breed is. Ik heb mijn best gedaan om ze in Microsoft Paint even breed te maken, maar het lukte niet.

Stap 3: Het algoritme begrijpen Deel 3: de middelpuntregel

Het algoritme begrijpen Deel 3: de middelpuntregel
Het algoritme begrijpen Deel 3: de middelpuntregel

Deze regel geeft aan hoe de rechthoeken worden gemaakt en gebruikt in de benadering. Elke rechthoek uit "N" rechthoeken moet een gelijke breedte hebben, Δx, maar elke n-de rechthoek kan niet exact hetzelfde zijn: de variërende factor is de hoogte die varieert als de functie op een bepaald punt wordt geëvalueerd. De middelpuntregel dankt zijn naam aan het feit dat u de hoogte van elke rechthoek evalueert als f(x_n), waarbij "x_n" het respectieve middelpunt van elke rechthoek is, links of rechts van de rechthoek. Het gebruik van het middelpunt is als het implementeren van een gemiddelde dat de benadering nauwkeuriger maakt dan wanneer u rechts of links zou gebruiken. De ondersteunende afbeelding voor deze stap vat samen hoe de middelpuntregel wiskundig wordt gedefinieerd.

Stap 4: Het programma maken Deel 1: Een Python-compiler/editor downloaden

Nu je het algoritme begrijpt dat moet worden geïmplementeerd, is het een kwestie van een computer de berekening voor je laten uitvoeren. De eerste stap om een computer te vertellen wat hij moet doen, is door de tools te krijgen om dit te doen. Dit algoritme kan in elke taal worden gecodeerd; voor de eenvoud wordt dit programma gecodeerd in de Python-taal. Om uw computer de opdracht te geven om bewerkingen met Python uit te voeren, hebt u een editor nodig die instructies opneemt die in die taal zijn geschreven en die vervolgens worden gecompileerd in machinetaal die uw computer kan begrijpen, zodat deze de taken kan uitvoeren die u hem opdraagt. Tegenwoordig zijn een editor en compiler meestal geïntegreerd, maar dat is niet altijd het geval. Je kunt elke editor/compiler gebruiken waarmee je vertrouwd bent, maar ik zal je laten zien hoe je mijn persoonlijke favoriet voor Python kunt verkrijgen: Canopy. Als je al een editor/compiler hebt, kun je deze stappen overslaan.

  1. Ga naar
  2. Klik op Canopy downloaden
  3. Klik op de downloadknop die overeenkomt met uw besturingssysteem

    Het downloaden start automatisch

  4. Volg de instillatie-instructies na het starten van het uitvoeringsbestand
  5. Voer het programma uit
  6. Klik op "Editor" in het hoofdmenu van het programma
  7. Klik op "een nieuw bestand maken" in het midden van het scherm

Vanaf dit punt zou u een leeg wit venster moeten zien met een cursor die lijkt op een standaard tekstverwerkingsdocument. U bent nu klaar om te beginnen met het coderen van het numerieke integratiealgoritme voor het oplossen van bepaalde integralen. De vervolgstappen bevatten een codefragment dat u kopieert en een uitleg van wat dat fragment voor het programma als geheel doet.

Stap 5: Het programma maken Deel 2: Functies importeren en variabelen definiëren

Het programma maken Deel 2: Functies importeren en variabelen definiëren
Het programma maken Deel 2: Functies importeren en variabelen definiëren

Kopieer de code in de afbeelding.

Voor elk programma dat u misschien codeert, zullen er variabelen zijn. Een variabele is een naam die wordt gegeven aan een waarde waarop wordt gewerkt en die kan veranderen. In de meeste programmeertalen (zo niet alle) moet je een variabele initialiseren voordat het programma er wijzigingen in kan aanbrengen. In het geval van dit programma heb ik de variabelen "N", "a", en "b" genoemd. Deze waarden vertegenwoordigen respectievelijk het aantal iteraties (AKA aantal rechthoeken), ondergrens en bovengrens. U kunt deze een naam geven die u maar wilt, maar om te voldoen aan de formules in "Het algoritme begrijpen, deel 3: de middelpuntregel", kunt u ze het beste hetzelfde houden. Merk op dat ze niet alleen op een specifieke waarde zijn ingesteld. Dit komt omdat het ingevoerde gegevens zijn die, wanneer het programma wordt uitgevoerd, de gebruiker van het programma kan bepalen wat de waarde zal zijn. De tekst tussen aanhalingstekens, na het invoercommando, verschijnt wanneer u het programma uitvoert en vertelt u welk type waarde u moet typen. U zult ook merken dat "int" en "float" worden gebruikt vóór de invoeraanduidingen. Deze termen vertellen de computer welk type variabele deze waarde zal zijn. Een "int" is een geheel getal en een "float" is een drijvende-kommawaarde (d.w.z. een decimaal). Het moet duidelijk zijn waarom deze als zodanig worden aangeduid.

Elke tekst die achter een "#" staat, is een opmerking waarmee de programmeur de code op een humanistische manier kan volgen; Ik heb bepaalde opmerkingen in mijn code gemaakt die u gaat kopiëren, maar voel u vrij om opmerkingen toe te voegen die u specifiek helpen. Het programma leest niets met een "#" ervoor als een commando.

Het gedeelte van de code dat "from math import *" leest, vertelt het programma om een reeks wiskundige functies te importeren die kunnen worden gebruikt zonder ze zelf te hoeven programmeren. De "*" betekent gewoon "alle". Lees dit gedeelte van de code als volgt: importeer alle functies uit de wiskundebibliotheek. Hiermee kunt u wiskundige functies gebruiken zoals sinus, cosinus, log, exp, enz. Deze functies kunnen wiskundig in de code worden geïntegreerd.

Stap 6: Het programma maken Deel 3: Een functie voor integratie maken

Het programma maken Deel 3: Een functie voor integratie maken
Het programma maken Deel 3: Een functie voor integratie maken

Kopieer de code in de afbeelding onder de vorige code.

WAARSCHUWING: Dit gedeelte is dik en ik wil enkele dingen ophelderen die mogelijk verwarrend kunnen zijn. Als we het over programmeren hebben, duikt het woord "functie" veel op. Deze term duikt ook veel op als je het over wiskunde hebt. Dus vanaf dit punt, als ik het heb over een functie in de programmeerzin, zal ik "Python-functie" schrijven en als ik het over de wiskundige functie heb, zal ik "wiskundige functie" zeggen. Op een gegeven moment zullen we een Python-functie gebruiken als representatie voor de wiskundige functie in kwestie.

Dit volgende codefragment is het hart van het programma. Hier wordt een Python-functie gedefinieerd die het algoritme van numerieke integratie uitvoert met behulp van de middelpuntregel. "def Integrate(N, a, b)" leest als: definieer een functie met de naam "Integrate" die de variabelen "N", "a" en "b" accepteert en het gebied onder de curve retourneert (de wiskundige functie) die ook is gedefinieerd in de Python-functie "Integreren". Je kunt deze Python-functie alles noemen wanneer je de codering uitvoert, maar het is logisch om het integreren te noemen, omdat het een functie is die inderdaad een wiskundige functie integreert.

Op dit punt is het de moeite waard om te bespreken hoe Python blokken code scheidt. Een codeblok is een hele sectie die een bepaalde taak uitvoert. Verschillende programmeertalen hebben aangewezen manieren om deze "blokken" te onderscheiden. Voor Python wordt een blok onderscheiden door inspringingen: elke sectie die een taak uitvoert heeft zijn eigen inspringing en er kunnen ingesprongen blokken zijn binnen andere ingesprongen blokken. Dit vertegenwoordigt taken binnen taken en vertelt in wezen de volgorde waarin de code moet worden uitgevoerd. In het geval van de gedefinieerde Python-functie "Integreren", wordt alles binnen die functie één blok uitgesprongen, waardoor de taken worden onderscheiden die binnen die functie zullen worden uitgevoerd. Er zijn ingesprongen delen binnen deze Python-functie die ook hun eigen taken uitvoeren. Het gaat als volgt: er wordt een commando (taak) uiteengezet, een dubbele punt volgt het commando, en wat het commando doet, staat eronder ingesprongen.

Onmiddellijk na het definiëren van de "integreer" Python-functie, definieert u een andere Python-functie genaamd f(x). Dit vertegenwoordigt de wiskundige functie die zal worden geïntegreerd. Voor elke verschillende wiskundige functie die u wilt integreren, moet u naar deze programmaregel gaan om deze te wijzigen (in tegenstelling tot de variabelen die worden gedefinieerd wanneer het programma wordt uitgevoerd). Elke Python-functie heeft een retourwaarde, dit is wat de functie retourneert als je er een waarde aan geeft. In dit geval is de ingeworpen waarde "x", en deze "x"-term zal de waarde aannemen van wat je er ook maar mee gooit - het is een tijdelijke waarde.

Vervolgens fungeert een for-lus als de sommatie die is gedefinieerd in de formules in het gedeelte "Het algoritme begrijpen" van deze zelfstudie. Deze sommatie vereist nog een paar variabelen, waarvan er één zal fungeren als de retourwaarde voor de volledige Python-functie "Integreren". Vóór de for-lus heb ik deze variabelen aangeduid als 'waarde' en 'waarde2'. de taak van de for-loop is het herhalen van een reeks waarden voor een aangewezen variabele, die gemakkelijk kan worden gedefinieerd binnen het for-loop-commando; in dit geval is die variabele "n". Het bereik waarvoor de iteratie plaatsvindt is 1 tot N+1. U zou moeten opmerken dat de sommatie gedefinieerd in de bovengenoemde formules alleen varieert van 1 tot N. We definiëren het op deze manier omdat de Python-taal elke herhaalde waarde telt vanaf nul, dus we moeten in wezen het bereik van de waarden verschuiven om aan onze gewenste bereik. De for-lus zorgt dan voor de sommatie van alle hoogten van de rechthoek samen en slaat die waarde op in de variabele die ik 'waarde' heb genoemd. Dit is te zien in het stukje code dat verschijnt als: value += f(a+((n-(1/2))*((b-a)/N))).

Vanaf daar gebruikt het volgende stuk van de code de variabele genaamd "waarde2", die vervolgens wordt toegewezen als de som van alle hoogten van elke rechthoek vermenigvuldigd met de gestandaardiseerde breedte van elke rechthoek - dit is ons laatste antwoord dat we willen weergegeven door ons programma, en is dus de retourwaarde van de Python-functie "Integreren".

Stap 7: Het programma maken Deel 4: Het antwoord weergeven

Het programma maken Deel 4: Het antwoord weergeven
Het programma maken Deel 4: Het antwoord weergeven

Kopieer de code in de afbeelding onder de vorige code.

Nu het antwoord kan worden verkregen via de "Integreer" Python-functie, willen we het kunnen weergeven. Dit is gewoon een kwestie van de waarden die door de gebruiker zijn ingevoerd ("N", "a," en "b") in de Python-functie "Integreren" plaatsen en op het scherm afdrukken. Deze opdracht wordt weergegeven op regel 21 en is eigenlijk alles wat u hoeft te doen om deze stap te voltooien. De code op regel 19 en 20 is er alleen om de uitvoer van het hele programma "mooier" te maken. "print("………………………….")" scheidt het invoergedeelte van het programma van het uitvoergedeelte, en "print("Hier is uw antwoord: ")" is slechts een aanduiding dat het antwoord worden afgedrukt na die regel tekst.

Stap 8: het programma uitvoeren Deel 1: het programma uitvoeren zoals het is

Het programma uitvoeren Deel 1: Het programma uitvoeren zoals het is
Het programma uitvoeren Deel 1: Het programma uitvoeren zoals het is

Als u Canopy niet gebruikt, hoeft u deze stap waarschijnlijk niet eens te volgen en kan het uitvoeren van het programma andere procedures vereisen. Voordat u het programma in Canopy kunt uitvoeren, moet u het opslaan. Het bestandstype voor een Python-programma is een.py-bestand - het wordt automatisch als volgt opgeslagen. Kies waar u het bestand wilt opslaan, dan kunt u het programma uitvoeren.

Het programma uitvoeren:

  1. Druk op de groene knop die eruitziet als een "afspeelknop" op de werkbalk net boven waar uw bestandsnaam verschijnt (zie afbeelding).
  2. Het programma zal dan draaien in het onderste scherm van de editor die bekend staat als de Canopy data-analyse-omgeving. Ervan uitgaande dat u de prompts hebt gekopieerd zoals ik ze heb geschreven, zou u onderaan de Canopy-gegevensanalyseomgeving de prompt moeten zien: "Voer in hoe vaak u wilt optellen (meer keren = nauwkeuriger):." (zie afbeelding)
  3. Voer een waarde in voor hoe vaak u de iteratie wilt doen, d.w.z. 10000 (hoeveel rechthoeken u in uw gebied wilt schuiven), en druk vervolgens op Enter.
  4. Er verschijnen meer prompts met instructies die de bekende invoerprompts moeten zijn die u in stap 5 in het programma hebt gecodeerd. Vul ze op de juiste manier in, net als in nummer 3 hierboven.
  5. De integraal moet worden geëvalueerd en er moet een resultaat verschijnen.

Als je het programma hebt gecodeerd zoals getoond in de voorgaande afbeeldingen, heb je zojuist f(x) = x^2 over bepaalde grenzen geïntegreerd. De integraal van x ^ 2 is gemakkelijk met de hand te evalueren, daarom moet u controleren en ervoor zorgen dat het programma een zeer nauwkeurig antwoord gaf op de juiste analytische waarde die met de hand werd bepaald. Wanneer ik het programma uitvoer met de waarden N = 10000, a = 0 en b = 10, krijg ik het antwoord 333.3333324999964. Het juiste analytische antwoord is 333.333. Dit is ongelooflijk nauwkeurig en snel. Je hebt in wezen 10.000 rechthoeken tussen 0 en 10 op de x-as geperst en gebruikt om het gebied onder de curve x ^ 2 te benaderen!

Stap 9: Het programma uitvoeren Deel 2: Andere wiskundige functies integreren

Het programma uitvoeren Deel 2: Andere wiskundige functies integreren
Het programma uitvoeren Deel 2: Andere wiskundige functies integreren

Als je in de vorige stap trouw hebt gevolgd, heb je f(x) = x^2 geïntegreerd. Dat is niet de enige wiskundige functie die dit programma kan integreren. Bedenk dat u vanaf stap 5 de matrix van de wiskundige bibliotheek van Python-functies in het programma hebt geïmporteerd. Hierdoor kunt u meer gecompliceerde wiskundige functies gebruiken die kunnen worden geïntegreerd. Laten we er een proberen. Natuurlijk kun je elke gewenste functie gebruiken, maar ik zal de nauwkeurigheid van deze code verder demonstreren door een bepaalde wiskundige functie te integreren die een bekende waarde oplevert wanneer deze over een bepaald bereik wordt geïntegreerd. Die functie is f(x) = Sin[x]. Deze wiskundige functie wordt weergegeven in de eerste begeleidende afbeelding, uitgezet van 0 tot 2π, en het interessegebied is gearceerd in turkoois. Er is evenveel positief gebied als er een negatief gebied is in dit interval, dus als je het totale gebied bij elkaar optelt, zou je nul moeten krijgen. Eens kijken of dit ook echt gebeurt:

De wiskundige functie f(x) = Sin[x] in het programma plaatsen:

  1. Voordat u het programma opnieuw uitvoert, typt u onder de opmerking "#type your function after return": sin(x) waar x**2 zich momenteel bevindt. (zie afbeelding).
  2. Start het programma door nogmaals op de groene afspeelknop te drukken.
  3. Typ 10000 voor de N-waarde (hoe vaak u wilt optellen).
  4. zet "0" in voor de ondergrens.
  5. Zet 6.2832 in voor de bovengrens (ongeveer 2π).
  6. Kijk welke waarde je krijgt.

Toen ik dit deed, kreeg ik een waarde van 1.079e-10: dit komt overeen met.0000000001079, wat heel dicht bij nul ligt, dus het lijkt nauwkeurig te zijn en laat zien dat het algoritme het negatieve gebied adequaat verwerkt.

Stap 10: Het programma uitvoeren Deel 3: Het programma uitbreiden

Op dit punt ben je klaar: je hebt een werkend definitief integraal algoritme gecodeerd in Python dat soepel loopt en zeer nauwkeurige antwoorden geeft. Dit programma kan echter worden verbeterd. Ik ben geen programmeur en heb minimale ervaring met Python. Ik moest mezelf zelfs opfrissen over het gebruik van Python om deze tutorial te voltooien, maar dat zou je het vertrouwen moeten geven dat Python zo'n gemakkelijke taal is om te leren. Mijn punt is dat je dit programma kunt uitbreiden door het efficiënter te maken, misschien wat GUI te implementeren en het gebruiksvriendelijker te maken.

Mijn gedachten over het uitbreiden van het programma:

  • Implementeer een grafische gebruikersinterface waarmee u het programma kunt uitvoeren zonder gebruik te maken van de interactieve omgeving voor gegevensanalyse van Canopy
  • Zorg ervoor dat de te integreren wiskundige functie niet in het programma hoeft te worden ingevoerd, maar kan worden ingevoerd nadat het programma is uitgevoerd (ik probeerde dit in eerste instantie, maar kon er niet achter komen).
  • Definieer een "Integreer" Python-functie zodat deze de functie f(x) nodig heeft in plaats van dat de functie f(x) erin is gedefinieerd.

Dit zijn slechts enkele voorbeelden van verbeterpunten, maar ik garandeer je dat er nog veel meer gebieden zijn waarop het verbeterd kan worden. Dus laat ik deze stap over als een voorbeeld van de gebreken van dit programma en misschien een oefening voor iedereen die het programma verder wil verbeteren.

Aanbevolen: