Você está na página 1de 38

CENTRO FEDERAL DE EDUCAO TECNOLGICA DE

MINAS GERAIS

Mestrado em Engenharia Eltrica

THASA RODRIGUES LOBACK DURES

1a LISTA DE EXERCCIOS:
Erros e Sistemas Lineares

Belo Horizonte
07 de abril de 2015

1. Introduo
A soluo computacional de um dado problema desenvolvida atravs das
tcnicas de clculo numrico. Para que a aplicao desses tcnicas seja possvel, deve-se
seguir a sequncia de quatro etapas: definio do problema, modelagem matemtica,
soluo numrica e anlise dos resultados.
Ao definir um problema, espera-se chegar a uma determinada soluo atravs da
manipulao matemtica das variveis que influenciem essa soluo. Nessa primeira
etapa, so, ento, identificadas essas variveis e os possveis resultados para a soluo
do problema.
A modelagem matemtica consiste em se obter equaes que relacionem as
variveis conhecidas com os resultados possveis. J a soluo numrica, comea pela
escolha do mtodo numrico mais apropriado para as condies do problema. Passa-se,
ento, para a sua descrio computacional atravs da elaborao de um algoritmo, que,
por sua vez implementado numa das linguagens de programao existentes.
Finalmente, o programa editado em um arquivo e executado pelo computador.
Atravs da anlise dos resultados possvel verificar se houve adequao da
soluo numrica ao problema real, anteriormente definido. Observa-se tambm, nessa
etapa, os possveis erros que a modelagem matemtica e sua implementao pode
incorrer.
Este relatrio tem o objetivo de introduzir alguns mtodos na soluo
computacional de problemas de lgebra linear. Procura-se a implementao de
algoritmos prticos, com baixo custo computacional e com menor infringncia de erros.
Utiliza-se a linguagem de programao C++ para elaborao dos algoritmos e sua
compilao pelo programa DEV C/C++. Para melhor segurana em relao ao uso das
tcnicas apresentadas, comparou-se alguns resultados com os obtidos pelo programa
Matlab.

2. Exerccios Propostos
1) Desenvolva um algoritmo em C para realizar a multiplicao de duas matrizes.
No se esqueam de verificar se a multiplicao possvel antes de realiz-la.
Teste os resultados obtidos com aqueles gerados pelo MATLAB. Considerar
preciso simples e preciso estendida. Para comparar os resultados calcule a
norma 2 da matriz resultado. Comente!
2) Desenvolva um algoritmo em C para resolver sistemas lineares triangulares
(Superior e Inferior). Teste os resultados obtidos com aqueles gerados pelo
MATLAB. Considerar preciso simples e preciso estendida. Para comparar os
resultados calcule a norma 2 da matriz resultado. Comente!
3) Desenvolva um algoritmo em C para resolver sistemas lineares utilizando
eliminao de Gauss com pivoteamento. Como subproduto calcule o
determinante da matriz. Considerar preciso simples e preciso estendida. Para
comparar os resultados calcule a norma 2 da matriz resultado. Comente!
2

4) Apresente uma pesquisa sobre aplicao de sistemas lineares nas seguintes


reas: Eletromagnetismo, controle, SEP, modelagem de sistemas. Apresente no
mnimo 4 aplicaes por rea, faa uma breve descrio de cada uma delas
destacando as caractersticas das matrizes e os mtodos utilizados para a soluo
do sistema.
3. Resoluo
1 Exerccio:
A forma geral de representao de um nmero na atimtica de ponto flutuante
tem a seguinte notao cientfica:

onde os s so os dgitos da parte fracionria, tais que


B o valor da base (geralmente 2, 10 ou 16), o nmero de dgitos e um expoente
inteiro. Deste modo, um nmero de ponto flutuante tem trs partes: o sinal, a parte
fracionria (chamada de significando ou mantissa) e o expoente. Essas trs partes tm
um comprimento total fixo que depende do computador e do tipo de nmero: preciso
simples, dupla ou estendida.
A Tabela 1 mostra formato proposto pelo IEEE (Insitute of Electrical and
Electronics Engineers), utilizado pela maioria dos computadores do mundo:

Tabela 1: Formato IEE de ponto flutuante

Propriedade
Comprimento total
Bits na mantissa
Bits no expoente
Base
Expoente mximo
Expoente mnimo
Maior nmero
Menor nmero
Dgitos decimais

Simples
32
23
8
2
127
-126

Preciso
Dupla
64
52
11
2
1023
-1022

16

Estendida
80
64
15
2
16383
-16382

19

Neste primeiro exerccio proposto, o objetivo verificar se possvel a


multiplicao de duas matrizes dadas pelo usurio, realizar a multiplicao dessas
matrizes, tanto na preciso simples, quanto na estendida, calcular a norma-2 da matriz
para os dois casos e comparar os resultados com aqueles obtidos no Matlab.
3

Para que a multiplicao de matrizes seja possvel, basta que o nmero de


