Buscar

Programas (C++) Cálculo Numérico - Método Bissecção, Secante e Falta Posição

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
 
double f (double a){
 //Calcula valores de f no ponto dado.
 double x;
 //x=(pow((pow(a,3)-2*pow(a,2)),1/3)+2/a+1);
 //x=(pow(a,2)-22);
 x=a*a-22;
 return x;
}
 
int main (){
 setlocale(LC_ALL, "Portuguese");
 printf ("ATIVIDADE 01 - Zeros de Funções (RAÍZES REAIS) \n\n Este projeto foi desenvolvido como objeto avaliativo da disciplina de Cálculo Numérico,\n Ministrada pelo Prof. Dr. Edson Araujo, na UNIVASF no período de 2016.1\n\n");
 double e=10e-15; //Precisão do teste (Margem de erro tolerável)
 printf ("\n Margem de erro tolerável: %.14lf\n", e);
 printf ("Insira número correspondente ao problema que deseja executar a resolução: \n 01 - Método da Falsa Posição Alterado \n 02 - Método da Secante \n");
 int a;
 scanf ("%d",&a);
 switch (a){
 case 01: { //Método da Falsa Posição Alterado
 printf ("\n>>Para o método da Falsa Posição ser executado, verifique a função presente no código<<");
 printf ("\n\n Insira intervalo da função que deseja analisar: \n(Separe o inicial do final usando enter ou 1 (um) espaço.)\n ");
 double a,b;
 scanf ("%lf %lf", &a, &b);
 //Identificando intervalos com raízes:
 double raiz[80][2], aa=a;
 double c;
 int j=0,i=0,k=0, it=0;
 printf ("\nIntervalos que possuem raiz:\n");
 for(i=0;aa+i<b; i++){
 c=a+1;
 if((f(a)*f(c))<=0){
 if(raiz[j-1][1]!=a){
 raiz[j][0]=a;
 raiz[j][1]=c;
 printf ("%.1lf a %.1lf\n", a, c);
 j++; 
 } 
 }
 a=c; 
 }
 //Fim identificação de Intervalos com Raízes, armazenados em Raiz[][] 
 //Início do método da Falsa Posição Alterado:
 k=j;it=0; double fc,fb,fa;
 int flag;
 for(j=0;j<k;j++){ //Altera-se o intervalo trabalhado
 a=raiz[j][0];
 b=raiz[j][1];
 fa=f(a);fb=f(b);
 it=0; c=0; flag=-1;
 do{
 c=(a*fb-b*fa)/(fb-fa);
 fc=f(c);
 it++;
 if(fc*fa<0){
 b=c;
 fb=fc;
 if(flag==0)
 fa*=0.5;
 flag=0;
 }else{
 a=c;
 fa=fc;
 if(flag==1)
 fb*=0.5;
 flag=1;
 }
 printf("\n C = %lf fc = %lf",c,fc);
 }while(fabs(f(c)) > e);
 printf ("\nIntervalo %d\nRaiz: %lf\n%d Interações", j+1,c,it);
 }
 if(j==0){
 printf("/nA função escolhida não possui raízes reais no intervalo escolhido");
 break;
 }
 break;
 } //Fim do método da Falsa Posição Alterado.
 	case 02:{ //Método da Secante
 printf ("\n>>Para o método da Secante ser executado, verifique a função presente no código<<");
 printf ("\n\n Insira intervalo da função que deseja analisar: \n(Separe o inicial do final usando enter ou 1 (um) espaço.)\n ");
 double a=0,b=0;
 scanf ("%lf %lf", &a, &b);
 //Identificando intervalos com raízes:
 double raiz[80][2], aa=a, c;
 int j=0,i=0,k=0, it=0;
 printf ("\nIntervalos que possuem raiz:\n");
 for(i=0;aa+i<b; i++){
 c=a+1.5;
 if((f(a)*f(c))<=0){
 if(raiz[j-1][1]!=a){
 raiz[j][0]=a;
 raiz[j][1]=c;
 printf ("%.1lf a %.1lf\n", a, c);
 j++; 
 } 
 }
 a=c;
 }
 //Fim identificação de Intervalos com Raízes, armazenadas em Raiz[][] 
 //Início do método da Secante: 
 k=j;j=0;
 double fa, fb;
 for(j=0;j<k;j++){ //Altera-se o intervalo trabalhado
 a=raiz[j][0];
 b=raiz[j][1];
 it=0;
 do{
 fa=f(a);
 fb=f(b);
 c=((a*fb)-(b*fa))/(fb-fa);
 a=b;
 b=c;
 it++;
 printf ("\nC= %lf F(c)=%lf", c, f(c));
 }while (fabs(a-b)>e);
 printf ("\nIntervalo %d \nRaiz: %lf, \n%d Interações", j+1, c, it);
 }
 break;
 }//Fim do Método da Secante.
	default: {
		printf ("\n\nOpção inválida, Reinicie o programa.");
		break;
		} 
 }
 return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais