[C++][solved] zmodyfikowana metoda regula falsi

0

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

0

w końcu udało mi sięsamemu do tego dojść
sorry za zaśmiecanie forum ale myślałem że do tego nie dojdę

ps prosze adminów o zamknięcie tematu :)

a oto co mi wyszło (zmodyfikowana metoda 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,a1,b1,z1,z2;
	int i=0;

	if (f(x0)==0) return x0;
	else 
	if(f(a)*f(x0)<0) b=x0;
	else a=x0;
	a1=a;
	b1=b;
	z1=f(a);
	z2=f(b);
	do
	{	xp=x0;
		x0=a-z1*(b-a)/(z2-z1);
		if (f(x0)==0) return x0;
		else 
		if(z1*f(x0)<0) b=x0;
		else a=x0;
		if (a1==a)z1=z1/2;
		else if (b1==b)z2=z2/2;
	}while(fabs(x0-xp) >= eps);
	return x0;
	
}

double f(double x)
{
return sin(x);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1