colunas da primeira matriz seja igual ao nmero de linhas da segunda matriz. O mtodo
utilizado para o clculo foi com base na relao das posies dos elementos de cada
matriz e suas equaes para a obteno da matriz resultante.
O algoritmo desenvolvido para a multiplicao de matrizes na preciso simples
mostrado a seguir:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main ()
{
//Variaveis com numeros de linhas e colunas da matriz 1
short int numeroLinhaMatriz1 = 0;
short int numerocolunasMatriz1 = 0;
//Variaveis com numeros de linhas e colunas da matriz 2
short int numeroLinhaMatriz2 = 0;
short int numerocolunasMatriz2 = 0;
//Entrada de dados com os numero de linhas e colunas das matrizes
printf ("****** Primeira Matriz ******\n");
printf ("Entre com o numero de linhas da matriz 1 (maximo 10): ");
scanf ("%hd", &numeroLinhaMatriz1);
printf ("Entre com o numero de colunas da matriz 1 (maximo 10): ");
scanf ("%hd", &numerocolunasMatriz1);
printf ("\n****** Segunda Matriz ******\n");
printf ("Entre com o numero de linhas da matriz 2 (maximo 10): ");
scanf ("%hd", &numeroLinhaMatriz2);
printf ("Entre com o numero de colunas da matriz 2 (maximo 10): ");
scanf ("%hd", &numerocolunasMatriz2);
if (numerocolunasMatriz1 == numeroLinhaMatriz2)
{
//Numero de elementos da matriz resultante
short int numeroElementosMatrizResultante = numeroLinhaMatriz1 * numerocolunasMatriz2;
printf ("\n\nNumero de elementos da matriz resultante: %hd\n", numeroElementosMatrizResultante);
//Alocando a primeira matriz
float matriz1[10][10];
//Alocando a segunda matriz
float matriz2[10][10];
int contLinha, contColuna;
float valor;
//Preenchedo a matriz 1
printf ("\n****** Entre com os valores da primeira matriz ******\n");
for (contLinha=0; contLinha<numeroLinhaMatriz1; contLinha++)

{
4

for (contColuna=0; contColuna<numerocolunasMatriz1; contColuna++)


{
valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
scanf ("%10f", &valor);
matriz1[contLinha][contColuna] = valor;
}
}

//Iniciando variaveis contadoras


contLinha = 0;
contColuna = 0;
//Preenchedo a matriz 2
printf ("\n****** Entre com os valores da segunda matriz ******\n");
for (contLinha=0; contLinha<numeroLinhaMatriz2; contLinha++)
{
for (contColuna=0; contColuna<numerocolunasMatriz2; contColuna++)
{
valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
scanf ("%10f", &valor);
matriz2[contLinha][contColuna] = valor;
}
}
//Define numero de linhas e colunas da matriz resultante
int numeroLinhaMatrizResultante = numeroLinhaMatriz1;
int numerocolunasMatrizResultante = numerocolunasMatriz2;
//Alocando a matriz resultante
float matrizResultante[10][10];
//Iniciando variaveis contadoras
contLinha = 0;
contColuna = 0;
int contQuebra = 0;
printf ("\n****** Resultado da multiplicacao das matrizes ******\n");
//Multiplicando matriz1 com a matriz2
for(contLinha = 0; contLinha < numeroLinhaMatriz1; contLinha++)
{
for(contColuna = 0; contColuna < numerocolunasMatriz2; contColuna++)
{
float soma = 0;
for(contQuebra = 0; contQuebra < numerocolunasMatriz1; contQuebra++)
{
soma = soma + matriz1[contLinha][contQuebra] * matriz2[contQuebra][contColuna];
}
matrizResultante[contLinha][contColuna] = soma;
}
}

contLinha = 0;
contColuna = 0;

for(contLinha = 0; contLinha < numeroLinhaMatrizResultante; contLinha++)


{
for(contColuna = 0; contColuna < numerocolunasMatrizResultante; contColuna++)
{
printf ("Linha %d coluna %d: %10f \n", contLinha, contColuna, matrizResultante[contLinha][contColuna]);
}
}
float soma = 0;
float normaMatriz = 0;
for(int w=0;w<numeroLinhaMatrizResultante;w++)
{
for(int z = 0;z<numerocolunasMatrizResultante;z++)
{
soma=soma+pow(matrizResultante[w][z],2);
}
}
//sqrt(parameter) function for square root, declared in math.h
normaMatriz=sqrt(soma);
printf("\n Norma da Matriz: %f\n",normaMatriz);
system("pause");
}
else
{
printf ("\n\n!!!! Erro\n");
printf ("ERRO!!!! No possvel multiplicar:\n Numero de colunas da primeira matriz diferente do
numero de linhas da segunda matriz\n\n");
system("pause");
}
return 0;
}

Coloca-se como observao que tanto o algoritmo anterior, como o que vm a


seguir, declaram matrizes correspondentes a sistemas de ordem mxima igual a 10. Para
sistemas de ordem superiores, basta trocar as declaraes das matrizes para as da ordem
desejada. Alm disso, o algoritmo para o clculo da norma 2 est incluso no algoritmo
acima. A seguir apesenta-se o mesmo algoritmo na preciso estendida (nica diferena
do algoritmo anterior). O cdigo da norma 2, embora tenha sido implementado na
prxima rotina computacional, foi omitido para evitar vs repeties.

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main ()
{
//Variaveis com numeros de linhas e colunas da matriz 1
int numeroLinhaMatriz1 = 0;
int numerocolunasMatriz1 = 0;
//Variaveis com numeros de linhas e colunas da matriz 2
int numeroLinhaMatriz2 = 0;
int numerocolunasMatriz2 = 0;
//Entrada de dados com os numero de linhas e colunas das matrizes
printf ("****** Primeira Matriz ******\n");
printf ("Entre com o numero de linhas da matriz 1 (maximo 10): ");
scanf ("%d",&numeroLinhaMatriz1);
printf ("Entre com o numero de colunas da matriz 1 (maximo 10): ");
scanf ("%d", &numerocolunasMatriz1);
printf ("\n****** Segunda Matriz ******\n");
printf ("Entre com o numero de linhas da matriz 2 (maximo 10): ");
scanf ("%d", &numeroLinhaMatriz2);
printf ("Entre com o numero de colunas da matriz 2 (maximo 10): ");
scanf ("%d", &numerocolunasMatriz2);
if (numerocolunasMatriz1 == numeroLinhaMatriz2)
{
//Numero de elementos da matriz resultante
int numeroElementosMatrizResultante = numeroLinhaMatriz1 * numerocolunasMatriz2;
printf ("\n\nNumero de elementos da matriz resultante: %d\n", numeroElementosMatrizResultante);
//Alocando a primeira matriz
long double matriz1[10][10];
//Alocando a segunda matriz
long double matriz2[10][10];
int contLinha, contColuna;
long double valor;
//Preenchedo a matriz 1
printf ("\n****** Entre com os valores da primeira matriz ******\n");
for (contLinha=0; contLinha<numeroLinhaMatriz1; contLinha++)
{
for (contColuna=0; contColuna<numerocolunasMatriz1; contColuna++)
{
valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
scanf ("%Lf", &valor);
matriz1[contLinha][contColuna] = valor;
}
}

//Iniciando variaveis contadoras


contLinha = 0;
contColuna = 0;
//Preenchedo a matriz 2
printf ("\n****** Entre com os valores da segunda matriz ******\n");
for (contLinha=0; contLinha<numeroLinhaMatriz2; contLinha++)
{
for (contColuna=0; contColuna<numerocolunasMatriz2; contColuna++)
{
valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
scanf ("%Lf", &valor);
matriz2[contLinha][contColuna] = valor;
}
}
//Define numero de linhas e colunas da matriz resultante
int numeroLinhaMatrizResultante = numeroLinhaMatriz1;
int numerocolunasMatrizResultante = numerocolunasMatriz2;
//Alocando a matriz resultante
long double matrizResultante[10][10];
//Iniciando variaveis contadoras
contLinha = 0;
contColuna = 0;
int contQuebra = 0;
long double soma = 0;
printf ("\n****** Resultado da multiplicacao das matrizes ******\n");

for(contLinha = 0; contLinha < numeroLinhaMatriz1; contLinha++)


{
for(contColuna = 0; contColuna < numerocolunasMatriz2; contColuna++)
{
soma = 0;
for(contQuebra = 0; contQuebra < numerocolunasMatriz1; contQuebra++)
{
soma = soma + (matriz1[contLinha][contQuebra]*matriz2[contQuebra][contColuna]) ;
}
matrizResultante[contLinha][contColuna] = soma;
}
}
contLinha = 0;
contColuna = 0;
for(contLinha = 0; contLinha < numeroLinhaMatrizResultante; contLinha++)
{
for(contColuna = 0; contColuna < numerocolunasMatrizResultante; contColuna++)
{
printf ("Linha %d coluna %d: %Lf\n", contLinha, contColuna, matrizResultante[contLinha][contColuna]);
}
}

}
else
{

printf ("\n\n!!!! Erro\n");


printf ("ERRO!!!! No possvel multiplicar:\n Numero de colunas da primeira matriz diferente do
numero de linhas da segunda matriz\n\n");
system("pause");
}
return 0;
}

2 Exerccio:

O algoritmo elaborado para esse exerccio pede que o usurio escolha se o


sistema ser triangular inferior ou superior. Para o sistema triangular inferior, os
elementos cuja posio da linha tem valor menor que a posio da coluna so
automaticamente preenchidos com zeros e o sistema solucionado pela expresso a
seguir:

0 x1 c1
0 x 2 c 2
.
.
.,. ... ...
l nn x cn
n

l11 0
l 21 l 22

... ...
l n1 l n 2
i 1

xi

ci lij x j
j 1

lij

, i 1,2,..., n.

Para o sistema triangular superior, ocorre o contrrio, os elementos cuja posio


da linha superior da coluna que so preenchidos com zero. Esse sistema , por sua
vez, solucionado a partir das seguintes equaes:

u11 u12 u1n x1 d1


0 u 22 u 2 n x 2 d 2

. .
... ... .,. ... ...
0 u nn x d
0
n n

di
xi

j i 1

uii

ij

xj
, i n, n 1,...,1.

A seguir so apresentados os algoritmos desenvolvidos para a resoluo de


sistemas triangulares superior e inferior, respectivamente, na preciso simples e
estendida. Da mesma forma que no exerccio anterior, a rotina para o clculo da norma
2 mostrada apenas no primeiro algoritmo e as matrizes declaradas corespondem a
sistemas de ordem mxima igual a 10. Para sistemas de ordem superiores, basta trocar
as declaraes das matrizes para as da ordem desejada.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main () 4 Exerccio:
{
int ordemDoSistema = 0;
char seSuperiorOuInferior;
//Ordem do sistema
printf ("Digite a ordem do sistema (maximo 10): ");
scanf ("%d", &ordemDoSistema);
//Verifica se o sistema e triangular superior ou inferior
printf ("\n\nO Sistema e triangular superior ou inferior?\n (Digite S para superior ou I para inferior): ");
scanf(" %c", &seSuperiorOuInferior);
//Entra com a matriz dos termos independentes
printf ("\n\n Entre com a matriz dos termos independentes\n");
float matrizTermosIndependentes[10];
float coeficiente;
for (int a = 0; a < ordemDoSistema; a++)
{
coeficiente = 0;
printf ("Termo %d: ", a);
scanf ("%f", &coeficiente);
matrizTermosIndependentes[a] = coeficiente;
}
int contLinha, contColuna;
//Alocando a matriz
float matriz[10][10];
float valor;
//Preenchedo a matriz dos coeficientes
figure(2) printf ("\n****** Entre com os valores da matriz dos coeficientes******\n");
subplot(3,2,1);
plot(t1A,p1A);
for (contLinha=0; contLinha<ordemDoSistema; contLinha++)
gridon
xlabel'Tempo
{ (s)';
ylabel'Potncia (W)';
contColuna<ordemDoSistema; contColuna++)
title'Potncia Ativafor
1a (contColuna=0;
noite';
{
subplot(3,2,2);
plot(t1A,q1A);
if(seSuperiorOuInferior == 'S' || seSuperiorOuInferior == 's')
gridon
xlabel'Tempo (s)';
{
ylabel'Potncia (VAr)';
title'Potncia Reativa 1a noite';
if(contLinha>contColuna)
subplot(3,2,3);
{
plot(t2A,p2A);
gridon
matriz[contLinha][contColuna]=0;
xlabel'Tempo (s)';
ylabel'Potncia (W)';
}
title'Potncia Ativa 2a noite';
else
{
valor = 0;

10

valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
scanf ("%f", &valor);
matriz[contLinha][contColuna] = valor;
}
}
else
{
if(seSuperiorOuInferior == 'S' || seSuperiorOuInferior == 's')
{
if(contLinha<contColuna)
{
matriz[contLinha][contColuna]=0;
}
else
{
valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
scanf ("%f", &valor);
matriz[contLinha][contColuna] = valor;
}
}
else
{
printf("ERRO!!! ESSE SISTEMA NO TRIANGULAR);
}
}
}
}
float matrizResultado[10];
float numerador;
float denominador;
int count = 0;
//Se for superior
if(seSuperiorOuInferior == 'S' || seSuperiorOuInferior == 's')
{
for (int i = ordemDoSistema-1; i >= 0; i--)
{
numerador = 0;
denominador = 0;
numerador = matrizTermosIndependentes[i];
for(int j = 0; j < count; j++)
{
numerador -= matriz[i][i+j+1] * matrizResultado[i +j+ 1];
}
denominador = matriz[i][i];
matrizResultado[i] = numerador / denominador;
count = count + 1;
}
}

11

else
{
if(seSuperiorOuInferior == 'I' || seSuperiorOuInferior == 'i')
{
for (int w = 0; w < ordemDoSistema; w++)
{
numerador = 0;
denominador = 0;
numerador = matrizTermosIndependentes[w];
for(int j = 0; j < count; j++)
{
numerador -= matriz[w][w - j -1] * matrizResultado[w - j - 1];
}
denominador = matriz[w][w];
matrizResultado[w] = numerador / denominador;
count = count + 1;
}
}
}
//Imprime matriz resultado
printf ("\n******Resultado******\n");
for (int k=0; k < ordemDoSistema; k++)
{
printf ("%f\n", matrizResultado[k]);
}
// Clculo da norma 2
float adiciona = 0;
float normaMatriz = 0;
for(int w=0;w<ordemDoSistema;w++)
{
adiciona=adiciona+pow(matrizResultado[w],2);
}
//sqrt(parameter) function for square root, declared in math.h
normaMatriz=sqrt(adiciona);
printf("\n Norma da Matriz: %f\n",normaMatriz);
system("pause");
}

Para a preciso estendida, tem-se:


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main ()
{
int ordemDoSistema = 0;
char seSuperiorOuInferior;
//Ordem do sistema
printf ("Digite a ordem do sistema (maximo 10): ");
scanf ("%d", &ordemDoSistema);
//Verifica se o sistema e triangular superior ou inferior
printf ("\n\nO Sistema e triangular superior ou inferior?\n (Digite S para superior ou I para inferior): ");
scanf(" %c", &seSuperiorOuInferior);

12

//Entra com a matriz dos termos independentes


printf ("\n\n Entre com a matriz dos termos independentes\n");
float matrizTermosIndependentes[10];
float coeficiente;
for (int a = 0; a < ordemDoSistema; a++)
{
coeficiente = 0;
printf ("Termo %d: ", a);
scanf ("%f", &coeficiente);
matrizTermosIndependentes[a] = coeficiente;
}
int contLinha, contColuna;
//Alocando a matriz
float matriz[10][10];
float valor;
//Preenchedo a matriz dos coeficientes
printf ("\n****** Entre com os valores da matriz dos coeficientes******\n");
for (contLinha=0; contLinha<ordemDoSistema; contLinha++)
{
for (contColuna=0; contColuna<ordemDoSistema; contColuna++)
{
if(seSuperiorOuInferior == 'S' || seSuperiorOuInferior == 's')
{
if(contLinha>contColuna)
{
matriz[contLinha][contColuna]=0;
}
else
{
valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
scanf ("%f", &valor);
matriz[contLinha][contColuna] = valor;
}
}
else
{
if(seSuperiorOuInferior == 'S' || seSuperiorOuInferior == 's')
{
if(contLinha<contColuna)
{
matriz[contLinha][contColuna]=0;
}
else
{
valor = 0;
printf ("Linha %d coluna %d: ", contLinha, contColuna);
}
}

13

scanf ("%f", &valor);


matriz[contLinha][contColuna] = valor;
}
}
else
{
printf("ERRO!!! ESSE SISTEMA NO TRIANGULAR");
}

}
}
}
float matrizResultado[10];
float numerador;
float denominador;
int count = 0;
//Se for superior
if(seSuperiorOuInferior == 'S' || seSuperiorOuInferior == 's')
{
for (int i = ordemDoSistema-1; i >= 0; i--)
{
numerador = 0;
denominador = 0;
numerador = matrizTermosIndependentes[i];
for(int j = 0; j < count; j++)
{
numerador -= matriz[i][i+j+1] * matrizResultado[i +j+ 1];
}
denominador = matriz[i][i];
matrizResultado[i] = numerador / denominador;
count = count + 1;
}
}
else
{
if(seSuperiorOuInferior == 'I' || seSuperiorOuInferior == 'i')
{
for (int w = 0; w < ordemDoSistema; w++)
{
numerador = 0;
denominador = 0;
numerador = matrizTermosIndependentes[w];
for(int j = 0; j < count; j++)
{
numerador -= matriz[w][w - j -1] * matrizResultado[w - j - 1];

14

for(int j = 0; j < count; j++)


{
numerador -= matriz[w][w - j -1] * matrizResultado[w - j - 1];
}
denominador = matriz[w][w];
matrizResultado[w] = numerador / denominador;
count = count + 1;
}

}
}
//Imprime matriz resultado
printf ("\n******Resultado******\n");
for (int k=0; k < ordemDoSistema; k++)
{
printf ("%f\n", matrizResultado[k]);
}
float soma = 0;
float normaMatriz = 0;
for(int z = 0;z<ordemDoSistema;z++)
{
soma=soma+pow(matrizResultado[z],2);
}
//sqrt(parameter) function for square root, declared in math.h
normaMatriz=sqrt(soma);
printf("\n Norma da Matriz: %d\n",normaMatriz);
system("pause");
return 0;
}

3 Exerccio:
.O mtodo da eliminao de Gauss consiste em transformar o sistema linear
original num outro sistema linear equivalente com matriz dos coeficientes triangular
superior, pois estes so de resoluo imediata. Dizemos que dois sistemas lineares so
equivalentes quando possuem a mesma soluo. O determinante de sistemas lineares
equivalentes so iguais.
Com (n 1) passos o sistema linear Ax = B transformado num sistema
triangular equivalente: Ux= C, o qual se resolve facilmente por substituies.
Obtm-se a soluo de Ax= B em trs etapas:
1 etapa: Matriz Completa
Consiste em escrever a matriz completa ou aumentada do sistema linear original.
15

2 etapa: Triangulao
Consiste em transformar a matriz A numa matriz triangular superior, mediante uma
seqncia de operaes elementares nas linhas da matriz.
3 etapa: Retro-substituio
Consiste no clculo dos componentes x1, x2, ..., xn, soluo de Ax= B, a partir da
soluo do ltimo componente (xn), e ento o substitui regressivamente nas equaes
anteriores.
Teorema: Seja Ax = B um sistema linear. Aplicando sobre as equaes deste sistema
uma seqncia de operaes elementares escolhidas entre:
i) Trocar a ordem de duas equaes do sistema;
ii) Multiplicar uma equao do sistema por uma constante no nula;
iii) Adicionar um mltiplo de uma equao a uma outra equao;
obtemos um novo sistema Ux= C e os sistemas Ax= B e Ux= C so equivalentes.
O algoritmo para o mtodo de eliminao de Gauss requer o clculo dos
multiplicadores:

