Spisu treści:

Jak zrobić program integracji numerycznej w Pythonie: 10 kroków
Jak zrobić program integracji numerycznej w Pythonie: 10 kroków

Wideo: Jak zrobić program integracji numerycznej w Pythonie: 10 kroków

Wideo: Jak zrobić program integracji numerycznej w Pythonie: 10 kroków
Wideo: POŁĄCZENIE Z API CHAT GPT ZA POMOCĄ PYTHONA 2024, Lipiec
Anonim
Jak zrobić program integracji numerycznej w Pythonie?
Jak zrobić program integracji numerycznej w Pythonie?

Jest to samouczek dotyczący tworzenia i uruchamiania programu do obliczania całek oznaczonych przy użyciu algorytmu całkowania numerycznego. Podzieliłem kroki na 3 sekcje: zrozumienie algorytmu, który zostanie użyty do stworzenia programu, kodowanie programu przy użyciu języka programowania Python i uruchomienie programu. Ten samouczek jest przeznaczony dla kogoś, kto może potrzebować szybkiego kalkulatora do obliczania całek oznaczonych lub może potrzebuje algorytmu do użycia w programie na większą skalę. Oczekuje się podstawowej znajomości rachunku różniczkowego, ale sprawdzane są odpowiednie informacje matematyczne. Znajomość programowania nie jest oczekiwana, ale jest przydatna, ponieważ opisuję tylko pokrótce, jak faktycznie działa programowanie.

Czego będziesz potrzebować:

Komputer osobisty z dostępem do internetu

Krok 1: Zrozumienie algorytmu Część 1: Całka oznaczona i jej zastosowanie

Zrozumienie algorytmu, część 1: Całka oznaczona i jej zastosowanie
Zrozumienie algorytmu, część 1: Całka oznaczona i jej zastosowanie

Zakładam, że wiesz trochę, czym jest całka w kontekście podstawowego rachunku różniczkowego. Całki są ważne, ponieważ umożliwiają sumowanie tablicy wartości pomnożonych przez nieskończenie małą długość; jest to przydatne w wielu dziedzinach finansów, teorii liczb, fizyce, chemii, a także w wielu innych dziedzinach. Jednak ten program pozwoli ci tylko obliczyć powierzchnię pod krzywą dla skończonego przedziału, czyli innymi słowy, nie oblicza funkcji antypochodnych - do tego potrzebny jest znacznie silniejszy algorytm. Algorytm ten jest przydatny, jeśli chcesz oszacować całkę oznaczoną w większym programie określonym w kierunku czegoś innego lub jeśli chcesz sprawdzić swoją odpowiedź na jakiekolwiek całki oznaczone wykonane ręcznie.

Podstawowa całka oznaczona reprezentuje pole pod krzywą określoną przez funkcję np. f(x). Dla całki oznaczonej szukamy pola pomiędzy dwoma punktami (oznaczonymi odpowiednio a i b). Na rysunku obszar turkusowy to obszar, do którego się odnoszę, a równanie określające to jest również pokazane w tym regionie. Funkcja pokazana na rysunku jest dowolna.

Krok 2: Zrozumienie algorytmu, część 2: Aproksymacja liczbowa

Zrozumienie algorytmu, część 2: Aproksymacja liczbowa
Zrozumienie algorytmu, część 2: Aproksymacja liczbowa

