Programa de bisección en C++
Resolver la ecuación significa encontrar todos los ceros de f(x).
Primero encuentre a, b, haga que f (a), f (b) sea diferente, lo que significa que debe haber un punto cero en el intervalo (a, b), y luego encuentre f [(a + b )/2],
Ahora supongamos que f(a)<0,f(b)>0,a<b
① Si f[(a+b)/ 2] =0, el punto es cero,
Si f[(a+b)/2]<0, entonces hay un cero en el intervalo ((a+b)/2, b), (a+ b)/2= >a, juzgado por ①continuar usando
el valor de la función del punto medio.
Si f[(a+b)/2] >0, entonces hay un cero en el intervalo (a, (a+b)/2), (a+b)/2=> b. Continúe utilizando el juicio de valor de la función del punto medio de ①.
De esta manera se puede alcanzar el punto cero de forma continua.
Me gusta encontrar: |f(x)|<10^-5 f(x)=2x^3-4x^2+3x-6
#include "iostream"
#include "stdio.h"
#include "math.h"
#define null 0
doble fx(doble) ; //función f(x)
void main()
{
double xa(null),xb(null),xc(null);
do
{
printf("Ingrese un rango x0 x1:");
std::cin>> xa >>xb; //Ingresa los valores de xa xb
printf("%f %f",xa,xb);
}
while (fx(xa)*fx(xb )>=0); //Determina si el rango de entrada contiene el valor de la función 0
do
{
if (fx((xc=(xa+xb)/2))*fx(xb)<0)
{
xa=xc;
}
else
{
xb=xc;
}
}
while(fx(xc)>pow(10.0,-5)||fx(xc)<-1*pow(10.0,-5));//determina si la raíz de x está en el rango de valores de x que están cerca del valor de la función 0 en el rango exacto
printf("/n is: %f",xc);
}
doble fx(doble x)
{p/p>
return(2.0*pow(x,3)-4.0*pow(x,2)+3*x -6.0) ;//p>
}