#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
// Definicja funkcji
double f(double x) {
return 0.25 * x * x - 2.0;
}
// Metoda bisekcji
double bisekcja(double a, double b, double eps) {
double c;
if (f(a) * f(b) >= 0) {
cout << "Warunek f(a)*f(b) < 0 nie jest spełniony!" << endl;
return NAN;
}
while ((b - a) / 2 > eps) {
c = (a + b) / 2;
if (f(c) == 0.0)
return c;
else if (f(a) * f(c) < 0)
b = c;
else
a = c;
}
return (a + b) / 2;
}
int main() {
double a = 2.0;
double b = 4.0;
double eps = 1e-6;
cout << "f(2) = " << f(a) << endl;
cout << "f(4) = " << f(b) << endl;
double zero = bisekcja(a, b, eps);
cout << "Miejsce zerowe (metoda bisekcji): x = " << zero << endl;
// Zapis danych do pliku
ofstream file("dane.dat");
for (double x = 0; x <= 5; x += 0.05) {
file << x << " " << f(x) << endl;
}
file.close();
// Wywołanie gnuplota
system("gnuplot -p -e \"plot 'dane.dat' using 1:2 with lines title 'f(x)=1/4x^2-2', \
0 with lines title 'y=0'\"");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxmc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIERlZmluaWNqYSBmdW5rY2ppCmRvdWJsZSBmKGRvdWJsZSB4KSB7CiAgICByZXR1cm4gMC4yNSAqIHggKiB4IC0gMi4wOwp9CgovLyBNZXRvZGEgYmlzZWtjamkKZG91YmxlIGJpc2VrY2phKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGVwcykgewogICAgZG91YmxlIGM7CgogICAgaWYgKGYoYSkgKiBmKGIpID49IDApIHsKICAgICAgICBjb3V0IDw8ICJXYXJ1bmVrIGYoYSkqZihiKSA8IDAgbmllIGplc3Qgc3BlxYJuaW9ueSEiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIE5BTjsKICAgIH0KCiAgICB3aGlsZSAoKGIgLSBhKSAvIDIgPiBlcHMpIHsKICAgICAgICBjID0gKGEgKyBiKSAvIDI7CgogICAgICAgIGlmIChmKGMpID09IDAuMCkKICAgICAgICAgICAgcmV0dXJuIGM7CiAgICAgICAgZWxzZSBpZiAoZihhKSAqIGYoYykgPCAwKQogICAgICAgICAgICBiID0gYzsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGEgPSBjOwogICAgfQoKICAgIHJldHVybiAoYSArIGIpIC8gMjsKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgYSA9IDIuMDsKICAgIGRvdWJsZSBiID0gNC4wOwogICAgZG91YmxlIGVwcyA9IDFlLTY7CgogICAgY291dCA8PCAiZigyKSA9ICIgPDwgZihhKSA8PCBlbmRsOwogICAgY291dCA8PCAiZig0KSA9ICIgPDwgZihiKSA8PCBlbmRsOwoKICAgIGRvdWJsZSB6ZXJvID0gYmlzZWtjamEoYSwgYiwgZXBzKTsKCiAgICBjb3V0IDw8ICJNaWVqc2NlIHplcm93ZSAobWV0b2RhIGJpc2VrY2ppKTogeCA9ICIgPDwgemVybyA8PCBlbmRsOwoKICAgIC8vIFphcGlzIGRhbnljaCBkbyBwbGlrdQogICAgb2ZzdHJlYW0gZmlsZSgiZGFuZS5kYXQiKTsKICAgIGZvciAoZG91YmxlIHggPSAwOyB4IDw9IDU7IHggKz0gMC4wNSkgewogICAgICAgIGZpbGUgPDwgeCA8PCAiICIgPDwgZih4KSA8PCBlbmRsOwogICAgfQogICAgZmlsZS5jbG9zZSgpOwoKICAgIC8vIFd5d2/FgmFuaWUgZ251cGxvdGEKICAgIHN5c3RlbSgiZ251cGxvdCAtcCAtZSBcInBsb3QgJ2RhbmUuZGF0JyB1c2luZyAxOjIgd2l0aCBsaW5lcyB0aXRsZSAnZih4KT0xLzR4XjItMicsIFwKICAgICAgICAgICAgMCB3aXRoIGxpbmVzIHRpdGxlICd5PTAnXCIiKTsKCiAgICByZXR1cm4gMDsKfQo=