Problem z wynikiem - wyskakuje nan lub inf
Ostatnio zmodyfikowano 2016-01-16 22:38
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ą. |
|
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 |
|
« 1 » |