a cada etapa

do processo. Sendo o coeficiente

chamado de piv.

Se o piv for nulo ou se o piv estiver prximo de zero uma ateno especial de
ve ser tomada, pois impossvel trabalhar com um piv nulo. E trabalhar com um piv
prximo de zero pode resultarem resultados totalmente imprecisos. Isto porque em
qualquer calculadora ou computador os clculos so efetuados com preciso finita, e
pivs prximos de zero so origem a multiplicadores bem maiores que a unidade que,
por sua vez, origina uma ampliaodos erros de arredondamento.
Para se contornar esses problemas deve-se adotar uma estratgia de
pivoteamento, ou seja, adotar um processo de escolha da linha e/ou coluna pivotal.
Esta estratgia consiste em:
i) no incio da etapa k da fase de escalonamento, escolher para piv o elemento de maior
mdulo entre os coeficientes:
.
ii) trocar as linhas k e se for necessrio.
A seguir so apresentados os algoritmos desenvolvidos para a resoluo de
sistemas lineares pelo mtodo de Gauss com pivotamento, na preciso simples e
estendida respectivamente. Para a resoluo do sistema triangular superior resultante,
16

utilizou-se os algoritmos j implementados no exerccio anterior e obteve-se a norma 2,


cuja rotina j foi evidenciada nos exerccios anteriores, para os dois tipos de preciso.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main ()
{
//Variaveis com numeros de linhas e colunas da matriz
unsigned int ordem;
//Escolha da ordem do sistema
printf ("****** Ordem do Sistema ******\n");
printf ("Entre com a ordem do sistema (maximo 10): ");
scanf ("%d", &ordem);
//Alocando as matrizes dos coeficientes e dos termos independentes
float mcoeficientes[10][10];
float mindependentes[10];
char S;
unsigned int x, y;
float valor;
//Preenchedo as matrizes do sistema
printf ("\n****** Entre com os valores da matriz dos coeficientes ******\n");
for (x=0; x<ordem; x++)
{
for (y=0; y<ordem; y++)
{
valor = 0;
printf ("Linha %d coluna %d: ", x, y);
scanf ("%10f", &valor);
mcoeficientes[x][y] = valor;
}
}
printf ("\n****** Entre com os valores da matriz dos termos independentes ******\n");
for (y=0; y<ordem; y++)
{
valor = 0;
printf ("Coluna %d: ", y);
scanf ("%10f", &valor);
mindependentes[y] = valor;
}
printf("\n");
// Pivoteamento
float pivo, a;
float guardapivo[10], novaindependentes[10], X[10];
float triangsuperior[10][10], m[10][10], b[10][10];
unsigned int linhapivo, k, j;
int pospivo[10];
unsigned int novaordem=ordem;

17

for (x=0; x<ordem; x++)


{
linhapivo=0;
a=fabs(mcoeficientes[0][0]);
// Identifica o piv e sua posio
for (y=0; y<novaordem; y++)
{
if(fabs(mcoeficientes[y][x])>a)
{
a=fabs(mcoeficientes[y][x]);
pivo=mcoeficientes[y][x];
linhapivo=y;
}
}
// ndices das linhas pivotais
pospivo[x]=linhapivo;
// Valores da matriz triangular superior
for (j=0; j<ordem; j++)
{
if(x <= j)
{
triangsuperior[x][j] = mcoeficientes[linhapivo][j];
}
else
{
triangsuperior[x][j] =0;
}
}
novaindependentes[x] = mindependentes[linhapivo];
// Clculo dos multiplicadores
for (k=0; k<novaordem; k++)
{
if(k!=linhapivo)
{
m[k][x]= 0 - (mcoeficientes[k][x]/pivo);
printf("\nmultiplicador %d%d: %f\n", k, x, m[k][x]);
for (j=0; j<ordem; j++)
{
mcoeficientes[k][j]= (m[k][x]*mcoeficientes[linhapivo][j])+ mcoeficientes[k][j];
}
mindependentes[k]= (m[k][x]*mindependentes[linhapivo])+ mindependentes[k];
}
}
// Modificao de Ordem
if(x==0)
{
novaordem = ordem - 1;
}
else

18

{
novaordem = novaordem - 1;
}
}
printf("\n\n************* MATRIZ TRIANGULAR SUPERIOR ******************\n");
for (x=0; x<ordem; x++)
{
for (y=0; y<ordem; y++)
{
printf ("Linha %d coluna %d: %10f \n", x, y, triangsuperior[x][y] );
}
}

printf("\n\n************* MATRIZ DOS TERMOS INDEPENDENTES ****************\n");


// Imprime a nova matriz dos termos independentes
for (j=0; j<ordem; j++)
{
printf("Termo %d: %f\n", j, novaindependentes[j]);
printf("Posicao do pivo: %d\n", pospivo[j]);
}
system("pause");
}

