luizaspan icon

[PROVA FSC_COMP] Raiz de equação: iteração ponto fixo

luizaspan | PRO | 09/25/15 01:35:31 AM UTC | 0 ⭐ | 730 👁️ | Never ⏰ | []
C |

1.31 KB

|

None

|

0 👍

/

0 👎

/*
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