Komputer potrzebuje szerokiego zestawu instrukcji do obliczania tego obszaru pod dowolną funkcją, która będzie działać dla dowolnej funkcji, więc metody analityczne, które możesz znać, są bezużyteczne, ponieważ są zbyt szczegółowe. Jedną z metod obliczania w przybliżeniu całek, którą komputer może obsłużyć, jest wypełnienie obszaru zainteresowania zdefiniowaną przez użytkownika ilością prostokątów o równej szerokości i zmiennej wysokości, a następnie zsumowanie wszystkich obszarów prostokąta. Sztywne właściwości prostokątów pozostawią część całkowitej powierzchni nietkniętą, dlatego uważa się to za przybliżenie; jednak im więcej prostokątów można wcisnąć między granice (a i b), tym dokładniejsze będzie przybliżenie, ponieważ nietknięte regiony stają się mniej liczne. Ponieważ komputer będzie wykonywał to zadanie, możesz ustawić liczbę prostokątów w żądanym obszarze na bardzo dużą liczbę, dzięki czemu przybliżenie będzie niezwykle dokładne. Na rysunku pomocniczym wyobraź sobie, że każdy prostokąt w wyznaczonym obszarze ma równą szerokość. Zrobiłem co w mojej mocy, aby były równe szerokości w Microsoft Paint, ale nie wykonałem najlepszej pracy.

Krok 3: Zrozumienie algorytmu Część 3: Reguła punktu środkowego

Zrozumienie algorytmu, część 3: reguła punktu środkowego
Zrozumienie algorytmu, część 3: reguła punktu środkowego

Ta reguła określa, w jaki sposób prostokąty są tworzone i używane w przybliżeniu. Każdy prostokąt z „N” prostokątów musi mieć równą szerokość, Δx, ale każdy n-ty prostokąt nie może być dokładnie taki sam: współczynnikiem zmiennym jest wysokość, która zmienia się wraz z oceną funkcji w określonym punkcie. Reguła punktu środkowego bierze swoją nazwę od faktu, że oceniasz wysokość każdego prostokąta jako f(x_n), gdzie „x_n” jest odpowiednim punktem środkowym każdego prostokąta, w stosunku do lewej lub prawej strony prostokąta. Używanie punktu środkowego jest jak wprowadzanie średniej, która sprawi, że przybliżenie będzie dokładniejsze, niż gdybyś używał prawej lub lewej strony. Pomocniczy rysunek dla tego kroku podsumowuje, jak reguła punktu środkowego jest zdefiniowana matematycznie.

Krok 4: Tworzenie programu Część 1: Pobieranie kompilatora/edytora Pythona

Teraz, gdy już rozumiesz algorytm, który należy zaimplementować, chodzi o to, aby komputer wykonał za Ciebie obliczenia. Pierwszym krokiem do powiedzenia komputerowi, co ma zrobić, jest uzyskanie odpowiednich narzędzi. Algorytm ten można zakodować w dowolnym języku; dla uproszczenia ten program będzie napisany w języku Python. Aby nakazać komputerowi wykonywanie operacji w Pythonie, będziesz potrzebować edytora, który pobiera instrukcje napisane w tym języku, które następnie zostaną skompilowane do języka maszynowego zrozumiałego dla komputera, aby mógł wykonywać zadania, które mu każesz. W dzisiejszych czasach edytor i kompilator są zwykle zintegrowane, jednak nie zawsze tak jest. Możesz użyć dowolnego edytora/kompilatora, z którym czujesz się komfortowo, ale pokażę ci, jak zdobyć mój osobisty faworyt dla Pythona: Canopy. Jeśli masz już edytor/kompilator, możesz pominąć te kroki.

  1. Przejdź do https://www.en Thought.com/product/canopy/
  2. Kliknij Pobierz baldachim
  3. Kliknij przycisk pobierania odpowiadający Twojemu systemowi operacyjnemu

    Pobieranie rozpocznie się automatycznie

  4. Postępuj zgodnie z instrukcjami wkraplania po uruchomieniu pliku wykonawczego
  5. Uruchom program
  6. Kliknij "Edytor" w menu głównym programu
  7. Kliknij „utwórz nowy plik” na środku ekranu

Od tego momentu powinieneś zobaczyć puste białe okno z kursorem przypominającym podstawowy dokument edytora tekstu. Jesteś teraz gotowy do rozpoczęcia kodowania algorytmu całkowania numerycznego do rozwiązywania całek oznaczonych. Kolejne kroki będą zawierały fragment kodu, który skopiujesz, oraz wyjaśnienie, co ten fragment robi dla programu jako całości.

