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


análise numerica, Trabalhos de Engenharia Elétrica

Trabalho de análise numerica que visa implementar, em linguagem qualquer, os métodos de newton, jordan, jacobi e bisseção

Tipologia: Trabalhos

2015

Compartilhado em 21/10/2015

vanessa-silva-86
vanessa-silva-86 🇧🇷

5

(2)

9 documentos

1 / 21

Toggle sidebar

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

Não perca as partes importantes!

bg1
1
UNIVERSIDADE FEDERAL DE OURO PRETO UFOP
Instituto de Ciências Exatas e Aplicadas ICEA
CEA148 Análise Numérica
Implementação de métodos de
análise numérica
Bárbara Julia de Oliveira
Guilherme Vettorazzi Vargas
Gustavo Carvalho Vinand
Vanessa Cecília da Silva
João Monlevade, 24 de junho de 2015
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Pré-visualização parcial do texto

Baixe análise numerica e outras Trabalhos em PDF para Engenharia Elétrica, somente na Docsity!

UNIVERSIDADE FEDERAL DE OURO PRETO – UFOP

Instituto de Ciências Exatas e Aplicadas – ICEA

CEA148 – Análise Numérica

Implementação de métodos de

análise numérica

Bárbara Julia de Oliveira

Guilherme Vettorazzi Vargas

Gustavo Carvalho Vinand

Vanessa Cecília da Silva

João Monlevade, 24 de junho de 2015

SUMÁRIO

  • INTRODUÇÃO
  • OBJETIVOS
  • DESENVOLVIMENTO
  • Sistemas Lineares
  • Método Jordan
  • Método Jacobi
  • Cálculo de Raizes de uma Função
  • Método Bisseção
  • Método de Newton
  • TESTES
  • Método Jordan
  • Método Jacobi
  • Método Bisseção
  • Método de Newton
  • CONCLUSÃO
  • REFERÊNCIAS BIBLIOGRÁFICAS

OBJETIVO

Este trabalho objetiva fornecer levantamento bibliográfico dos métodos de Jordan, Jacobi, Newton e de Bisseção para raízes. Além disso, será implementados para a solução de problemas matemáticos que permitem sua utilização utilizando o programa MATLAB.

DESENVOLVIMENTO

1) Sistemas Lineares Vários problemas encontrados nas áreas da ciências, tecnológia e econômica é o da solução numérica de um sistema linear Sn de n equações com n incógnitas. Por exemplo:

𝑛

𝑗= Podemos classificar um sistema linear quanto ao número de soluções em compatível (tem uma solução) e incompatível (não tem solução). Podemos ainda classificar os sistemas compatíveis em determinado (uma única solução) e indeterminado (mais de uma soluções). Abaixo vemos um exemplo de sistema linear.

𝑆 = { 𝑥 − 𝑦 = 0𝑥 + 𝑦 = 0

É possível observar que esse sistema é compatível porque tem uma solução. Além disso é determinada também pois apresenta uma única solução.

Metodo de Jordan

O método de Jordan consiste em transformar o sistema dado não apenas em um sistema triangular, mas sim em um sistema diagonal equivalente. Nesse método o pivô é utilizado para zerar todos os elementos de sua coluna (acima e abaixo de pivô). Em seguida pode-se encontrar a resolução de um sistema por esse método.

[

] → [

] → [

]

→ [

] → [

] = [

]

  1. Aplica X(0)^ do lado direito do sistema (1) obtendo um novo valor para x 1 e x 2. Pode-se dizer que foi escolhido x 1 (0)^ = x 2 (0)^ = 0; assim obtém-se os valores:
  2. São usados estes valores (x 1 (1), x 2 (1)^ ) novamente no sistema (1) obtendo os valores:
  3. O próximo passo será:
  4. Para os demais:

etc...

Percebe-se que os valores de X(i) vão se aproximando da solução exata, que é x 1 = 2 e x 2 = 1, a medida que é calculada novas iterações.

Resultados obtidos após x iterações:

Iterações X(k) 1 2,500 2, 2 1,500 -0, 3 2,625 1, 4 1,875 0, 5 2.156 1, ... ... Solução exata 2.000 1. Tabela 1

Pode-se observar que quanto mais iterações forem realizadas, mais próximo estará o vetor x da solução exata do sistema linear.

2) Cálculo de Raízes de uma função O cálculo da raiz de uma equação é dividido em duas fases:

 Isolamento da raiz: encontrar um intervalo [𝑎, 𝑏] que contenha apenas uma raiz de 𝑓(𝑥) = 0  Refinamento da raiz: a partir de um valor inicial 𝑥 0 ∈ [𝑎, 𝑏], gerar uma sequencia {𝑥 1 , 𝑥 2 , 𝑥 3 , … , 𝑥𝑘} que convirja para a raiz exata de 𝑓(𝑥) = 0. Uma equação algébrica de grau n tem exatamente n raízes, reais ou complexas, contando cada raiz de acordo com sua multiplicidade.

