Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double bisekcja(double a, double b, funptr funkcja, int ops, double est, int n, double tolerance)
- {
- double tmp, znak[2] = {0, 0}, f[2], x, ftmp;
- int i = 0;
- printf("\nMetoda Bisekcji.\n");
- f[0] = funkcja(a);
- f[1] = funkcja(b);
- x = (a + b) / 2; //przyblizenie pierwiastka
- tmp = (fabs(b) - fabs(a)) / 2; //estymator bledu
- if (f[0] < 0) znak[0] = -1;
- else if (f[0] > 0) znak[0] = 1;
- if (f[1] < 0) znak[1] = -1;
- else if (f[1] > 0) znak[1] = 1;
- if (znak[0] != znak[1])
- {
- switch(ops)
- {
- case 0:
- {
- cout << "Kryterium estymatora bledu\n";
- while (fabs(tmp) > est)
- {
- tmp = ( fabs(b) - fabs(a)) / 2; //estymator bledu
- ftmp = funkcja(tmp);
- x = (a + b) / 2; //kolejne przyblizenia
- if (ftmp > 0)
- {
- if (f[0] < 0) b = tmp;
- else if (f[1] < 0) a = tmp;
- }
- else if (ftmp < 0)
- {
- if (f[0] > 0) b = tmp;
- else if (f[1] > 0) a = tmp; //to jest sprawdzanie gdzie sa rozne znaki w wartosciach funkcji
- }
- cout<<"x"<<i++<<" = "<<x;
- cout<<"\ttmp = "<<tmp<<endl;
- }
- }break;
- case 1:
- {
- cout<<"Kryterium ograniczenia iteracji\n";
- while (i++ < n)
- {
- tmp = ( fabs(b) - fabs(a) ) / 2;
- ftmp = funkcja(tmp);
- x = (a + b) / 2;
- if (ftmp > 0)
- {
- if (f[0] < 0) b = tmp;
- else if (f[1] < 0) a = tmp;
- }
- else if (ftmp < 0)
- {
- if (f[0] > 0) b = tmp;
- else if (f[1] < 0) a = tmp;
- }
- cout<<"x"<<i<<" = "<<x<<endl;
- }
- }break;
- case 2:
- {
- cout << "Kryterium wiarygodnosci przyblizenia pierwiastka\n";
- while (fabs(funkcja(tmp)) > tolerance)
- {
- tmp = ( fabs(b) - fabs(a) ) / 2;
- ftmp = funkcja(tmp);
- x = (a + b) / 2;
- if (ftmp > 0)
- {
- if (f[0] < 0) b = tmp;
- else if (f[1] < 0) a = tmp;
- }
- else if (ftmp < 0)
- {
- if (f[0] > 0) b = tmp;
- else if (f[1] < 0) a = tmp;
- }
- cout<<"x"<<i++<<" = "<<x<<endl;
- }
- }break;
- default:
- {
- printf("Bledny numer, program zostanie zakonczony\n");
- exit(0);
- }break;
- }
- }
- return x;
- }
- int main()
- {
- double x;
- const double est = 1e-12, iteracje = 50, blad = 1e-12;
- x = bisekcja(0.0, 5.0, fun2, i, est, iteracje, blad); // i do iteracji po kazdej metodzie zakonczenia iteracji
- cout<<"x = "<<x<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement