Cześć,
mianowicie mam taki problem, w poleceniu napisane jest, aby wyznaczyć wszystkie miejsca zerowe funkcji c *(x * x) + 2 * x - d, gdzie 'c' to losowa liczba z zakresu, a 'd' to liczba wprowadzana z klawiatury od 5 do 14.99. Stąd moje pytanie jak wyznaczyć więcej niż 1 miejsce zerowe metodą bisekcji(równego podziału)? Póki co kod napisany przeze mnie znajduję jedynie 1 miejsce zerowe, szukałem odpowiedzi na to pytanie w sieci, niestety jej nie znalazłem. Proszę o nakierowanie mnie w jaki sposób mogę osiągnąć metodą bisekcji 2 miejsca zerowe w danej funkcji. Pozdrawiam
Kod:
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <random>
using namespace std;
double x1, x2, c, d, eps = 0.0001, b = 10, a=0;
int attempts=20;
double f(double x){
return c *(x * x) + 2 * x - d;
}
int main() {
mt19937 rnd(time(NULL));
uniform_real_distribution <double> losowa(2.00, 8.99); // przedzial losowanej cyfry
c = losowa(rnd);
cout << "Wylosowane c : " << c << endl;
cout << "Wprowadz d [liczba rzeczywista z zakresu 5.00 -> 14.99]: ";
cin >> d;
while (d > 14.99 || d < 5.00) {
cout << "Pozostalo " << attempts << " prob, wprowadz cyfre jeszcze raz: ";
cin >> d;
attempts--;
if (attempts == 0) {
exit(1);
}
}
while (abs(b - a) >= eps) {
x1 = (a + b) / 2;
if (f(x1) == 0.0) break;
else if (f(x1) * f(a) <= 0) b = x1;
else a = x1;
}
cout << "x1: " << x1 << endl;
//cout << "x2: " << x2 << endl;
return 0;
}