Krok 5: Tworzenie programu Część 2: Importowanie funkcji i definiowanie zmiennych

Tworzenie programu Część 2: Importowanie funkcji i definiowanie zmiennych
Tworzenie programu Część 2: Importowanie funkcji i definiowanie zmiennych

Skopiuj kod z obrazka.

Dla każdego programu, który możesz znaleźć w kodowaniu, będą zmienne. Zmienna to nazwa nadana wartości, na której będzie operowana i która może ulec zmianie. W większości języków programowania (jeśli nie we wszystkich) musisz zainicjować zmienną, zanim program będzie mógł wprowadzić w niej zmiany. W przypadku tego programu nazwałem zmienne „N”, „a”, „b”. Wartości te reprezentują odpowiednio liczbę iteracji (liczbę prostokątów AKA), dolną granicę i górną granicę. Możesz nazwać je jak chcesz, ale aby dopasować formuły podane w „Zrozumienie algorytmu, część 3: Reguła punktu środkowego”, najlepiej jest zachować je bez zmian. Zauważ, że nie są one po prostu ustawione na określoną wartość. Dzieje się tak, ponieważ są one wprowadzanymi danymi wejściowymi, dzięki którym po uruchomieniu programu użytkownik programu może określić, jaka będzie wartość. Tekst w cudzysłowie, po poleceniu input, pojawia się po uruchomieniu programu, informując o typie wartości do wpisania. Zauważysz również, że "int" i "float" są używane przed oznaczeniami wejściowymi. Te terminy informują komputer, jakiego typu zmiennej będzie ta wartość. „int” to liczba całkowita, a „float” to wartość zmiennoprzecinkowa (tj. dziesiętna). Powinno być jasne, dlaczego są one oznaczone jako takie.

Każdy tekst znajdujący się po znaku „#” jest komentarzem, który pozwala programiście śledzić kod w humanistyczny sposób; Dodałem pewne komentarze w moim kodzie, które będziesz kopiować, ale możesz dodać dowolne komentarze, które konkretnie ci pomogą. Program nie odczyta niczego z przedrostkiem "#" jako poleceniem.

Fragment kodu, który brzmi „from math import *” mówi programowi, aby zaimportował tablicę funkcji matematycznych, których można użyć bez konieczności programowania ich w sobie. „*” oznacza po prostu „wszystko”. Przeczytaj tę część kodu jako: z biblioteki matematycznej importuj wszystkie funkcje. Pozwala to na używanie funkcji matematycznych, takich jak sinus, cosinus, log, exp itp. Funkcje te można matematycznie zintegrować z kodem.

Krok 6: Tworzenie programu Część 3: Tworzenie funkcji do integracji

Tworzenie programu, część 3: Tworzenie funkcji integracji
Tworzenie programu, część 3: Tworzenie funkcji integracji

Skopiuj kod z obrazka poniżej poprzedniego kodu.

OSTRZEŻENIE: Ta sekcja jest gęsta i chcę wyjaśnić kilka rzeczy, które mogą potencjalnie być mylące. Mówiąc o programowaniu, często pojawia się słowo „funkcja”. Ten termin pojawia się również często, gdy mówisz o matematyce. Więc od tego momentu, kiedy mówię o funkcji w sensie programowania, będę pisał „funkcja Pythona”, a kiedy będę mówił o funkcji matematycznej, powiem „funkcja matematyczna”. W pewnym momencie użyjemy funkcji Pythona jako reprezentacji danej funkcji matematycznej.

