






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Relatorio de metodos numericos
Tipologia: Exercícios
1 / 12
Esta página não é visível na pré-visualização
Não perca as partes importantes!







Luiz Fernando Leite Turma: 6º- Engenharia Mecânica Professor Alex
**_1. Objetivo........................................................................................................................ 3
#include <math.h> // Função Primitiva double fx ( double x ) { return - pow(x,6) + pow (x,2) - (11.51 * x) + 6.9 ; } int main(void) ////////////////////////////////////// MAIN /////////////////// { double a, b, media; double tol = 0.000001; // Definição da precisão int n = 0 ; printf("OBTENCAO DE UMA RAIZ PELO METODO DA BISSECCAO\n\n") ; do { printf("Diga os valores de a e b para encontrar as raizes: "); scanf("%lf %lf",&a,&b); // Entrada do intervalo desejado if(fx(a)fx(b)>0) // Verificação da existencia de raiz no intervalo { printf("por favor,escolha um intervalo que contenha raiz!\n\n "); system("PAUSE"); // Reinicialização do programa } }while(fx(a)fx(b)>0); do{ // ~~ Aplicação do método ~~ // media=(a+b)/2; // Obtenção da média if((fx(media)*fx(a))<0) // Definição do novo parametro b=media; else a=media;
printf("\nx = %0.11lf || f(x) = %0.11lf || E = %0.10lf\n\n", media,fx(media),fabs(fx(media))); //Resultado de cada iteração n = n + 1 ; // Contagem de iterações }while(fabs(fx(media)) > tol); // Critério de parada printf("\n\nx final: %0.11lf || f(x): %.11lf\n\nIteracoes : %i\n", media,fx(media),n); // Resultado final system("pause"); return (0); } Abaixo estão imagens do resultado obtido: Imagem 1: resultado obtido método da bissecção.
return d; } main() { double x0,x1,erro,fx0,gx0; // Declaração de Variaveis double tol = 0.000001; // Determinação da Tolerancia int i=0; // Contador printf("Metodo de Newton Rapshon \n\n"); printf("Insira um chute inicial para x \n\n"); // Determinação do chute inicial. scanf("%lf",&x0); fx0 = fx(x0); // Calculo do valor de x0 na função fx gx0 = gx(x0);// Calculo do valor de x0 na função gx x1 = x0 -(fx0/gx0); // Calculo da Raiz erro = fabs(x1-x0); // Caluculo do erro i = i+1; // Calculo para o numero de interações printf("Resultado da interacao : %0.11lf \n\n", x1); while (erro>tol){ // Condição para encontrar a raiz. Os calculos irão se repetir enquanto o erro for maior que a tolerancia setada i = i+1;// calculo para o numero de interações x0 = x1; // Troca dos valores para continuação do metodo fx0 = fx(x0); // Calculos com os novos valores e raiz gx0 = gx(x0); x1 = x0 -(fx0/gx0); erro = fabs(x1-x0); // Calculo do novo erro para determinação da parada printf("Resultado da interacao : %0.11lf \n\n", x1); } printf("A raiz eh: %.11lf \n\n", x1); // Apresentação dos Resultados printf("O numero de interacaoes eh: %i \n\n", i);//
system ("pause"); return (0); } Abaixo está a imagem do resultado obtido: Imagem 3: resultado obtido método de Newton. 3.3. Método de Gauss Para o método de Gauss foi utilizado o seguinte sistema linear: X1 X2 X3 Resultado 4 -2,4 3,7 7, 1,2 -6,4 4,1 -19, 2,3 -5,1 10 71, Tabela 2: sistema utilizado para o método de Gauss Os valores encontrados para o X1, X2 e X3 foram: X1 X2 X -4,099891 11.028.156 13.707. O código utilizado foi: #include <stdio.h> #include <stdlib.h> #define N 3 int main (void){ int i, j, k; float fator, soma; float X[N];
// SUBSTITUICAO PROGRESSIVA for(i=N-2; i>=0; i--){ //Laço exterior se refere a linha que recebera os valores das variáveis já encontradas para descobrirmos as outras. Ela se inicia na penúltima linha e vai ate a primeira soma = 0; for(j=(i+1); j<N; j++){ //Laço interno se refere as colunas da linha i soma = soma + M[i][j]*X[j]; // soma todos os números da linha que ja tem o valor de x } X[i] = (M[i][N] - soma)/M[i][i]; // Calcula o x da coluna i } printf("\nResultado: " ); for(i=0; i<N; i++) printf("\nX%d = %f\n", i+1, X[i]); system("pause"); return (0); } Abaixo está a imagem do resultado obtido: Imagem 4: resultado obtido com o método de Gauss. 3.4. Método de Euler e Runge Kutta
Para esse método foi utilizada a função ei = vi5 + xi3. O código foi: program main implicit none double precision ti,xi,vi,tf,xf,vf double precision d1x,d2x double precision ei, dt double precision tmax, k, m integer i external d1x, d2x ! open (unit=6,file="result12.dat") !* initial conditions ti = 0. xi = 0. vi = 1. !* time step and max time dt = 0. tmax = 2. ei = vi5 + xi3! energy for a harmonic oscillator !* print the header and initial conditions write (6,) ' 2-nd order single ODE ' write (6,) ' Method: Runge-Kutta 4th order' write (6,) ' t x(t) v(t) energy' write (6,100) ti, xi, vi, ei do while(ti.le.tmax) tf = ti + dt call RK4D12(d1x,d2x,ti,xi,vi,tf,xf,vf) ei = vf5 + xf* write (6,100) tf, xf, vf, ei ti = tf xi = xf vi = vf end do 100 format(4f10.5) end program main Function d1x(t,x,v) !-------------------------------------- ! function dx/dt !-------------------------------------- implicit none double precision d1x, t, x, v d1x = v end Function d1x Function d2x(t,x,v) !-------------------------------------- ! function d2x/dt !-------------------------------------- implicit none