/*
O MÉTODO EXPLICADO:
De f quero achar a raiz:
escolho g(x) de modo que f(x)=0 e g(x)=x
Dada f(x), com f(x_0) = 0, queremos encontrar um intervalo [a,b] tal que x_0 em [a,b] e uma função g tal que g(x_0) = x_0 e |g'(x)| < 1 pra todo x em [a,b].
1. Dada a função, plotar gráfico pra verificr comportamento
2. Definir intervalo no qual se encontra a raiz (definir [a,b])
3. Definir derivada da função
4. Aplicar os pontos limite do intervalo da raiz da função na derivada e ver o intervalo da derivada
5. Definir g(x) = (-1/M)*f(x) + x, sendo m o máximo valor no intervalo da derivada para que, desse modo, possamos limitar |g'(x)| < 1
6. Se f(x_0) = 0, então g(x_0) = -1/8*f(x_0) + x_0 = x_0, isto é, x_0 é a raiz da f (o que queremos) é ponto fixo de [; g ;]
Determinar os pontos fixos de uma função f(x) é determinar a interseção entre as curvas y=f(x) e y=x.
*/
#include <stdio.h>
#include <math.h>
#define eps 1e-6
double f(double x)
{
return (1./5*(6 - x*x + 4*x)); // g(x) vinda de f(x)
}
int main(void)
{
int i;
double x=1.5, y, delta; // x é o ponto de partida
do
{
y=f(x);
delta=fabs(y-x);
x=y;
printf("%lf \t %lf \n",x,f(x)); //g(x) vai convergir pra um ponto (x_0) -- seu ponto fixo -- que é raiz da função f(x)
} while (delta > eps);
return 0;
}
Comments