potrzbuje napisac program wyznaczający zera funkcji metoda bisekcji dla funkcji \(\displaystyle{ 2x-tan(x)=0}\) (x rózne od zera). Funkcja ta ma asymptoty w \(\displaystyle{ \frac{\pi}{2}+k\pi, k \in Z}\), jednak kod poniżej uwzglednia te miejsca jako zero, a nie powinien. Nie potrafie tego uwzglednic i bardzo prosze o pomoc.
Oto kod z devC++:
Kod: Zaznacz cały
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
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 2*x - tan (x);
}
int main()
{
double a,b,x0,x1,fa,fb,f0;
cout << setprecision(8) // 8 cyfr po przecinku
<< fixed; // format stałoprzecinkowy
cout << "Podaj zakres poszukiwan pierwiastka:
";
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
fa = f(a); fb = f(b); x1 = a; x0 = b;
if(fa * fb > 0) cout << "
Funkcja nie spelnia zalozen
";
else
{
while(fabs(x1 - x0) > EPSX)
{
x1 = x0;
x0 = a - fa * (b - a) / (fb - fa);
f0 = f(x0);
if(fabs(f0) <= EPS0) break;
if(fa * f0 < 0)
{
b = x0; fb = f0;
}
else
{
a = x0; fa = f0;
}
}
if(x0==0)
cout << "
Rozwiazanie nie spelnia zalozen naszego zadania
";
else
cout << "
x = " << x0 << endl;
cout << "
";
}
system("pause");
return 0;
}