O método gráfico é a maneira mais simples de encontrar um intervalo de uma função. Ele consiste em esboçar a função no intervalo de interesse e estimar o intervalo a partir da tentativa e erro.

Determinando-se um intervalo [𝑎, 𝑏], uma função possui uma raiz ou um numero ímpar de raízes caso 𝑓(𝑎). 𝑓(𝑏) < 0. Quando 𝑓(𝑎). 𝑓(𝑏) > 0, então a função não tem raízes no intervalo escolhido ou tem um numero par de raízes.

Convergencia e erro da raiz

Uma vez determinado o intervalo [𝑎, 𝑏] de uma raiz ξ, será gerado uma seqüencia {𝑥 1 , 𝑥 2 , 𝑥 3 , … , 𝑥𝑘, … , 𝜉} ∈ [𝑎, 𝑏] que convirja para a raiz exata ξ de 𝑓(𝑥) = 0. A geração dessa seqüencia de valores é interrompida quando se atinge um critério de parada:

|𝑥𝑘 − 𝑥𝑘−1| ≤ 𝜀 |𝑥𝑘 − 𝑥𝑘−1| 𝑥𝑘^ ≤ 𝜀 |𝑓(𝑥𝑘)| ≤ 𝜀

Sendo 𝜀 o erro estabelecido.

TESTES

I) Método de Jordan Na implementação desse método, foi usado o programa computacional MATLAB para a solução de sistema lineares.

Inicialmente, todas as funções dentro do MATLAB deve começar declarando que m-file é uma função. Na primeira linha do código encontra-se as definições das função. Esta função resolve um conjunto de equações de primeira ordem, onde o principal coeficiente pode ser representando em uma matriz A tal que o sistema fique na forma de Ax = b. Nesta função deve=se entrar com o coeficiente da matriz A and a solução b.

Abaixo encontra-se a implementaçã completa do método Jordan.

function [x,err]= jordan_elim(A,b)

[n,m]=size(A); % size of matrix A

err =0;

x=zeros(n,1);

if n ~= m

disp('error: n~=m'); err = 1;

end

if length(b) ~= n

disp('erro: tamanho errado de b'); err = 2;

else

if size(b,2) ~= 1 b=b'; end

if size(b,2) ~= 1

