[C++] Znaleźć pierwiastek równania (metoda bisekcji)

Awatar użytkownika
don_sZogun
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 wrz 2009, o 18:49
Płeć: Mężczyzna
Podziękował: 1 raz

[C++] Znaleźć pierwiastek równania (metoda bisekcji)

Post autor: don_sZogun »

WITAM
Wielkimi krokami zbliża się zaliczenie a ja jestem kompletnie zielony z programowania. Potrzebuję napisać algorytm, który przy użyciu metody bisekcji odnajdzie pierwiastek równania:

\(\displaystyle{ \sin(x)-x^{3}+5x ^{2}+18x+3=0}\)

Prosiłbym o jakieś instrukcję.
adek05
Użytkownik
Użytkownik
Posty: 450
Rejestracja: 3 kwie 2007, o 18:38
Płeć: Mężczyzna
Lokalizacja: Biała Podlaska
Podziękował: 12 razy
Pomógł: 68 razy

[C++] Znaleźć pierwiastek równania (metoda bisekcji)

Post autor: adek05 »

Poczytaj o metodzie bisekcji i po prostu ją zastosuj.
Xitami

[C++] Znaleźć pierwiastek równania (metoda bisekcji)

Post autor: Xitami »

w C można tak:

Kod: Zaznacz cały

#define Ol00 double
Ol00 O100(Ol00 O100){return O100>0000?O100:-O100;}
Ol00 OlO0(Ol00 OlO0){return sin(OlO0)+((5-OlO0)*OlO0+0x12)*OlO0+3;}
main(){Ol00 O10O,OlOO=-'/'/'/',O1OO='-'-'+',Ol0O=0.00000000000002; //   <------- dokładność
do{O10O=(O1OO+OlOO)/2;if(OlO0(O1OO)*OlO0(O10O)>0000)
O1OO=O10O;else OlOO=O10O;}while(O100(OlO0(O10O))>Ol0O);
printf("f(%f) = %f\n", O10O, OlO0(O10O));}
Awatar użytkownika
don_sZogun
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 wrz 2009, o 18:49
Płeć: Mężczyzna
Podziękował: 1 raz

[C++] Znaleźć pierwiastek równania (metoda bisekcji)

Post autor: don_sZogun »

Dzięki zasobom internetu udało mi się wymodzić coś takiego:

Kod: Zaznacz cały

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

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 sin(x) - x*x*x + 5*x*x + 18*x + 3;
}

int main(int argc, char* argv[])
{

  double a,b,x0,fa,fb,f0;

  cout.precision(8);     // 8 cyfr po przecinku
  cout.setf(ios::fixed); // format stałoprzecinkowy

 
  cout << "a = "; cin >> a;
  cout << "b = "; cin >> b;
          "WYNIK:

";
  fa = f(a); fb = f(b);
  if(fa * fb > 0)     cout << "Funkcja nie spelnia zalozen
";
  else
  {
    while(fabs(a - b) > EPSX)
    {
      x0 = (a + b) / 2; f0 = f(x0);
      if(fabs(f0) < EPS0) break;
      if(fa * f0 < 0) b = x0;
      else
      {
        a = x0; fa = f0;
      }
    }
    cout << "x0 = " << setw(15) << x0 << endl;
  }
  system("pause");
  return 0;
}
Byłbym wdzięczny za przeanalizowanie tego kodu i wytknięcie wszelkiego rodzaju błędów
ODPOWIEDZ