Ten kolejny fragment kodu jest sercem programu. Tutaj zdefiniowana jest funkcja Pythona, która realizuje algorytm integracji numerycznej przy użyciu reguły punktu środkowego. "def Integrate(N, a, b)" czyta się jako: zdefiniuj funkcję o nazwie "Integrate", która akceptuje zmienne "N, " "a, " i "b, " i zwraca obszar pod krzywą (funkcja matematyczna) który jest również zdefiniowany w funkcji „Integrate” Pythona. Możesz nazwać tę funkcję Pythona cokolwiek podczas kodowania, ale ma sens nazywanie jej integracją, ponieważ jest to funkcja, która rzeczywiście integruje funkcję matematyczną.

W tym miejscu warto skomentować, jak Python segreguje bloki kodu. Blok kodu to cała sekcja, która wykonuje określone zadanie. Różne języki programowania będą miały wyznaczone sposoby rozróżniania tych „bloków”. W Pythonie blok wyróżnia się wcięciami: każda sekcja wykonująca zadanie ma swoje własne wcięcie, a w innych blokach mogą znajdować się wcięte bloki. Reprezentuje zadania w zadaniach i zasadniczo mówi o kolejności, w jakiej kod musi być wykonany. W przypadku zdefiniowanej funkcji Pythona „Integracja” wszystko w tej funkcji jest wcięte o jeden blok, rozróżniając w ten sposób zadania, które zostaną wykonane w ramach tej funkcji. W tej funkcji Pythona znajdują się wcięte części, które również wykonują swoje własne zadania. Przebiega to w następujący sposób: wydawane jest polecenie (zadanie), po nim następuje dwukropek, a pod spodem jest wcięcie, co robi polecenie.

Zaraz po zdefiniowaniu funkcji „integruj” Pythona zdefiniujesz inną funkcję Pythona o nazwie f(x). Reprezentuje funkcję matematyczną, która zostanie zintegrowana. Dla każdej innej funkcji matematycznej, którą chcesz zintegrować, będziesz musiał przejść do tej linii programu, aby ją zmienić (w przeciwieństwie do zmiennych, które są zdefiniowane podczas uruchamiania programu). Każda funkcja Pythona będzie miała wartość zwracaną, to jest to, co funkcja zwraca, gdy wrzucisz jej wartość. W tym przypadku wrzucona wartość to "x", a ten termin "x" przyjmie wartość tego, co go wrzucisz - jest to wartość tymczasowa.

Następnie pętla for działa jako suma zdefiniowana w formułach w sekcji „Opis algorytmu” tego samouczka. To podsumowanie wymaga jeszcze kilku zmiennych, z których jedna będzie działać jako wartość zwracana dla całej funkcji „Integrate” Pythona. Przed pętlą for określiłem te zmienne jako „wartość” i „wartość2”. zadaniem pętli for jest iteracja po zakresie wartości dla wyznaczonej zmiennej, którą można wygodnie zdefiniować w poleceniu pętli for; w tym przypadku tą zmienną jest „n”. Zakres, dla którego występuje iteracja, wynosi od 1 do N+1. Powinieneś zauważyć, że sumowanie zdefiniowane we wspomnianych formułach wynosi tylko od 1 do N. Definiujemy to w ten sposób, ponieważ język Python liczy każdą iterowaną wartość zaczynając od zera, więc zasadniczo musimy przesunąć zakres wartości, aby pasował do naszego pożądanego zasięg. Pętla for pozwala na zsumowanie wszystkich wysokości prostokąta i przechowuje tę wartość w zmiennej, którą nazwałem „wartość”. Widać to w fragmencie kodu, który wyświetla się jako: wartość += f(a+((n-(1/2))*((b-a)/N))).

Od tego momentu następny fragment kodu wykorzystuje zmienną o nazwie „value2”, która jest następnie przypisywana jako suma wszystkich wysokości każdego prostokąta pomnożona przez ustandaryzowaną szerokość każdego prostokąta - to jest nasza ostateczna odpowiedź, której oczekujemy wyświetlany przez nasz program, a zatem jest wartością zwracaną przez funkcję „Integrate” Pythona.