disp('erro: b é uma matriz); err = 3; end

end

if err == 0

Aa=[A,b]; for i=1:n [Aa(i:n,i:n+1),err]=gauss_pivot(Aa(i:n,i:n+1)); if err == 0 Aa(1:n,i:n+1)=gauss_jordan_step(Aa(1:n,i:n+1),i); end end x=Aa(:,n+1);

end

A=0;

function A1=gauss_jordan_step(A,i)

[n,m]=size(A); % tamanho da matriz A

A1=A;

s=A1(i,1);

A1(i,:) = A(i,:)/s;

k=[[1:i-1],[i+1:n]];

for j=k

s=A1(j,1); A1(j,:)=A1(j,:)-A1(i,:)*s;

end

function [A1,err]=gauss_pivot(A)

[n,m]=size(A); % tamanho da matriz A

A1=A;

err = 0; % erro

if A1(1,1) == 0

check = logical(1); % logica(1) - VERDADE i = 1;

while check

for j=1:ne if(j~=i) soma = soma + mc(i,j)*VC(j)/A(i,i); end x(i) = (b(i)/mc(i,i)) - soma; end end if (abs(norm(x) - norm(VC))< E) parar = 0; else VC=x; end ni = ni + 1; end

disp('Resposta do sistema:'); disp(VC'); disp('Número de iterações utilizadas:'); disp(ni);

III) Método de Bisseção O método de bisseção deste trabalho foi implementado no programa de matemática computacional MATLAB, por oferecer linguagem que se adequa particularmente bem para os cálculos matemáticos exigidos para o presente método.

Para o cálculo, o usuário deverá entrar com 5 parâmetros:  A função para a qual será calculada a raíz;  O limite superior;  O limite inferior;  O valor do erro;  O numero máximo de iterações; É essencial que o usuário conheça ou possa estimar ao menos um dos intervalos das raízes para que o programa calcule corretamente o que lhe é pedido. Caso estes sejam

desconhecidos, o próprio usuário pode tentar estima-los através do próprio matlab, que fornece o comando plot(eixo, função), cuja finalidade é plotar uma função em um gráfico.

Conhecida a função e os limites, basta executar o código abaixo:

%Entrada de parâmetros. disp('Insira a função'); f = input('','s'); disp('Insira o valor do intervalo inferior'); intI = input(''); disp('Insira o valor do intervalo superior'); intS = input(''); disp('Insira o valor do erro'); erro = input(''); disp('Insira o numero máximo de iterações'); iteracao = input('');

%Auxiliar para contagem de iterações executadas i = 1;

%O while será executado enquanto o numero execuções for menor que o %numero de iterações while (i < iteracao)

x = (intS+intI)/2; %realiza a operação [a,b]/ % %se f(x) = 0 ou se satisfeita a condição de erro, imprime o % valor da raiz, o valor do erro de o numero de iterações % necessárias para se chegar ao valor, e termina a execução if (subs(f,x) == 0 || (intS - intI) < erro) fprintf('A raiz é: %d \n', x); fprintf('Erro atingido: %d\n', intS - intI); fprintf('Numero de iterações realizadas: %d\n', i); break end %se sinal de f(x) = sinal de f(intI), x recebe valor intI. Senão, %x = intS if sign(subs(f,x)) == sign(subs(f, intI)) intI = x; else intS = x; end i = i + 1; %incrementa 1 à variável auxiliar

end

Caso o intervalo não possua raizes ou o numero de iterações escolhido não tenha sido adequado, não será encontrado e nem exibido nenhum valor.

raíz foi calculda, ou Info=1 significa que, com a tolerância e número máximo de iterações fornecidas, a raíz nao pode ser encontrada.

Algoritmo Newton-Raphson

{ Objetivo: calcular a raíz de uma equação pelo método de Newton-Raphson}

Parâmetros de entrada x0, Toler, Itermax

{valor inicial, tolerância e número máximo de iterações}

Parâmetros de saída: Raiz, Iter, Info

{raíz, número gasto de interações e informação, sendo Info=0: raiz calculada e Info=1: não convergiu}

𝑥 ← 𝑥0; 𝐼𝑡𝑒𝑟 ← 0; 𝑑𝑒𝑙𝑡𝑎𝑥 ← 1 repita 𝐹𝑥 ← 𝑓(𝑥); 𝐷𝐹𝑥 ← 𝑓′(𝑥) {avaliar a função e sua derivada em x} escreva Iter, x, Fx, DFx se (abs(deltax)≤Toler e abs(Fx)≤Toler) ou DFx=0 ou Iter≥IterMax entao interrompa fimse

deltax←Fx/DFx; x←x – deltax; Iter←Iter + 1; escreva deltax fimrepita Raiz←x {teste de convergência} se abs(deltax)≤Toler e abs(Fx)≤Toler entao Info← 0 senao

Info← 1

fimse

fimalgoritmo

Implementação no MATLAB

function [Raiz, Iter, Info] = newton_raphson(funcao, derivada, x0, Toler, IterMax, Exibe)

% newton_raphson calcular raiz de equacao pelo metodo Newton-Raphson

%

% Introducao ao MATLAB

%

% Parametros de entrada:

% funcao: cadeia de caracteres que especifica a funcao,

% derivada: cadeia de caracteres que especifica a derivada,

% x0: valor inicial,

% Toler: tolerancia no calculo da raiz,

% IterMax: numero maximo de iteracoes e

% Exibe: opcao para exibir resultados: 0 nao exibe e 1 exibe.

% Parametros de saida:

% Raiz: zero da funcao,

% Iter: numero de iteracoes e

% Info: informacao, sendo

% Info=0: convergiu e

% Info=1: nao convergiu com os parametros dados.

%

x = x0; Iter = 0; deltax = 1;

De acordo com as saídas obtidas, concluímos que para a função dada, encontra-se uma raíz 1,07912, utilizando-se de seis iterações. Além disso, como obtemos Info = 0, concluímos que o método convergiu.

CONCLUSÃO

Como já foi dito é de grande interesse como engenheiro o conhecimento desses métodos para a resolução de variados problema práticos.

Analisando os métodos de sistema linear: Jordan e Jacobi, não se pode garantir qual método é melhor. Entretando observa-se que os método diretos são mais satisfatório na resolução de sistema de pequeno porte com matrizes de coeficientes densa. Já os mpetodos interativo são mais utilizados na resolução de matrizes de grande porte com matrizes de coeficientes do tipo esparso.

Comparando agora os outros dois métodos, o de Bisseção é um método menos eficiente quando comparado com o de Newton, porem este fato é atenuado pela sua simplicidade e facilidade de implementação, constituindo uma poderosa ferramenta para a análise numérica e para a solução de funções por engenheiros e matemáticos.