Methodo newton e raphson

1 resposta
I

OLÁ,
Estou tendo dificuldades em criar uma repetição que pega um valor anterior calculado pela repetição, e diminua do valor calculado subsequente.
Segue abaixo o meu código
Meu erro esta na linha onde começa o “for”.

#include
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
//FORMULA GERAL x= x - f(x)/f’(x)
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */

int main(int argc, char** argv) {

setlocale(LC_ALL, Portuguese);

int I, numiter;

float x, erro, error, aux;
printf("###########################################\n");
printf("           NEWTON E RAPHSON                \n");
printf("###########################################\n");

printf("Função fixa é: (f(x) = x-cos(x) )\n");
printf("A derivada da Função é: (f'(x)= 1 + sin(x))\n\n");

printf("Digite o número máximo de iterações?\n");
scanf("%d", &numiter);

printf("Entre com o valor inicial de (x) da função:\n");
scanf("%f",&x);

printf("Digite o valor do erro:\n");
scanf("%f",&erro);

for(I=1; I<=numiter; I++){
	aux = x-(x-cos(x))/(1+sin(x));
	
	if( I<1 , x=aux){
		erro1 = fabs (aux - x);
	}
		printf("Valor de X%d = %f\n",I,x);
		
		printf("ERRO CALCULADO :%f\n"),erro1;
		
	if(x >= erro){
		printf("O VALOR CONVERGIU\n\n");
		
		}else{
			printf("O Valor não convergiu\n\n");
		
	}
	
}
printf("O Valor da raiz é: %f\n",x);
system(PAUSE\n);

}

//Preciso o quanto antes de ajuda, pois é um trabalho de faculdade. Muito obrigado.

1 Resposta

J

Nossa, acho que já não da mais tempo pra fazer pra faculdade, mas espero que ainda seja útil de alguma forma :sweat_smile:

então: na linha for(I=1; I<=numiter; I++), acredito que tenha um erro na sintaxe! Geralmente se escreve o comando for dessa forma:
for (i = 1; i < variável; i++) {etc}

Tambem notei uns erros de sintaxe no if que vem em seguida ( <em><strong>if( I<1 , x=aux)</strong></em> )

Se você quer que nessa linha verifique se as duas condições são verdadeiras, ao invés de usar a vírgula, usa-se o operador lógico E (em C é <strong>&&</strong>)

E tambem se você quer saber se x é igual a aux, deve-se usar o operador lógico <strong>==</strong> para comparar (usando somente <em>=</em> ele atribui o valor de aux em x, e não compara <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngweat_smile.png?v=9" title=":sweat_smile:" class="emoji" alt=":sweat_smile:">)

então ficaria assim: <em>if( I<1 <strong>&&</strong> x <strong>==</strong> aux)</em>{etc}

Tem tambem o erro1, que não foi declarado em lugar nenhum (eu acho que era pra ser error)

Acho que arrumando essas coisinhas o programa pelo menos irá rodar sem apresentar mais erros. E digo isso pois acredito que tambem existe um erro de lógica nesse programa:

Veja, no for, você usa a variável I para identificar as iterações do cálculo, até aí tudo bem. Essa variável tem valor inicial 1, e vai incrementando até um valor determinado pelo usuário, e sem problemas até aqui. O problema acontece quando você utiliza o if: Para que o comando dentro do if aconteça (o que acredito que é a intenção de estar ali) a variável I deve ser menor que 1, o que é impossível, já que essa variável nunca terá valor menor que 1 até esse momento!

De tudo que eu vi desse código, acho que são essas coisas que tem dar uma olhada! Espero que tenha esclarecido e ajudado de alguma forma, apesar de ter visto isso bem atrasado :sweat_smile::sweat_smile:

Criado 29 de novembro de 2020
Ultima resposta 6 de abr. de 2021
Respostas 1
Participantes 2