Krok 7: Tworzenie programu Część 4: Wyświetlanie odpowiedzi

Tworzenie programu Część 4: Wyświetlanie odpowiedzi
Tworzenie programu Część 4: Wyświetlanie odpowiedzi

Skopiuj kod z obrazka poniżej poprzedniego kodu.

Teraz, gdy odpowiedź można uzyskać za pomocą funkcji Pythona „Integrate”, chcemy mieć możliwość jej wyświetlenia. To tylko kwestia wpisania wartości wprowadzonych przez użytkownika ("N", "a, " i "b") do funkcji "Integrate" Pythona i wydrukowania ich na ekranie. To polecenie jest pokazane w linii 21 i jest naprawdę wszystkim, co musisz zrobić, aby zakończyć ten krok. Kod w liniach 19 i 20 służy tylko do "upiększenia" wyjścia całego programu. "print("……………………….")" oddziela sekcję wejściową programu od sekcji wyjściowej, a "print("Oto twoja odpowiedź: ")" to tylko oznaczenie, że odpowiedź będzie być wydrukowane po tym wierszu tekstu.

Krok 8: Uruchamianie programu Część 1: Uruchamianie programu bez zmian

Uruchamianie programu Część 1: Uruchamianie programu bez zmian
Uruchamianie programu Część 1: Uruchamianie programu bez zmian

Jeśli nie używasz Canopy, prawdopodobnie nie musisz wcale wykonywać tego kroku, a uruchomienie programu może wymagać innych procedur. W Canopy, zanim będziesz mógł uruchomić program, musisz go zapisać. Typ pliku dla programu w Pythonie to plik.py - jest on automatycznie zapisywany jako ten. Wybierz miejsce, w którym chcesz zapisać plik, a następnie będziesz mógł uruchomić program.

Uruchamianie Programu:

  1. Naciśnij zielony przycisk, który wygląda jak „przycisk odtwarzania” znajdujący się na pasku narzędzi tuż nad miejscem, w którym pojawia się nazwa pliku (patrz zdjęcie).
  2. Program zostanie uruchomiony na dolnym ekranie edytora, który jest znany jako środowisko analizy danych Canopy. Zakładając, że skopiowałeś monity tak, jak je napisałem, powinieneś zobaczyć na dole środowiska analizy danych Canopy monit: „Wprowadź, ile razy chcesz zsumować (więcej razy = dokładniej):”. (patrz zdjęcie)
  3. Wpisz wartość, ile razy chcesz wykonać iterację, tj. 10000 (ile prostokątów chcesz wepchnąć do swojego obszaru), a następnie naciśnij Enter.
  4. Pojawi się więcej podpowiedzi ze stwierdzeniami, które powinny być znanymi podpowiedziami wejściowymi, które zakodowałeś w programie w kroku 5. Wypełnij je odpowiednio, tak jak w punkcie 3 powyżej.
  5. Całka powinna zostać oceniona i powinien pojawić się wynik.

Jeśli zakodowałeś program, jak pokazano na poprzednich rysunkach, właśnie zintegrowałeś f(x) = x^2 w pewnych granicach. Całka x^2 jest łatwa do obliczenia ręcznego, dlatego należy sprawdzić i upewnić się, że program podał bardzo zbliżoną odpowiedź do prawidłowej wartości analitycznej wyznaczonej ręcznie. Kiedy uruchamiam program z wartościami N = 10000, a = 0 i b = 10, otrzymuję odpowiedź 333.3333249999964. Prawidłowa odpowiedź analityczna to 333,333. Jest to niezwykle dokładne i szybkie. Zasadniczo ściągnąłeś 10 000 prostokątów między 0 a 10 na osi x i użyłeś ich do przybliżenia obszaru pod krzywą x^2!

Krok 9: Uruchamianie programu Część 2: Integracja innych funkcji matematycznych