19

RESULTADOS
1 Exerccio:
O algoritmo rodado em Dev C++, com preciso simples, apresentou o seguinte
resultado:
****** Primeira Matriz ******
Entre com o numero de linhas da matriz 1: 5
Entre com o numero de colunas da matriz 1: 2
****** Segunda Matriz ******
Entre com o numero de linhas da matriz 2: 2
Entre com o numero de colunas da matriz 2: 7
Numero de elementos da matriz resultante e igual a: 35
****** Entre com os valores da primeira matriz ******
Linha 0 coluna 0: 3.145
Linha 0 coluna 1: 0.234
Linha 1 coluna 0: 0.002
Linha 1 coluna 1: 10.42
Linha 2 coluna 0: 8.44
Linha 2 coluna 1: 0.03
Linha 3 coluna 0: 6.12
Linha 3 coluna 1: 0.15
Linha 4 coluna 0: 0.014
Linha 4 coluna 1: 12
****** Entre com os valores da segunda matriz ******
Linha 0 coluna 0: 2.35
Linha 0 coluna 1: 6.36
Linha 0 coluna 2: 0.179
Linha 0 coluna 3: 0.098
Linha 0 coluna 4: 0.432
Linha 0 coluna 5: 9.32
Linha 0 coluna 6: 7.77
Linha 1 coluna 0: 4.32
Linha 1 coluna 1: 8.43
Linha 1 coluna 2: 0.086
Linha 1 coluna 3: 3.75

