Ir ao conteúdo
  • Cadastre-se

Raiz Quadrada C


useredu
Ir à solução Resolvido por LNW,

Posts recomendados

Estou tentando fazer, um programa que encontre a raiz quadrada utilizando o método newton-raphson, que roda 10 vezes a formula:

 

yk+1 = 1/2 . (y + a/y)

y1 = 1

 

O código abaixo tem algum erro, pois sempre retorno 0 na saída, se alguém puder ajudar fico grato. Obrigado.

 

#include <stdio.h>#include <math.h> int main(void){    int k, j, a, b;    float y;     scanf("%d", &a);     for(k = 1; k > a; k++)    {        y = 1;        for(j = 1; 10 < j; j++)        {            y = (y + a/y)/2;        }    }        printf("%d", y);     return 0;}
Link para o comentário
Compartilhar em outros sites


#include <stdio.h>

#include <math.h>

float f(float x) {

   return pow(x,2)-5*x+6;

}

float der(float x) {

   return 2*x-5; // derivada de f(x).

}

int main() {

   float eps, x0, *iter; // erro, ponto inicial, vetor iterações.

   int i, numiter; // iteração atual, número de iterações.

   printf("Método de Newton-Rhapson para o zero da função f(x).\n");

   printf("Digite o erro: \n");

   scanf("%f",&eps);

   printf("Digite o número máximo de iterações?\n");

   scanf("%d", &numiter);

   printf("Digite o X0 inicial? \n");

   scanf("%f", &x0);

   // Alocar dinâmicamente memória para o vetor das iterações.

   iter = malloc(sizeof(float) * numiter);

   // Condições iniciais.

   iter[0] = x0;

   i = 0;

   // Iterações.

   while(f(iter) > eps) {

      // Excedeu o nosso limite de iterações.

      if(i > numiter) {

         printf("Não convergiu em %d iterações!!!\n", numiter);

         printf("Provavelmente f'(x) está errada.\n");

      

      }

      iter[i+1] = iter - f(iter)/der(iter);

      i++;

   }

   printf("X ~= %f ", iter);

   printf("\nForam feitas %d iterações.\n",i);

}

Link para o comentário
Compartilhar em outros sites

 

#include <stdio.h>#include <math.h>float f(float x) {   return pow(x,2)-5*x+6;}float der(float x) {   return 2*x-5; // derivada de f(x).}int main() {   float eps, x0, *iter; // erro, ponto inicial, vetor iterações.   int i, numiter; // iteração atual, número de iterações.   printf("Método de Newton-Rhapson para o zero da função f(x).\n");   printf("Digite o erro: \n");   scanf("%f",&eps);   printf("Digite o número máximo de iterações?\n");   scanf("%d", &numiter);   printf("Digite o X0 inicial? \n");   scanf("%f", &x0);   // Alocar dinâmicamente memória para o vetor das iterações.   iter = malloc(sizeof(float) * numiter);   // Condições iniciais.   iter[0] = x0;   i = 0;   // Iterações.   while(f(iter[i]) > eps) {      // Excedeu o nosso limite de iterações.      if(i > numiter) {         printf("Não convergiu em %d iterações!!!\n", numiter);         printf("Provavelmente f'(x) está errada.\n");            }      iter[i+1] = iter[i] - f(iter[i])/der(iter[i]);      i++;   }   printf("X ~= %f ", iter[i]);   printf("\nForam feitas %d iterações.\n",i);}

Valeu, mas eu queria mesmo fazer com ela rodando 10 vezes: Yk+1 = 1/2 . (Yk + A/Yk)

Link para o comentário
Compartilhar em outros sites

  • Solução

@useredu

 

Veja se é isso:

#include <stdio.h>#include <math.h>#define GUESS 10int main(void){    int x, n;    double y;    scanf("%d", &n);    y = GUESS;    for (x = 1; x <= 10; x++)    {        y = y - ((y*y - n) / (2.0 * y));    }    printf("= %.12f", y);    return 0;}

GUESS definido ali é o chute inicial..

 

 

 

LNW

Link para o comentário
Compartilhar em outros sites

@useredu

 

Veja se é isso:

#include <stdio.h>#include <math.h>#define GUESS 10int main(void){    int x, n;    double y;    scanf("%d", &n);    y = GUESS;    for (x = 1; x <= 10; x++)    {        y = y - ((y*y - n) / (2.0 * y));    }    printf("= %.12f", y);    return 0;}

GUESS definido ali é o chute inicial..

 

 

 

LNW

Já consegui fazer, mas esse ai está muito bom também. Valeu!!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...