metoda Newtona - kod C++
: 3 kwie 2011, o 15:32
METODA NEWTONA przybliżonego rozwiązywanie równań
Znalazłem taki program implementacja tą metodę:
program działa poprawnie, ale nie rozumiem niektórych fragmentów. Chodzi mianowicie i liniki: 34, 36, 42, 48, i 54. Nie do końca rozumiem dlaczego tak a nie inaczej. Bardzo proszę o pomoc w zrozumieniu tego programu
Nie chodzi mi tyle i wyjasnienie jak dziala metoda Newtona, tylko o działanie samego kodu, np jaki warunek sprawdza while jeżeli chodiz o 'i' oraz wzgledem czego sprawdza if 'i' w linice 54 skoro nie ma warunku oraz co oznacz if(!(--i))
Znalazłem taki program implementacja tą metodę:
Kod: Zaznacz cały
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
using namespace std;
const double EPS0 = 0.0000000001; // dokładność porównania z zerem
const double EPSX = 0.0000000001; // dokładność wyznaczenia pierwiastka
double f(double x)
{
return 2*x - tan (x); // nasza funkcja
}
double fp(double x)
{
return 2 - (1 / (cos(x) * cos(x))); // pochodna naszej funkcji
}
int main()
{
double x0,x1,f0,f1;
int i;
cout << setprecision(8) // 8 cyfr po przecinku
<< fixed; // format stałoprzecinkowy
cout << "Podaj punkt startowy\n";
cout << "\nx0 = "; cin >> x0;
cout << "\n";
x1 = x0 - 1; f0 = f(x0);
i = 50; // limit iteracji
while (i && (fabs(x1 - x0) > EPSX) && (fabs(f0) > EPS0))
{
f1 = fp(x0);
if(fabs(f1) < EPS0)
{
cout << "Zly punkt startowy\n";
i = 0;
break;
}
x1 = x0;
x0 = x0 - f0 / f1;
f0 = f(x0);
if(!(--i)) cout << "Przekroczony limit obiegow\n";
}
if (x0==0)
{cout << "Rozwiazanie nie spelnia zalozen naszego zadania\n";
}
else
if(i)
cout << "\nZnaleziony pierwiastek to x = " << x0;
cout << "\n\n";
system("pause");
return 0;
}
Nie chodzi mi tyle i wyjasnienie jak dziala metoda Newtona, tylko o działanie samego kodu, np jaki warunek sprawdza while jeżeli chodiz o 'i' oraz wzgledem czego sprawdza if 'i' w linice 54 skoro nie ma warunku oraz co oznacz if(!(--i))