20

Linha 1 coluna 4: 0.734


Linha 1 coluna 5: 8.95
Linha 1 coluna 6: 7.33
****** Resultado da multiplicacao das matrizes ******
Linha 0 coluna 0: 8.401629
Linha 0 coluna 1: 21.974821
Linha 0 coluna 2: 0.583079
Linha 0 coluna 3: 1.185710
Linha 0 coluna 4: 1.530396
Linha 0 coluna 5: 31.405699
Linha 0 coluna 6: 26.151869
Linha 1 coluna 0: 45.019104
Linha 1 coluna 1: 87.853325
Linha 1 coluna 2: 0.896478
Linha 1 coluna 3: 39.075195
Linha 1 coluna 4: 7.649144
Linha 1 coluna 5: 93.277641
Linha 1 coluna 6: 76.394142
Linha 2 coluna 0: 19.963598
Linha 2 coluna 1: 53.931297
Linha 2 coluna 2: 1.513340
Linha 2 coluna 3: 0.939620
Linha 2 coluna 4: 3.668100
Linha 2 coluna 5: 78.929298
Linha 2 coluna 6: 65.798698
Linha 3 coluna 0: 15.029999

Linha 3 coluna 1: 40.187698


Linha 3 coluna 2: 1.108380
Linha 3 coluna 3: 1.162260
Linha 3 coluna 4: 2.753940

Linha 3 coluna 5: 58.380898


Linha 3 coluna 6: 48.651897
Linha 4 coluna 0: 51.872902
Linha 4 coluna 1: 101.249046

21

Linha 4 coluna 2: 1.034506


Linha 4 coluna 3: 45.001373
Linha 4 coluna 4: 8.814049
Linha 4 coluna 5: 107.530479
Linha 4 coluna 6: 88.068779
A norma da Matriz : 289.776093
Pressione qualquer tecla para continuar. . .

Pelo Matlab obtem-se os seguintes resultados para o resultado da multiplicao e


sua norma:
A =
3.1450

0.2340

0.0020

10.4200

8.4400

0.0300

6.1200

0.1500

0.0140

12.0000

2.3500

6.3600

0.1790

0.0980

0.4320

9.3200

7.7700

4.3200

8.4300

0.0860

3.7500

0.7340

8.9500

7.3300

8.4016

21.9748

0.5831

1.1857

1.5304

31.4057

26.1519

45.0191

87.8533

0.8965

39.0752

7.6491

93.2776

76.3941

19.9636

53.9313

1.5133

0.9396

3.6681

78.9293

65.7987

15.0300

40.1877

1.1084

1.1623

2.7539

58.3809

48.6519

51.8729

101.2490

1.0345

45.0014

8.8140

107.5305

88.0688

B =

Resultado =

norma =
287.1871
>>

No houve diferenas significativas da preciso simples para a dupla. Observouse que com uma maior preciso, o comprimento da matriz fica levemente inferior.

22

2 Exerccio:
O algoritmo rodado em Dev C++, com preciso simples, apresentou o seguinte
resultado para um sistema triangular superior:
Digite a ordem do sistema (maximo 10): 3
O Sistema e triangular superior ou inferior?
(Digite S para superior ou I para inferior): S
Entre com a matriz dos termos independentes
Termo 0: 1.4142135
Termo 1: 3.1415926
Termo 2: 1.7320508

****** Entre com os valores da matriz dos coeficientes******


Linha 0 coluna 0: 3.1415926
Linha 0 coluna 1: 2.7182818
Linha 0 coluna 2: 1.4142135

Linha 1 coluna 1: 1.4142135


Linha 1 coluna 2: 1.7320508
Linha 2 coluna 2: 2.7182818

******Resultado******
-1.083555
1.441051
0.637186

Norma da Matriz: 1.9112257


Press any key to continue . . .

A mesma implementao feita em Matlab (preciso double):


>> A
A =
3.1416
0
0

2.7183

1.4142

1.4142

1.7321

2.7183

23

>> B
B =
1.4142
3.1416
1.7321
>> c=inv(A)*B
c =
-1.0836
1.4411
0.6372
>> norm(c)
ans =
1.9123

Para esse exemplo, observa-se que a preciso simples obtem praticamente os


mesmos valores que a preciso double. O resultado para um sistema triangular inferior
com preciso simples apresentado a seguir:
Digite a ordem do sistema (maximo 10): 3
O Sistema e triangular superior ou inferior?
(Digite S para superior ou I para inferior): I
Entre com a matriz dos termos independentes
Termo 0: 1.4142135
Termo 1: 3.1415826
Termo 2: 1.7320508
****** Entre com os valores da matriz dos coeficientes******
Linha 0 coluna 0: 3.1415926
Linha 1 coluna 0: 2.7182818
Linha 1 coluna 1: 1.4142135
Linha 2 coluna 0: 1.4142135
Linha 2 coluna 1: 1.7320508
Linha 2 coluna 2: 2.7182818

