Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Relatorio metodos numericos, Exercícios de Métodos Numéricos em Engenharia

Relatorio de metodos numericos

Tipologia: Exercícios

2020

Compartilhado em 15/10/2020

elisangela-aparecida-5
elisangela-aparecida-5 🇧🇷

1 documento

1 / 12

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
UNIVERSIDADE DE TAUBATÉ
30/10/2018
____________________________________________________________
IMPLEMENTAÇÃO DE MÉTODOS
NUMERICOS EM LINGUAGEM DE
PROGRAMAÇÃO
Luiz Fernando Leite
Turma: 6º- Engenharia Mecânica
Professor Alex
1
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Relatorio metodos numericos e outras Exercícios em PDF para Métodos Numéricos em Engenharia, somente na Docsity!

UNIVERSIDADE DE TAUBATÉ

____________________________________________________________

IMPLEMENTAÇÃO DE MÉTODOS

NUMERICOS EM LINGUAGEM DE

PROGRAMAÇÃO

Luiz Fernando Leite Turma: 6º- Engenharia Mecânica Professor Alex

ÍNDICE

**_1. Objetivo........................................................................................................................ 3

  1. Metodologia................................................................................................................. 3
  2. Resultados.................................................................................................................... 3_** 3.1. Método da Bissecção..................................................................................... 3 3.2. Método de Newton ........................................................................................ 6 3.3. Método de Gauss........................................................................................... 8 3.3. Método de Euler e Runge Kutta. ............................................................... 11

#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