Red de conocimiento informático - Computadora portátil - Programa de bisección en C++

Programa de bisección en C++

En términos generales, para una función f(x), si hay un número real c tal que f(c)=0 cuando x=c, entonces x=c se llama punto cero de la función f(x).

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>

}