******Resultado******
0.450158
1.356178
-0.461151
Norma da Matriz: 1.501507
Press any key to continue . . .

24

A implementao do mesmo sistema triangular inferior, feita em Matlab


(preciso double):
A=[3.1415926 0 0; 2.7182818 1.4142135 0; 1.4142135 1.7320508 2.7182818]
A =
3.1416

2.7183

1.4142

1.4142

1.7321

2.7183

>> B=[1.4142135; 3.1415826;1.7320508]


B =
1.4142
3.1416
1.7321

>> C=inv(A)*B
C =
0.4502
1.3562
-0.4612
>> norma=norm(C)
norma =
1.5015

Mais uma vez os resultados da preciso simples e dupla foram os mesmos.

3 Exerccio:
O mtodo de Gauss com pivoteamento foi rodado e apresentou os seguintes
resultados para preciso simples:
****** Ordem do Sistema ******
Entre com a ordem do sistema (maximo 10): 3

****** Entre com os valores da matriz dos coeficientes ******


Linha 0 coluna 0: 1
Linha 0 coluna 1: -3
Linha 0 coluna 2: 2
Linha 1 coluna 0: -2
Linha 1 coluna 1: 8
Linha 1 coluna 2: -1
Linha 2 coluna 0: 4
Linha 2 coluna 1: -6
Linha 2 coluna 2: 5

25

****** Entre com os valores da matriz dos termos independentes ******


Coluna 0: 11
Coluna 1: -15
Coluna 2: 29

multiplicador 00: -0.250000

multiplicador 10: 0.500000

multiplicador 01: 0.300000


************* MATRIZ TRIANGULAR SUPERIOR ******************
Linha 0 coluna 0:

4.000000

Linha 0 coluna 1:

-6.000000

Linha 0 coluna 2:

5.000000

Linha 1 coluna 0:

0.000000

Linha 1 coluna 1:

5.000000

Linha 1 coluna 2:

1.500000

Linha 2 coluna 0:

0.000000

Linha 2 coluna 1:

0.000000

Linha 2 coluna 2:

1.200000

************* MATRIZ DOS TERMOS INDEPENDENTES ****************


Termo 0: 29.000000
Termo 1: -0.500000
Termo 2: 3.600000

******************* VALOR DO DETERMINANTE *************************


Valor do determinante: -24.000000
Press any key to continue . . .

Digite a ordem do sistema (maximo 10): 3


O Sistema e triangular superior ou inferior?
(Digite S para superior ou I para inferior): S
Entre com a matriz dos termos independentes
Termo 0: 29
Termo 1: -0.5
Termo 2: 3.6
****** Entre com os valores da matriz dos coeficientes******
Linha 0 coluna 0: 4
Linha 0 coluna 1: -6

26

Linha 0 coluna 2: 5
Linha 1 coluna 1: 5
Linha 1 coluna 2: 1.5
Linha 2 coluna 2: 1.2
******Resultado******
2.000000
-1.000000
3.000000

Norma da Matriz: 3.741657


Press any key to continue . . .

4 Exerccio: Pesquisa sobre aplicao de sistemas lineares nas reas de


Eletromagnetismo, SEP, controle e modelagem de sistemas
4.1. Eletromagnetismo
Mtodo das Diferenas Finitas
O Mtodo das Diferenas Finitas apresenta solues diretas para campos
eltricos e magnticos nos pontos de uma malha regular formada pela discretizao de
uma superfcie ou volume de um objeto. Para tanto, divide-se o domnio de clculo em
diversos pontos calcula-se o campo eltrico correspondente a cada ponto a partir dos
valores de pontos adjacentes.
Essa tcnica numrica possibilita resolver situes que abrangem equaes
diferenciais parciais (EDPs), que so equaes envolvendo uma funo de variveis
independentes e suas derivadas. Assim, essa viabilidade permite resolver equaces
como as de Poisson e as de Laplace, delimitando-se um domnio por condies de
contorno e/ou condies iniciais.
Para se determinar o campo eltrico ou potencial eltrico, em muitos casos, so
utilizados a Lei de Coulomb, ou a Lei de Gauss quando a distribuio de cargas
conhecida, ou utilizar a equao que relacion intensidade do campo eltrico direo
contrria do divergente do potencial, quando esse conhecido em uma regio. No
entanto, na maioria das situaes prticas, tais parmetros no so conhecidos.
Ento para essas situaes, onde so apenas conhecidas as condies
eletrostticas em algumas fronteiras numa determinada regio, em que se deseja obter o
campo eltrico e o potencial eltrico ao longo de toda a regio em questo, so
27

utilizados usualmente a Equao de Poisson ou a de Laplace ou, ainda, o metodo das


imagens.
A idia bsica discretizar as equaes de Maxwell no espao e no tempo,
obtendo-se os campos a partir da resoluo contnua das mesmas, com base nos valores
dos campos adquiridos em iteraes anteriores de maneira alternada.
O sistema de equaes vetoriais de Maxwell mostrado a seguir:

O sistema de coordenadas cartesianas utilizado para expandir o sistema em seis


equaes a derivadas espaciais e temporais:
(

As tcnicas de diferenas finitas no domnio do tempo (FDTD) so baseadas em


aproximaes numricas, permitindo transformar equaes diferenciais em equaes
por diferenas finitas. A obteno destas equaes efetuada a partir da expanso em
sries de Taylor. Na prtica, a srie truncada, o que implica na insero de um erro de
aproximao.
Considera-se, por exemplo, uma funo qualquer dentro de um espao
cartesiano discretizado
, discretizada tambm no tempo
:

28

Onde:

so incrementos espaciais;

o incremento temporal; e , o

nmero da iterao. Pode-se utilizar a aproximao mostrada abaixo, que demonstrada


na figura 4.1.
(

Figura 4. 1: Aproximao por diferenas finitas.


Fonte: Silveira, Jony L., UFSC, 2002

Tm-se, portanto:

Onde:

)+

)+

)+

o erro introduzido por truncagem.

E para o tempo:

Para aplicar as equaes 4.5 e 4.6 tem-se que discretizar a regio com elementos
regulares. O sistema de coordenadas pode ser cartesiano ou polar, e os elementos
quadrados, retangulares ou hexagonais. A figura 4.2 ilustra a clula introduzida por Yee
para discretizao tridimensional.

29

Figura 4. 2: Disposio dos campos E e H na clula de Yee.


Fonte: Silveira, Jony L., UFSC, 2002

importante observar que alm de estarem defasados no espao as componentes


