• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Całkowanie numeryczne - Python

VPS Starter Arubacloud
–1 głos
3,266 wizyt
pytanie zadane 31 marca 2019 w Python przez NewbieC Nowicjusz (180 p.)
edycja 1 kwietnia 2019 przez Patrycjerz

Czy ktoś może nakierować jak to zrobić lub pomóc ogólnie.

1 odpowiedź

+2 głosów
odpowiedź 31 marca 2019 przez Hunter94 Mądrala (6,290 p.)
edycja 31 marca 2019 przez Hunter94

Całka oznaczona to suma powierzchni(pole) pod krzywą wyznaczoną przez funkcję.
Całki oblicza się w sposób analityczny, czyli przy użyciu metod matematycznych, oraz można użyć metod numerycznych które sprawiają że zamiast rozwiązywać tą całkę dostając dokładną odpowiedź, staramy się przybliżyć jej wynik.

W tym przypadku robimy to tak że zakładamy że całka może być trudna do wyliczenia i nie znamy wzoru na pole pod taką krzywą, dlatego korzystamy z wzorów prostych takich jak wzór na pole prostokąta S=x*y czy pole trapezu 1/2(a+b)*h.

Żeby to lepiej zobrazować wyobraź sobie że nie znasz wzoru na pole koła, ale znasz wzór na pole kwadratu.
ustalasz kwadrat o polu 1cm^2 i patrzysz ile takich kwadratów zmieści się w tym kole, otrzymasz przybliżony wynik.

tutaj masz ustawione granice czyli liczysz do osi 0x i między prostymi p i q.

Masz tutaj nawet Ci kod napisałem, nie testowałem go tylko czy dobrze działa dla wartości ujemnych

(cosinus i ograniczenie osią 0x)

import math


def rect(fun: callable, n: int, p: float, q: float)-> float:
    """
    :param fun: funkcja do calkowania
    :param n: liczba prostokątów
    :param p: lewa granica
    :param q: prawa granica
    :return: pole powierzchni pod funkcja miedzy granicami p, q oraz osia 0x
    """

    # długość boku prostokąta w każdej iteracji
    shift = (q - p) / n

    # wynik całki, suma pól prostokątów
    suma = 0

    for x in range(n):
        # wartość funkcji w punkcie x
        y = fun(p + (x * shift))
        #  pomijamy jeśli poniżej 0x
        if y < 0:
            continue

        suma += y * shift

    return suma


def trapeze(fun: callable, n: int, p: float, q: float) -> float:
    """
    :param fun: funkcja do calkowania
    :param n: liczba trapezów
    :param p: lewa granica
    :param q: prawa granica
    :return: pole powierzchni pod funkcja miedzy granicami p, q oraz osia 0x
    """

    # podstawa trapezu
    shift = (q - p) / n

    # wynik całki, suma pól trapezów
    suma = 0

    for x in range(n):
        # wartość funkcji w punkcie x
        y = fun(p + (x * shift))

        # wartość funkcji w punkcie x + 1
        y2 = fun(p + ((x + 1) * shift))

        #  pomijamy jeśli poniżej 0x
        if y < 0 or y2 < 0:
            continue
        # prostokąt w trapezie
        suma += y * shift
        # wysokosc trojkata w trapezie
        h = abs(y2 - y)

        # pole trojkata w trapezie
        suma += .5 * shift * h

    return suma


# funkcje z zadania
a = lambda x: x**2 - x - 3

b = lambda x: -x**3 - x**2 + 1

c = lambda x: math.cos(x)  + 1

d = lambda x: (3 * x)**(1/2) - 1


 

komentarz 31 marca 2019 przez Secrus Nałogowiec (32,880 p.)
Widzę kolega fan typowania :)

Podobne pytania

0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 20 czerwca 2019 w Matematyka, fizyka, logika przez gunaterek Bywalec (2,760 p.)
0 głosów
1 odpowiedź 2,432 wizyt
pytanie zadane 22 października 2017 w C i C++ przez Andrzej Cioska Nowicjusz (220 p.)
0 głosów
1 odpowiedź 567 wizyt
pytanie zadane 23 grudnia 2016 w C i C++ przez Bartosz Początkujący (310 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...