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


(Kamil Stepien) #1

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:

sin(x)-x^3+5x^2+18x+3=0

Prosiłbym o jakieś instrukcję.


(Johny) #2

http://users.v-lo.krakow.pl/~dyrek/podr ... ekcja.html


(Kamil Stepien) #3

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

#include 

#include 

#include 


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:\n\n";

  fa = f(a); fb = f(b);

  if(fa * fb > 0) cout << "Funkcja nie spelnia zalozen\n";

  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 :slight_smile:


(Marco700) #4

Na stronie z której to zerżnąłeś jest dokładny opis algorytmu i jego działania, jak już skopiowałeś gotowy kod to byś chociaż przeczytał jak działa, a nie jeszcze chciał by ktoś Ci to tłumaczył. Jak napiszesz program sam to zrozumiesz działanie, gwarantuje Ci to.