sw campo eltrico e magntico sero, por fora da equao 4.6, calculadas em passos de
) ,
temmpo alternados. Assim, o campo magntico ser calculado a cada (
enquanto o campo eltrico calculado a cada
.
Para a resoluo de uma equao de Laplace ou de Poisson, deve-se dividir o
domnio em uma grade de maneira similar ao cubo de Yee. Os ns da grade da
extremidade da regio so prefixados pela condio de contorno e so chamados de ns
fixos,enquanto os ns internos sao denominados de pontos livres. Em seguida, obtm-se
as aproximaes por diferencas finitas para equacao diferencial de Poisson, pela qual
possvel determinar o potencial o potencial em todos os pontos livres.
Abaixo, mostra-se a aplicao das equaes 4.5 e 4.6 na clula de Yee para a
compontente do campo magntico (Eq. 4.7) e eltrico (Eq. 4.8). Encontra-se as
demais componentes de forma anloga, pela mesma aplicao da aproximao por
diferenas finitas s outras equaes 4.2.
(

(
)+

30

(
(

)
)

) ]

O mtodo de diferenas finitas permite realizar clculos em geometrias


complexas e materiais com configuraes no homogneas lineares e no lineares. No
entanto, existem alguns inconvenientes ligados a esta tcnica:
Para garantir a estabilidade do mtodo devemos garantir que:

,
onde:
a mxima velocidade de fase;
As condies de fronteira devem ser usadas convenientemente para simular a
extenso da soluo no infinito.
Existem, porm,vrias tcnicas aplicveis s fronteiras de modo a simular o
espao aberto. O mtodo das diferenas finitas um mtodo de resoluo de problemas
que englobam equaes diferenciais parciais. Tais problemas so definidos
univocamente por trs caractersticas: seja por uma equao diferencial parcial, como
o caso das equaes de Laplace ou de Poisson; seja pela delimitao de um domnio; ou
at mesmo por condies de contorno e/ou por condies iniciais.
O mtodo de diferenas finitas um dos mais populares na anlise de problemas
no domnio do tempo. Dentre as vrias aplicaes do mtodo, em engenharia eltrica,
destacam-se:

Obteno das caractersticas de espalhadores (scattering);


Anlise de antenas e microstrips;
Avaliao dos efeitos da radiao de microondas em organismos vivos;
Anlise de problemas de interferncia eletromagntica (EMI);
Anlise de propagao em cavidades ressonantes, guias de onda;
Anlise da propagao eletromagntica em fibras opticas, etc.

Como aplicao do mtodo descreve-se apenas a obteno das caracterstias de


espalhadores. O fenmeno de espalhamento eletromagntico pode ser entendido como o
campo gerado a partir da interao entre uma onda eletromagntica viajante e um
obstculo que a intercepta. Caracteriza-se pela influncia dos campos eltrico e
magntico incidentes (Ei ,Hi ) em um corpo, designado objeto espalhador ou,
simplesmente,e spalhador, nele induzindo correntes em sua superfcie ou volume. As
correntes no espalhador variam no tempo e o faz, por sua vez, exercer o papel de uma
antena que irradia campos eletromagnticos espalhados (E s ,Hs ) . Dessa forma, o
31

campoeletromagntico total (Et ,Ht ) se torna uma composio de campos espalhados e


campos incidentes, conforme mostrado a seguir:

A equao 4.9 mostra que o campo eltrico total dado pela soma do campo
eltrico incidente com o campo eltrico espalhado. Da mesma forma, por meio da
equao 4.10, tem-se que o campo magntico total a soma dos campos magnticos
incidente e espalhado.
Em uma situao em que o espao destitudo de corpos, tem-se que toda
medida de campo realizada, em qualquer que seja o ponto desse espao, indica um valor
de campo igual ao campo original produzido pela antena. Entretanto, em situaes em
que um espalhador esteja presente, o objeto iluminado pelos campos eletromagnticos
incidentes e h interao entre estes campos e os campos espalhados, caracterizando
assim, o fenmeno do espalhamento eletromagntico. Assim, tem-se que duas entidades
distintas esto envolvidas neste fenmeno: os campos eletromagnticos e o espalhador.
Considerando-se uma regio fonte de campo eletromagntico e outra onde se
situa um objeto espalhador, o fenmeno de espalhamento ocorre nessa segunda regio.
As influncias dos campos incidentes sobre o espalhador so computadas por meio de
expresses analticas para os campos incidentes originais. Dessa maneira, para o clculo
do campo eletromagntico total, necessrio somente encontrar a parcela do campo
espalhado. Tem-se, tambm, que as ondas eletromagnticas geradas pela fonte
propagam-se pelo espao livre 0 e que a geometria do
espalhador e seu material podem ser considerados arbitrrios.
O espalhamento eletromagntico pode ser modelado matematicamente atravs
das
equaes de campo eletromagntico e das condies de contornos inerentes ao
problema tratado. As equaes de campo, eltrico e magntico, so obtidas atravs das
equaes de Maxwell, conforme demonstrado na explicao do Mtodo das Diferenas
Finitas.
Mtodo Sem Malhas
Diferentemente dos mtodos baseados em malhas, os mtodos sem malha so
caracterizados pelo uso de um conjunto de ns espalhados pelo domnio do problema,
ao invs de uma malha ou grid. Um dos gargalos computacionais desses mtodos o
processamento dos ns, cujo tempo muito grande quando comparado, por exemplo,
com o Mtodo de Elementos Finitos (FEM). Apesar disso, o processamento de cada n
pode ser feito de maneira independente, tornando o processo facilmente paralelizvel. .
Cada n contribui com uma linha do sistema, no interferindo na contribuio dos
demais ns.

32

Embora existam vrios tipos de mtodos sem malha, discute-se aqui em maiores
detalhes o MLPG (Meshless Local Petrov Galerkin method) para a resoluo de
problemas eletromagnticos, principalmente problemas estticos (eletrostticos e
magnetostticos). Esse mtodo foi escolhido por ser um mtodo bastante flexvel e por
ser considerado um mtodo verdadeiramente sem malha.
O conjunto de equaes simplificadas para os casos eletrosttico e
magnetosttico combinadas com as condies de contorno so denominados forma forte
para os problemas eletrostticos e magnetostticos.
Como no existe uma malha para dar conectividade aos ns, um desafio para
esse mtodo determinar com eficincia quais ns pertencem vizinhana de um
determinado n. Para resolver esse problema, utiliza-se uma rvore de busca
denominada kd-tree. Outra dificuldade dos mtodos sem malha est na imposio das
condies de contorno de Dirichlet quando as funes de forma no apresentam a
propriedade do delta de Kronecker, o que o caso para funes de forma construdas a
partir do mtodo de mnimos quadrados mveis (MLS).
No FEM, o processo de gerao da malha pode ser extremamente custoso e no
apresenta a facilidade de ser paralelizado. Alm disso, mtodos com malha nem sempre
so apropriados para quaisquer tipos de problemas, como aqueles em que a
configurao espacial muda com o tempo (e.g. fluidos) ou problemas em que a presena
de elementos degenerados so comuns.
Apesar do grande avano de mtodos tradicionais baseados em malha, existem
casos em que se justifica a utilizao de mtodos sem malha e a paralelizao de tais
mtodos os torna mais competitivos.
O MLPG se difere de outros mtodos sem malha baseados no mtodo de
Galerkin, pois a abordagem Petrov-Galerkin permite que as funes de teste e de forma
sejam diferentes. Esse procedimento torna possvel a soluo do problema global
atravs de integraes de vrios subdomnios locais, ao invs de se resolver uma nica
integrao sobre todo o domnio, como acontece no EFG (Element Free Galerkin). Cada
subdomnio pode ter qualquer tamanho ou forma geomtrica e o conjunto de
subdomnios deve cobrir completamente o domnio global.
Nos mtodos sem malha, a funo de aproximao pode ser definida usando
diferentes abordagens, como o mtodo de Mnimos Quadrados Mveis (MLS),
Reproducing Kernel Particle Method (RKPM), Funes de Base Radial (RBF),
aproximaes polinomiais, entre outras.
A abordagem Petrov-Galerkin, utilizada no MLPG, permite que as funes de
teste e de peso sejam diferentes. Para ilustrar o conceito do MLPG, considere um
domnio arbitrrio
descrito por um conjunto de nos dispostos em seu interior e ao
longo de seu contorno . Considera-se como vlida em a seguinte forma fraca:

