Nieprawidłowe wyniki

0

Hej
Napisałem program ktory liczy całki metodą trapezow i Simpsona. Przejrzałem algorytm ale dalej wychodzą mi błędne wyniki, nie wiem czy to kwestia typów zmiennych czy czego innego. Wrzucam kod:

#include <iostream>
#include <math.h>

using namespace std;

double MetodaTrapezow(
    double*(Funkcja(double)), double DolnaGranica, double GornaGranica, int LiczbaKrokow)
{
    double wynik = 0;
    double dx; // delta x
    dx = (GornaGranica - DolnaGranica) / LiczbaKrokow;
    for (int i = 1; i < LiczbaKrokow; i++)
    {
        wynik += Funkcja(DolnaGranica + i * dx);
    }
    wynik += (Funkcja(DolnaGranica) + Funkcja(GornaGranica)) / 2;
    wynik *= dx;
    return wynik;
}

double MetodaSimpsona(
    double*(Funkcja(double)), double DolnaGranica, double GornaGranica, int LiczbaKrokow)
{
    double wynik = 0;
    double temp = 0;
    double dx, punktpodz; // delta x i punkt podziałowy
    dx = (GornaGranica - DolnaGranica) / LiczbaKrokow;
    for (int i = 1; i <= LiczbaKrokow; i++)
    {
        punktpodz = DolnaGranica + i * dx;
        temp += Funkcja(punktpodz - dx / 2);
        if (i < LiczbaKrokow)
            wynik += Funkcja(punktpodz);
    }

    wynik = dx / 6 * (Funkcja(DolnaGranica) + Funkcja(GornaGranica) + 2 * wynik + 4 * temp);
    return wynik;
}

double pomFunkcjaZ1(double arg)
{
    return (pow(cos(arg), 2) + 1);
}

double pomFunkcjaZ2(double arg)
{
    return (1 / arg);
}

double pomFunkcjaZ4(double arg)
{
    return (1 / 1 + pow(arg, 2));
}

int main()
{
    double a, b;
    int h;
    int wybor;
    cout << "Wybierz zadanie 1, 2, 4\n";
    cin >> wybor;
    switch (wybor)
    {
        case 1: // tutaj ma wyjść wynik 3pi = 9,42
            cout << "Podaj poczatek przedzialu calkowania\n";
            cin >> a;
            cout << "Podaj koniec przedzialu calkowania\n";
            cin >> b;
            cout << "Co ile(krok)\n";
            cin >> h;
            cout << "Wynik to" << MetodaTrapezow(pomFunkcjaZ1, a, b, h);
            break;
        case 2: // tutaj ma policzyc ln7=1,94

            cout << "Podaj poczatek przedzialu calkowania\n";
            cin >> a;
            cout << "Co ile(krok)\n";
            cin >> h;
            int arg;
            cout << "Podaj argument";
            cin >> arg;
            cout << "Wynik to" << MetodaSimpsona(pomFunkcjaZ2, a, arg, h);
            break;

        case 4: // ma wyjsc pi = 3,14
            cout << "Podaj poczatek przedzialu calkowania\n";
            cin >> a;
            cout << "Podaj koniec przedzialu calkowania\n";
            cin >> b;
            cout << "Co ile(krok)\n";
            cin >> h;
            cout << "Wynik to" << 2 * MetodaSimpsona(pomFunkcjaZ4, a, b, h);
            break;
        default:
            cout << "Blad\n";
            break;
    }
    return 0;
}

Z góry dzięki za wszystkie odpowiedzi/

2

uzyj debuggera

1 użytkowników online, w tym zalogowanych: 0, gości: 1