#include <stdio.h>
#include <stdlib.h>
float Abs( float x ){
x = ( x * x ) / -(x);
return x;
};
int main(){
float solucao = 0., xini = 0., xnovo = 0., Fxnovo = 0.,
Fdxnovo = 0., E = 0.;// Fdxini = derivada de Fxini
int k = 0;
printf( "Digite o x inicial: " );
scanf( "%f", &xnovo );
printf( "Digite a precisao: " );
scanf( "%f", &E );
do{
xini = xnovo;
Fxnovo = ( xini * xini * xini ) - 9. * xini + 3.; //inserir sua função principal aqui
Fdxnovo = 3. * ( xini * xini ) - 9.; //inserir a derivada da função principal aqui
xnovo = xini - ( Fxnovo / Fdxnovo );
k += 1;
printf( "\niteracao = %d", k );
printf( "\nxini = %f\nxnovo = %f", xini, xnovo );
} while( Abs( xnovo - xini ) >= E || Abs( Fxnovo ) >= E );
printf( "\n\nxnovo - xini = %f\n", xnovo - xini);
printf( "A solucao final é: %f\n", xnovo );
return 0;
}
Como posso melhorar este código a fim de que ele me retorne todas as raízes que estão em um determinado intervalo [a,b] ?
Essa função do código tem 3 raízes. Se eu coloco meu X inicial como 4, ele me retorna a raíz mais prox de 4, no caso 2,8169.
Queria aprimorá-lo de forma que eu pudesse indicar o intervalo e ele pudesse me retornar as raízes que estão dentro dele.
Por exemplo, se eu entrasse com x inicial igual a 4 e o x final igual a 0, ele deveria me retornar as raízes 2,8169 e 0,33761.
* tem que ser pelo metodo de newton