33

onde o valor da funo ao longo do contorno ,


a funo de peso,
um parmetro utilizado pelo mtodo das penalidades para forar o valor de
ser igual
ao valor conhecido em um contorno com condies de Dirichlet. O valor
da funo
em um n k definido por:

Onde
a funo de forma do n e
k que so usadas para calcular a aproximao.

o nmero de ns da vizinhana do n

O suporte compacto da funo de peso W define um subdomnio fechado


redor de cada n, como ilustrado na figura a seguir:

ao

Figura 4. 2: Representao do domnio.


Fonte: Fonseca, Alexandre R. et al., UFMG, 2008

Conseqentemente, a equao inicial pode ser resolvida localmente em cada


subdomnio , pela seguinte expresso:

Nos metodos sem malha, a funo de aproximao (2) pode ser definida usando
diferentes abordagens, como o mtodo de Minimos Quadrados Moveis (MLS),
Reproducing Kernel Particle Method (RKPM), Funcoes de Base Radial (RBF),
aproximaes polinomiais, entre outras.
Algumas possveis funes que podem ser usadas para definir W, como a funo
degrau de Heaviside ou a funo de peso MLS. Assume-se que W definido pela
funo de Heaviside, i.e. W = 1, o que leva a:

34

A funo de Heaviside permite a simplificao da funo da forma fraca local,


eliminando a necessidade de integraes no interior dos subdomnios, o que simplifica o
mtodo e diminui o custo computacional. Substituindo (2) em (4), aplicando o teorema
da divergncia e uma identidade vetorial, obtem-se o sistema linear Kx = f, onde x o
vetor de incognitas, e as matrizes Ke f so dadas por:

Resolvendo o sistema, obtm-se os valores de V em qualquer ponto dentro do


domnio atravs de (2).

4.2. SEP
Anlise de Redes Eltricas
Os sistemas eltricos de potncia nos tempos atuais so, na maioria das vezes,
sistemas complexos, formados a partir de sistemas regionais de mdio porte,
interligados uns aos outros, resultando numa grande rede eltrica, que pode conter
milhares de barras trifsicas e equipamentos, tais como geradores sncronos,
transformadores, autotransformadores, linhas de transmisso e cargas.
Para tratar esses equipamentos de uma forma interligada e dirigida para sistema
ser de grande porte, eles devem ser representados por seus modelos de circuito, no
domnio das fases ou das componentes simtricas, resultando em matrizes de
impedncia ou admitncia primitivas. A interligao destes equipamentos de maneira a
formar a rede eltrica tratada atravs de matrizes de incidncia, que descrevem como
cada um dos elementos est disposto na rede eltrica, dando total informao sobre a
sua topologia. Elas so essenciais para, entre outras funes, se determinar as
formulaes nodal e de lao de redes eltricas.

35

Na formulao nodal, existe a matriz de incidncia elemento-n , que uma


matriz de

linhas e

colunas que descreve como os elementos esto ligados aos ns

de um grafo orientado. Seus elementos

so tais que:

J na formulao de lao, existe a matriz de incidncia elemento-lao , que


uma matriz cujo nmero de linhas o nmero de malhas possvesi de se obter em um
determinado grafo. Esta matriz possui

colunas e descreve como os elementos de um

grafo esto dispostos numa determinada malha ou lao . Assim, seus elementos

so

tais que:

As relaes tenso-corrente ou equaes primitivas dos elementos de


circuito podem ser apresentadas no formato de impedncia como:

em que

a diferena de potencial entre os terminais da linha,

representa a soma das tenses das fontes existentes na linha, a corrente da


linha e a matriz de impedncias primitiva, que descreve os parmetros da
linha. As formulaes para a resoluo do sistema linear matricial so mostradas
a seguir:

Na forma de admitncia, as relaes tenso-corrente so:

36

Que, ao invs da somas das tenses das fontes, so somadas as correntes


das fontes e os parmetros da linha so representados pela matriz admitncia .
As formulaes para a resoluo do sistema linear matricial so mostradas a
seguir:

4. Concluses
Esse trabalho propiciou o amadurecimento das tcnicas de mtodos numricos
para sistemas lineares, bem como da programao na linguagem C++. Avaliou-se os
erro susceptveis, diferentes tipos de a preciso e verificou-se um alto custo
computacional dessa linguagem para precises maiores.

5. Referncias Bibliogrficas

CORREA, Sonia M. B. B. (2003). Probabilidade e Estatstica. Segunda


Edio. Belo Horizonte MG. Puc Minas Virtual. 116p.

BOLDRINI, C. (1986). lgebra Linear. 3 ed. Editora Harbra.

PEREIRA, Clever (2012). Redes Eltricas no domnio da frequncia. UFMG.


Belo Horizonte, MG.

SILVEIRA, Jony Laureano (2002). Modelagem numrica 3D de problemas de


compatibilidade eletromagntica utilizando o mtodo TLM-TD. Tese de
doutorado. UFSC. Florianpolis, SC.

YEE K. S. Numerical solution of initial Boundary Value Problems involving


Maxwells Equations in Isotropic Media. IEEE Trans. on Antennas and
Propagation, New York, v. 14, n. 3, p. 302-307, May 1966.

AZEVEDO, Rayann P. de Alencar; ARAJO, Icaro B. de Queiroz; SANTOS,


Eliel P. dos; FONSECA SILVA, Paulo H. da. Aplicao do mtodo das
diferenas finitas para soluo das equaes de Laplace e Poisson para
37

linhas de microfitas acopladas. Instituto Federal de Educacao, Cincia e


Tecnologia da Paraiba. Joo Pessoa, PB.

FONSECA, Alexandre Ramos ; MENDES, Miguel Lima ; MESQUITA, Renato


Cardoso ; SILVA, Elson Jos da . Programao Paralela em Mtodos sem
Malha Aplicados a Problemas Eletromagnticos. In: MOMAG 2008 - 13
Simpsio Brasileiro de Microondas e Optoeletrnica - 8 Congresso Brasileiro de
Eletromagnetismo, 2008, Florianpolis. Anais do MOMAG 2008 - 13 Simpsio
Brasileiro de Microondas e Optoeletrnica - 8 Congresso Brasileiro de
Eletromagnetismo., 2008. p. 632-635.

FONSECA, Alexandre Ramos. Algoritmos eficientes em Mtodos sem Malha.


Tese de doutorado. UFMG. Belo Horizonte, MG.

38

Você também pode gostar