Baixe o app para aproveitar ainda mais
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; }
Compartilhar