Uruchamianie programu, część 2: Integracja innych funkcji matematycznych
Uruchamianie programu, część 2: Integracja innych funkcji matematycznych

W poprzednim kroku, jeśli podążałeś wiernie, scałkowałeś f(x) = x^2. To nie jedyna funkcja matematyczna, którą ten program może zintegrować. Przypomnij sobie, że z kroku 5 zaimportowałeś do programu tablicę biblioteki matematycznej funkcji Pythona. Pozwala to na korzystanie z bardziej skomplikowanych funkcji matematycznych, które można zintegrować. Dajmy szansę. Oczywiście możesz użyć dowolnej funkcji, ale dokładniej zademonstruję dokładność tego kodu, całkując konkretną funkcję matematyczną, która po scałkowaniu w pewnym zakresie daje dobrze znaną wartość. Ta funkcja to f(x) = Sin[x]. Ta matematyczna funkcja jest wyświetlana na pierwszym towarzyszącym obrazku, wykreślona od 0 do 2π, a obszar zainteresowania jest zacieniony na turkusowo. Powierzchnia dodatnia jest taka sama, jak powierzchnia ujemna w tym przedziale, więc jeśli zsumujesz łączną powierzchnię, powinieneś otrzymać zero. Zobaczmy, czy tak się rzeczywiście dzieje:

Wprowadzenie do programu funkcji matematycznej f(x) = Sin[x]:

  1. Przed ponownym uruchomieniem programu, pod komentarzem "#wpisz swoją funkcję po powrocie " wpisz: sin(x) gdzie aktualnie znajduje się x**2. (patrz zdjęcie).
  2. Uruchom program, ponownie naciskając zielony przycisk odtwarzania.
  3. Wpisz 10000 jako wartość N (ile razy chcesz zsumować).
  4. wpisz „0” jako dolną granicę.
  5. Umieść 6,2832 w górnej granicy (około 2π).
  6. Zobacz jaką wartość otrzymujesz.

Kiedy to zrobiłem, uzyskałem wartość 1.079e-10: to równa się.0000000001079, co jest naprawdę bliskie zeru, więc wydaje się być dokładne i pokazuje, że algorytm odpowiednio obsługuje obszar ujemny.

Krok 10: Uruchamianie programu Część 3: Rozszerzanie programu

W tym momencie wszystko jest gotowe: masz działający określony algorytm całkowy zakodowany w Pythonie, który działa płynnie i daje bardzo dokładne odpowiedzi. Jednak ten program można ulepszyć. Nie jestem programistą i mam minimalne doświadczenie z Pythonem. W rzeczywistości musiałem odświeżyć się w używaniu Pythona, aby ukończyć ten samouczek, ale powinno to dać ci pewność, że Python jest tak łatwym językiem do nauczenia. Chodzi mi o to, że możesz rozszerzyć ten program, czyniąc go bardziej wydajnym, może zaimplementować GUI i uczynić go bardziej przyjaznym dla użytkownika.

Moje przemyślenia na temat rozszerzenia programu:

  • Zaimplementuj graficzny interfejs użytkownika, który umożliwia uruchamianie programu bez korzystania z interaktywnego środowiska analizy danych Canopy
  • Zrób to tak, że funkcja matematyczna, która ma zostać zintegrowana, nie musi być wprowadzana wewnątrz programu, ale może być wprowadzana po uruchomieniu programu (początkowo próbowałem to zrobić, ale nie mogłem tego rozgryźć).
  • Zdefiniuj funkcję „Integrate” Pythona, aby przyjmowała funkcję f(x) w przeciwieństwie do zdefiniowanej w niej funkcji f(x).

To tylko kilka przykładów obszarów wymagających poprawy, ale gwarantuję, że istnieje wiele innych obszarów, które można ulepszyć. Więc zostawiam ten krok jako przykład wad tego programu i być może ćwiczenie dla każdego, kto chce go dalej ulepszać.

Zalecana: