Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z wynikiem - wyskakuje nan lub inf

Ostatnio zmodyfikowano 2016-01-16 22:38
Autor Wiadomość
Gotenks
Temat założony przez niniejszego użytkownika
Problem z wynikiem - wyskakuje nan lub inf
» 2016-01-16 21:36:06
Witam. Mam problem z dwoma zadaniami, w których zamiast wyniku liczbowego, mimo usilnych prób i zmian, wyskakuje mi w różnych przypadkach inf lub nan.
Zadanie 1:

Oblicz pierwiastek równania nieliniowego metodą iteracji prostej.
Równanie: x^3 - x^2 + 3 = 0
KOD:

#include <iostream>
#include <cmath>
using namespace std;


double y(double x){
  return sqrt(pow(x,3)+3);
}

int main(void){
    double x0 = -1.4;
    double warunek=0.;
    double x=0.;
    do{
        x=y(x0);
        x=(x0+x)/2.;
        warunek=fabs(x-x0);
        x0=x;
    }   while(warunek>0.001);
    cout <<"Pierwiastkiem rownania jest: " << x0 << endl;
    return 0;
}

Tutaj wyskakują mi liczby (w zależności od x0) bardzo bliskie 1, a wynikiem ma być około -1,17.

Zadanie 2:

Oblicz pierwiastek równania nieliniowego metodą Stefensona.
Równanie: ln(x) + x = 0
KOD:

#include <iostream>
#include <cmath>

using namespace std;

double f(double x){
    return log(x) + x;
}

double g(double x){
    return (f(x+f(x)) - f(x))/f(x);
}

int main(void)
{
    double x0,x1,y,y1,epsilon,blad;
    x0=1;
    blad = 0.00001;
    do{
        y=f(x0);
        y1=g(x0);
        if(y==0)
            break;
        x1=x0-y/y1;
        epsilon=fabs((x1-x0)/x1);
        x0=x1;

    }   while(epsilon>=blad);
    cout << "Pierwiastek wynosi: " << x0 << endl;
    return 0;
}


Będę bardzo wdzięczny za pomoc i nakierowanie mnie na poprawę błędów, gdziekolwiek one są.
P-143603
carlosmay
» 2016-01-16 22:38:11
Będę bardzo wdzięczny za pomoc i nakierowanie mnie na poprawę błędów, gdziekolwiek one są.
Na pewno są w napisanym kodzie. Zaprzyjaźnij się z debugerem.

Wrzuciłem u siebie pierwszy kod i wyszło, że zmienna 'warunek' oraz 'x0' ciągle rosną, aż osiągną wartość wykraczającą poza maksymalną wartość.
inf (infinite) - nieskończona
nan (Not_a_Number) - najczęściej dzielenie przez zero daje taki błąd
P-143609
« 1 »
  Strona 1 z 1