Baixe o app para aproveitar ainda mais
Prévia do material em texto
ATIVIDADE CONTEXTUALIZADA – MÉTODOS COMPUTACIONAIS Nome Completo: ZSilva Matrícula:470XXXX Curso: Engenharia de Produção Escreva um programa em linguagem C que implemente um dos métodos estudados para encontrar raízes de equações e explique o motivo de ter escolhido esse método. No ponto c temos uma raiz da função. Na atividade contextualizada foi informada a seguinte equação de 4º grau: 𝑓𝑓(𝑥𝑥) = 𝑥𝑥4 + 12.6 𝑥𝑥3 − 155.7𝑥𝑥2 − 678.6𝑥𝑥 + 1863 RESPOSTA: Escolhido o Método do Meio Intervalo - Método da Bissecção, para resolução de equação. A função acima possui 4 raízes reais. As raízes dessa função estão situadas nos Seguintes intervalos: A[-19;-17]; B[-6;-4]; C[0; 3]; D[8; 10] Escolha dois intervalos, entre os 4 apresentados acima, para encontrar duas raízes por meio do programa em C escrito no item anterior. Use como critério de parada erro<0,0001. Informe o valor das duas raízes com 4 casas decimais e diga quantas iterações o método escolhido precisou para alcançar o resultado desejado. RESPOSTA: Escolhido os dois intervalos: B[-6;-4]; C[0; 3]; para encontrar a resolução duas raízes por meio dos programas em C escritos abaixo: Programa Escrito no Método do Meio Intervalo da Bissecção - Com a equação: 𝑓𝑓(𝑥𝑥) = 𝑥𝑥4 + 1 2. 6 𝑥𝑥3 − 155.7𝑥𝑥2 − 678.6𝑥𝑥 + 1863 - Para a char o resultado da Rai z utilizando o Intervalo B[-6;-4]; //Disciplina: Métodos Computacionais - D.20231.A //Professor: Adilson da Silva //Tutor: Alfredo Joao dos Santos Neto //Nome do aluno(a): ZSilva //Matrícula: 470XXXX //Data: 12/02/23 /* Name: Método da Bisseção em C Author: ZSilva Date: 12/02/23 Description: Programa encontra soluções para equações usando o método da Bisseção. */ #include <stdio.h> #include <stdlib.h> #include <math.h> #define l 1e-4 // amplitude final de [a:b] #define e 1e-4 // Erro tolerado ao falcular a f(x) ~ e #define Ni 10000 // numero max de interações float f(float x) { return(x*4 + 12.6*x*3 - 155.7*x*2 - 678.6*x + 1863); } int main(void) { float c = 0, a = -6, b = -4, x = 0; int cont = 0; printf("\nEntre com o ponto 'a' do intervalo [a,b]: "); scanf("%f",&a); printf("Entre com o ponto 'b' do intervalo [a,b]: "); scanf("%f",&b); c = b - a; x = (a + b)/2.0; while(c > l || fabs(f(x)) > e) { if((f(a)*f(x)) < 0.0) { b = x; } if((f(a)*f(x)) > 0.0) { a = x; } c = b - a; //amplitude do intervalo que contém a raíz. x = (a + b)/2.0; // função geradora de aproximações. cont ++; if(cont >= Ni) { break; } } printf("\n\n Raiz: %f \n Interacoes: %d \n f(%f) = %g \n\n\n",x,cont,x,f(x)); return 0; } Resultado da Raiz utilizando o Intervalo B[-6;-4] – Com o Programa Escrito no Método do Meio Intervalo - Método da Bissecção - Com a equação: 𝑓𝑓(𝑥𝑥) = 𝑥𝑥4 + 12.6 𝑥𝑥3 − 155.7𝑥𝑥2 − 678.6𝑥𝑥 + 1863 Entre com o ponto 'a' do intervalo [a,b]: -6 Entre com o ponto 'b' do intervalo [a,b]: -4 Raiz: -4.000000 Interacoes: 10000 f(-4.000000) = 5655.8 -------------------------------- Process exited after 8.225 seconds with return value 0 Pressione qualquer tecla para continuar. . . Abaixo seguem os prints do programa e do resultado a equação: 𝑓𝑓(𝑥𝑥) = 𝑥𝑥4 + 12.6 𝑥𝑥3 − 155.7𝑥𝑥2 − 678.6𝑥𝑥 + 1863 – Utilizando o intervalo B[-6;-4] mostrado na tela após o programa ser executado. Programa Escrito no Método do Meio Intervalo - Método da Bissecção - Com a equação: 𝑓𝑓(𝑥𝑥) = 𝑥𝑥4 + 12.6 𝑥𝑥3 − 155.7𝑥𝑥2 − 678.6𝑥𝑥 + 1863 - Para achar o resultado da Raiz utilizando o Intervalo C[0; 3]; //Disciplina: Métodos Computacionais - D.20231.A //Professor: Adilson da Silva //Tutor: Alfredo Joao dos Santos Neto //Nome do aluno(a): ZSilva //Matrícula: 470XXXX //Data: 12/02/23 /* Name: Método da Bisseção em C Author: ZSilva Date: 12/02/23 Description: Programa encontra soluções para equações usando o método da Bisseção. */ #include <stdio.h> #include <stdlib.h> #include <math.h> #define l 1e-4 // amplitude final de [a:b] #define e 1e-4 // Erro tolerado ao falcular a f(x) ~ e #define Ni 10000 // numero max de interações float f(float x) { return(x*4 + 12.6*x*3 - 155.7*x*2 - 678.6*x + 1863); } int main(void) { float c = 0, a = 0, b = 3, x = 0; int cont = 0; printf("\nEntre com o ponto 'a' do intervalo [a,b]: "); scanf("%f",&a); printf("Entre com o ponto 'b' do intervalo [a,b]: "); scanf("%f",&b); c = b - a; x = (a + b)/2.0; while(c > l || fabs(f(x)) > e) { if((f(a)*f(x)) < 0.0) { b = x; } if((f(a)*f(x)) > 0.0) { a = x; } c = b - a; //amplitude do intervalo que contém a raíz. x = (a + b)/2.0; // função geradora de aproximações. cont ++; if(cont >= Ni) { break; } } printf("\n\n Raiz: %f \n Interacoes: %d \n f(%f) = %g \n\n\n",x,cont,x,f(x)); return 0; } Resultado da Raiz utilizando o Intervalo C[0; 3] – Com o Programa Escrito no Método do Meio Intervalo - Método da Bissecção - Com a equação: 𝑓𝑓(𝑥𝑥) = 𝑥𝑥4 + 12.6 𝑥𝑥3 − 155.7𝑥𝑥2 − 678.6𝑥𝑥 + 1863 Entre com o ponto 'a' do intervalo [a,b]: 0 Entre com o ponto 'b' do intervalo [a,b]: 3 Raiz: 1.964775 Interacoes: 21 f(1.964775) = 3.79086e-005 -------------------------------- Process exited after 3.599 seconds with return value 0 Pressione qualquer tecla para continuar. . . Abaixo seguem os prints do programa e do resultado a equação: 𝑓𝑓(𝑥𝑥) = 𝑥𝑥4 + 12.6 𝑥𝑥3 − 155.7𝑥𝑥2 − 678.6𝑥𝑥 + 1863 – Utilizando o intervalo C[0; 3] mostrado na tela após o programa ser executado. A escolha do Método do Meio Intervalo - Método da Bissecção, foi pelo motivo de ser um simples e robusto, é um método de busca de raízes que bissecta repetidamente um intervalo e então seleciona um subintervalo contendo a raiz para processamento adicional. Também pelo motivo, dele ser usado frequentemente para obter uma primeira aproximação de uma solução, a qual é então utilizada como ponto inicial para métodos que convergem mais rapidamente. Nas condições do teorema do valor intermediário, o método da bissecção consiste em dividir o intervalo [a, b] ao meio, obtendo os subintervalos [a, m] e [m, b], e considerar como intervalo de busca o subintervalo em que f tem sinais opostos nos extremos. Referências Bibliográficas: Método do Meio Intervalo - Método da Bissecção http://www.dma.uem.br/kit/calculo-numerico-2/kit-bisseccao.pdf https://www.ufrgs.br/reamat/CalculoNumerico/livro-py/sdeduv- metodo_da_bissecao.html https://pt.wikipedia.org/wiki/M%C3%A9todo_da_bisse%C3%A7%C3%A3o https://github.com/luciano-mendes-jr Download do Dev-C++ 5.11 – 2016: https://sourceforge.net/projects/orwelldevcpp/ Alguns vídeos relacionados: - Linguagem C: https://youtu.be/VnH7OVFj_pA - Linguagem Python: https://youtu.be/S9uPNppGsGo - Linguagem Python: https://youtu.be/j94IGZmwtYI - Métodos Numéricos: https://youtu.be/OXPKrTqAXuw - Cálculo Numérico: https://youtu.be/e0AYbwCFUhU - Cálculo Numérico: https://youtu.be/ZHDaqY56AR8 https://pt.wikipedia.org/wiki/Algoritmo_para_encontrar_raiz https://pt.wikipedia.org/wiki/Intervalo_(matem%C3%A1tica) http://www.dma.uem.br/kit/calculo-numerico-2/kit-bisseccao.pdf https://www.ufrgs.br/reamat/CalculoNumerico/livro-py/sdeduv-metodo_da_bissecao.html https://www.ufrgs.br/reamat/CalculoNumerico/livro-py/sdeduv-metodo_da_bissecao.html https://pt.wikipedia.org/wiki/M%C3%A9todo_da_bisse%C3%A7%C3%A3o https://github.com/luciano-mendes-jr https://sourceforge.net/projects/orwelldevcpp/ https://www.youtube.com/watch?v=VnH7OVFj_pA&t=0s https://www.youtube.com/watch?v=S9uPNppGsGo&t=0s https://www.youtube.com/watch?v=j94IGZmwtYI&t=0s https://www.youtube.com/watch?v=OXPKrTqAXuw&t=0s https://www.youtube.com/watch?v=e0AYbwCFUhU&t=0s https://www.youtube.com/watch?v=ZHDaqY56AR8&t=0s
Compartilhar