witam
mam do napisania zmodyfikowaną regule falsi [tzn modyfikacja polega na sprawdzeniu czy dany koniec przedziału pozostanie taki sam w 2 kolejnych iteracjach; jeśli tak to dokonuje się połowienia wartości funkcji w tym końcu przedziału] na podstawie napisanej wcześniej normalnej regula falsi:
#include<conio.h>
#include<iostream>
#include <cmath>
#include<ctime>
using namespace std;
double f(double x);
double regula(double a, double b, double eps);
int main()
{
double z;
z=regula(0.5,4,0.001);
cout<<z<<endl;
cin.get();
}
double regula(double a, double b, double eps)
{
double x0=a-f(a)*((b-a)/(f(b)-f(a)));
double xp;
if (f(x0)==0) return x0;
else
if(f(a)*f(x0)<0) b=x0;
else a=x0;
do
{ xp=x0;
x0=a-f(a)*(b-a)/(f(b)-f(a));
if (f(x0)==0) return x0;
else
if(f(a)*f(x0)<0) b=x0;
else a=x0;
}while(fabs(x0-xp) >= eps);
return x0;
}
double f(double x)
{
return sin(x);
}
problem pojawia sie gdy chce pomniejszyć wartość funkcji poprzez np
f(a)=f(a)/2
ponieważ pluje mi się o l-wartościowość
ma ktoś pomysl na rozwiązanie tego problemu ?
pozdrawiam