Obliczanie całki numerycznej metodą trapezów – na wyjściu pojawia się "-inf"

0

Witam! Mam napisany prosty programik z liczeniem całki numerycznej metodą trapezów i mam pewien problem...
W funkcji double y podaję wzór funkcji (w tym przypadku muszę obliczyć całkę z logarytmu naturalnego) i na wyjściu wywala mi -inf, nie wiem dlaczego, ponieważ powinno wyświetlać normalne wartości - i tak właśnie robi w przypadku właściwie wszystkich innych funkcji, chociażby np x^3.
Z góry bardzo dziękuję za pomoc, jeżeli ktoś zauważy błąd!

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

using namespace std;

double y(double x) {
    return log(x);
}

double LN(double arg, int n) {

    double a = 0, h;
    cout << "Podaj liczbe podprzedzialow: ";
    cin >> n;
    cout << "Podaj arg: " << endl;
    cin >> arg;

    h = (arg - a) / n;
    double ln = 0;
    for(int i = 1;i<n-1;i++) {
        ln += y(arg);
    }
    ln += y(a) / 2;
    ln += y(arg) / 2;
    ln *= h;
    return ln;
}

int main()
{
    int n;
    double arg, h;
    y(arg);
    cout << LN(arg, n) << endl;
    return 0;
}
0
    h = (arg - a) / n;
    double ln = 0;
    for(int i = 1;i<n-1;i++) {
        ln += y(arg);
    }

Powiedz mi w jaki sposób arg zależy od i. Bo na razie liczysz po prostu ln += arg * (n - 2)

0

To może ma być coś w stylu? :

 h = (arg - a) / n;
    double ln = 0;
    for(int i = 1;i<n-1;i++) {
        ln += y(a+i*h);
    }
0

W sumie blisko, ale metoda trapezów wymaga policzenia obu krańców przedziału, czyż nie?

0
kq napisał(a):

W sumie blisko, ale metoda trapezów wymaga policzenia obu krańców przedziału, czyż nie?

A tego nie realizuje ta część?

 ln += y(a) / 2;
 ln += y(arg) / 2;
0

Nie, masz to policzyć dla każdego małego przedziału.

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