Escolar Documentos
Profissional Documentos
Cultura Documentos
CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA HIDRÁULICA E AMBIENTAL
MESTRADO EM ENGENHARIA CIVIL
ÁREA DE CONCENTRAÇÃO EM RECURSOS HÍDRICOS
FORTALEZA – CEARÁ
2014
ii
FORTALEZA – CEARÁ
2014
iii
CDD 627
iv
AGRADECIMENTOS
Agradeço em especial à minha esposa Patrícia Nunes dos Reis, pelo seu
apoio irrestrito na confecção desse trabalho, as minhas filhas que toleraram as
minhas ausências. Ao meu orientador professor Marco Aurélio Holanda de Castro,
que sempre foi incansável e paciente, atento ao rigor, sempre nos ajudou, em todos
os momentos, na confecção desse trabalho. Agradeço também aos colegas João
Marcelo Costa Barbosa, José Valmir Farias Maia Junior e Nelci Rones Pereira de
Sousa por nos ajudar, com o SCILAB.
RESUMO
ABSTRACT
In many problems of nature and a huge diversity of knowledge areas, there is a real
need we model existing phenomena. Sciences like Mathematics, Physics, Chemistry,
Biology, Economics and in Engineering, in general, is common among the
researchers, the use of models and simulations, which almost always involve fees,
principles and laws, governed by Differential Equations. Problems involving fluid
motion, intensity of electric current, heat propagation, population growth, among many
others, are classic examples of applications of models governed by Differential
Equations, which can be differentiated as to type in Ordinary Differential Equations
(ODE) and Partial Differential Equations (PDE). In the first, the function to be
determined depends on a single variable, while in the second, the dependence of two
or more independent variables occurs. Happens is that in a wide variety of problems of
nature, the equations do not have well-behaved, analytic and thus solutions, it is
necessary the knowledge of numerical methods such as Finite Differences, Finite
Elements, Boundary Elements, among others, which require the discretization of the
domain and therefore the creation of a mesh (MESH), with interactive formulas for
estimating a solution and minimize the error of approximation. In this sense, the
purpose of this work is to use a very efficient and independent of mesh numerical
method, called method without mesh (MESHLESS), but specifically the method of
Kansas, which makes use of Radial Basis Function (Radial Basis Functions - RBF) or
radial symmetry, the distance between central point of the domain of the function and
a generic point of the domain. The interpolating radial basis function also depends on
a shape parameter "c" to be found. But the overriding question is how to determine a
shape parameter "c" great, we can provide a consistent solution, reducing waste and
therefore the existing error? For both, modeled itself a problem of contamination of the
aquifer by making use of the diffusion equation, comparing the results of its analytical
solution with the numerical solution obtained by numerical method without mesh and
parameter simulated shape and optimized by SCILAB platform (version 5.4.1).
LISTA DE ILUSTRAÇÕES
LISTA DE TABELAS
OD Oxigênio Dissolvido
LI Linearmente independente
LD Linearmente dependente
VR Vetor resíduo
MQ Multiquadrática direta
LISTA DE SÍMBOLOS
Fator de integração
Solução particular
Função complementar
Raio de convergência
A Matriz de colocação
Função de interpolação
c Parâmetro de forma
Número de difusão
E Coeficiente de dispersão
C(x,t) Concentração
Número de Courant
Velocidade de escoamento
xiv
SUMÁRIO
1. INTRODUÇÃO ........................................................................................................ 1
2. REVISÃO BIBLIOGRÁFICA .................................................................................. 2
2.1 Ciclo Hidrológico ............................................................................................... 2
2.2 Distribuição de água no planeta ....................................................................... 4
2.3 Contaminação de aquíferos ............................................................................. 5
2.3.1 Propagação de poluentes no meio aquático............................................. 6
2.4 Equações diferenciais....................................................................................... 9
2.4.1 Classificação de equações diferenciais quanto ao tipo ............................ 9
2.4.2 Classificação de equações diferenciais quanto à ordem ......................... 9
2.4.3 Classificação de equações diferenciais quanto à linearidade................ 10
2.4.4 Solução de equação diferencial linear de 1ª ordem ............................... 10
2.4.5 Equações diferenciais de 2ª ordem ......................................................... 11
2.4.6 Equações diferenciais de ordem superior ............................................... 13
2.4.7 Aproximação em série de potências para uma equação diferencial linear
de segunda ordem ................................................................................................. 14
2.4.8 Série de potências ................................................................................... 15
2.4.9 Série de Fourier ....................................................................................... 20
2.4.10 Equações diferenciais parciais e o método de separação de variáveis. 21
3. METODOLOGIA.................................................................................................... 26
3.1 O método sem malhas: Funções de Base Radial ......................................... 27
3.2 Operadores lineares aplicados em uma EDP................................................ 28
3.3 Método de Kansa ............................................................................................ 29
3.4 Equação geral apresentada no SCILAB ........................................................ 31
4. SIMULAÇÕES E RESULTADOS ......................................................................... 34
4.1 Aplicação do método sem malhas (MESHLESS) em uma EDO via Método de
Kansa. ....................................................................................................................... 34
4.1.1 Vetor Resíduo - VR .................................................................................. 44
4.2 Aplicação do método sem malhas (MESHLESS) em uma EDO de 2ª ordem
com coeficientes constantes via método de Kansa................................................. 47
4.2.1 Fluxograma do processo de uso do método sem malhas...................... 49
4.3 Equação da difusão pura................................................................................ 55
4.4 Equação Diferencial Parcial da Difusão Advecção ....................................... 65
4.4.1 Problema envolvendo a equação da difusão advecção ......................... 66
xv
1. INTRODUÇÃO
2. REVISÃO BIBLIOGRÁFICA
Fonte: USGS
4
Atmosfera 13 0,000009
(2.1)
Onde:
Separação de variáveis:
(2.2)
Integra-se em t
(2.3)
∫ ∫
(2.4)
A DBO tem uma taxa de decaimento com modelo do tipo função exponencial
(2.5)
9
(2.6)
(2.7)
(2.8)
(2.9)
(2.10)
(2.11)
(2.12)
Então,
(2.13)
11
Assumindo e integrando em ,
(2.14)
∫ ∫ ∫
(2.15)
∫
(2.16)
∫ (2.17)
∫ (2.18)
∫
+ + (2.19)
+ + (2.20)
(2.21)
12
(2.22)
(2.23)
Derivando (2.22) e usando (2.23), temos:
+ (2.24)
Com isso,
+ (2.25)
+ + (2.26)
[
] + +
+ + + + (2.27)
(2.28)
,
; (2.29)
Onde
| |, | |e | |, (2.30)
13
(2.31)
(2.32)
(2.33)
(2.34)
(2.35)
(2.36)
14
(2.37)
(2.38)
∑
(2.39)
∑
(2.40)
∑| | ∑| || |
Então,
(2.41)
∑
| | | | | | | | (2.42)
| | e inconclusivo quando | | .
16
(2.43)
(2.44)
17
Esse tipo de equação não esboça dificuldades, mas serve para mostrar a
aplicação do método em série. Isto é, tome
(2.45)
∑
(2.46)
∑
Derivando novamente,
(2.47)
∑
(2.48)
∑ ∑
(2.49)
∑
(2.50)
Temos então uma relação de recorrência para índices pares, na qual variamos os
valores de :
(2.51)
(2.52)
18
(2.53)
(2.54)
(2.55)
(2.56)
(2.57)
(2.58)
(2.59)
∑
Por conseguinte:
(2.60)
+...
19
* ++ * (2.61)
(2.62)
∑
(2.63)
(2.64)
(2.65)
(2.66)
20
(2.67)
∑( )
(2.68)
Outra propriedade importante de funções seno e cosseno é a sua
ortogonalidade dessa forma escreve-se um produto dito interno ou escalar padrão
de duas funções reais no intervalo , como:
(2.69)
∫
(2.70)
∫
II. Caso ,
(2.72)
∫
Para quaisquer e ,
(2.73)
∫
III. Caso ,
(2.74)
∫
IV. Caso ,
(2.75)
∫
Seja, abaixo, a Figura 2.3, que ilustra uma barra, na qual há uma
propagação de calor, evidenciando a função , dependente da distância e do tempo
e suas respectivas, condições de contorno estacionárias nas extremidades.
(2.76)
(2.77)
(2.78)
(2.79)
(2.80)
Assim substituímos (2.80) em (2.76) e obtemos:
(2.81)
Separando as variáveis de , tem-se
(2.82)
(2.83)
(2.84)
{
(2.85)
24
Ou seja,
√ √ (2.86)
√ √ (2.87)
(2.88)
√ (2.89)
(2.90)
√
(2.91)
(2.92)
(2.93)
Contudo, ainda resta obedecer à condição (2.78), isto é, temos que formar uma série
da combinação linear do conjunto solução da equação de tal forma que os
coeficientes satisfaçam às condições iniciais do problema em questão.
25
(2.94)
∑
E igualando a
(2.95)
∑ ∑ ( ) ( )
(2.96)
∑ ( )
(2.97)
∫
Material (
Prata 1,71
Cobre 1,14
Alumínio 0,86
Ferro fundido 0,12
Granito 0,011
Tijolo 0,0038
Água 0,00144
Fonte: Boyce (2002, p. 311)
26
3. METODOLOGIA
( ) (‖ ‖) (3.1)
(‖ ‖ ) (3.2)
* ( ) + (3.4)
Gaussianas
(3.5)
∑
com (3.6)
com (3.7)
Onde:
(3.8)
29
(3.9)
(3.10)
(3.11)
∑
; (3.12)
Com condições de contorno de um problema de Dirichlet:
; (3.13)
onde e são operadores lineares e é a fronteira, ou contorno de .
Substituindo a função de aproximação na equação diferencial, tem-se:
(3.14)
[∑ ]
(3.15)
[∑ ]
30
(3.16)
∑
Ou, simplesmente:
(3.17)
∑
(3.18)
(3.19)
[ ]
(‖ ‖ ), com, (3.21)
(3.22)
[ ]
(3.23)
[ ][ ] [ ]
31
(3.24)
( ) ( ) (3.25)
√ (3.26)
Onde,
(3.27)
√( )
(3.28)
(3.30)
4. SIMULAÇÕES E RESULTADOS
4.1 Aplicação do método sem malhas (MESHLESS) em uma EDO via Método de
Kansa.
Nesse exemplo, vamos aplicar o método sem malhas com função de base
radial (RBF) e com a aproximação de Kansa, para resolver uma equação diferencial
ordinária e de primeira ordem.
(4.1)
35
(4.2)
(4.3)
∑ ( )
Sendo que:
O número de pontos ( ;
Linha ;
Coluna ;
Parâmetro de forma ( ;
Matriz das distâncias com N linhas e N colunas
Matriz da função de base radial com N linhas e N colunas (
Vetor com N elementos que contém os coeficientes da solução aproximada
(4.4)
( ) √
36
( ) (4.5)
( ) ( ) ( )
( ) ( ) ( ) (4.6)
{ ( ) ( ) ( )
Y ( x1 ) (r1,1 , c) (r1, N , c) 1
Y ( x ) (r , c) (r2, N , c)
2 2,1
Y ( x N 1 ) (rN-1,1 , c) (rN-1, N , c)
Y ( x N ) (rN,1 , c) (rN, N , c) N
(4.7)
Na forma compacta:
(4.8)
1. Escolher um intervalo para a resolução da EDO. Nesse caso, vamos trabalhar com
um intervalo [0,2].
(4.9)
√ √
Portanto:
(4.10)
(4.11)
Organizando a equação:
(4.12)
* +
(4.13)
Tem-se que:
(4.14)
(4.15)
(4.16)
( ) (4.17)
38
Desenvolvendo a equação:
(4.18)
√( ) √
[ ( )] (4.19)
√( )
Organizando a equação:
[( )] (4.20)
√( √
)
(4.21)
√
√
(4.22)
*√ +
√
7. Condição de contorno
( ) ( ) ( ) (4.24)
Na forma compacta:
(4.25)
( ) ( ) ( ) (4.26)
(4.28)
40
Nesse caso:
F= Vetor com o coeficiente Y(1), para a primeira linha e X(i) para as demais linhas,
tem-se X(i) representa o vetor para a variável x, no intervalo [0,2].
1 2 3 4 5 6 7
1 0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000
2 0.3333
3 0.6667
4 1.0000
5 1.3333
6 1.6667
7 2.0000
Matriz R= :
( ) (4.29)
1 2 3 4 5 6 7
0,000000 -0,333333 -0,666667 -1,000000 -1,333333 -1,666667 -2,000000
0,333333 0,000000 -0,333333 -0,666667 -1,000000 -1,333333 -1,666667
0,666667 0,333333 0,000000 -0,333333 -0,666667 -1,000000 -1,333333
1,000000 0,666667 0,333333 0,000000 -0,333333 -0,666667 -1,000000
1,333333 1,000000 0,666667 0,333333 0,000000 -0,333333 -0,666667
1,666667 1,333333 1,000000 0,666667 0,333333 0,000000 -0,333333
2,000000 1,666667 1,333333 1,000000 0,666667 0,333333 0,000000
41
Matriz FI = :
(4.30)
√
Matriz DFI:
(4.31)
√
Tabela 4.12– Matriz DFI das derivadas da função FI, ponto a ponto.
1
0 -0,40347 -0,66144 -0,79772 -0,86992 -0,91071 -0,93541
0,403473 -0,40347 -0,66144 -0,79772 -0,86992 -0,91071
0,661438 0,403473 0 -0,40347 -0,66144 -0,79772 -0,86992
0,797724 0,661438 0,403473 0 -0,40347 -0,66144 -0,79772
0,869918 0,797724 0,661438 0,403473 0 -0,40347 -0,66144
0,910705 0,869918 0,797724 0,661438 0,403473 0 -0,40347
0,935414 0,910705 0,869918 0,797724 0,661438 0,403473 0
42
Matriz LFI
(4.32)
Matriz A:
(4.33)
Matriz :
(4.34)
Tabela 4.16 – Resumo dos dados da solução da EDO de 1ª ordem via método sem malhas
= (A
-7,10543x10-15
-9,4369x10-16
2,18714x10-14
1,64313x10-14
6,88338x10-15
5,77316x10-15
9,32587x10-15
(4.35)
∑| |
Eis abaixo, nas figuras, 4.1; 4.2 e 4.3, a comparação gráfica entre a
solução numérica e a solução analítica, através da simulação com, respectivamente,
5, 7 e 10 pontos de discretização do domínio, no qual a equação está definida e com
um parâmetro de forma c suposto igual a 0,755929.
45
Figura 4.1 – Parâmetro de forma utilizado "c=0,755929" , pontos do domínio, com número de pontos
N=5.
46
Figura 4.2 – Parâmetro de forma utilizado "c=0,755929" , pontos do domínio, com número de pontos
N=7.
Figura 4.3– Parâmetro de forma utilizado "c=0,755929" , pontos do domínio, com número de pontos
N=10.
47
(4.36)
(4.37)
(4.38)
A função complementar é:
(4.39)
(4.40)
48
Então façamos:
(4.41)
(4.42)
(4.43)
(4.44)
(4.45)
(4.46)
3. Discretiza-se o domínio
6. Determina-se a matriz FI
Figura 4.8 – Gráfico de resíduo do contorno e determinação de c = 68.21 como sendo o c - ótimo, via
método multiquadrático direto.
Figura 4.9 – Gráfico de resíduo do domínio e determinação de c=15.81, como sendo o c - ótimo, via
método multiquadrático direto.
53
Figura 4.10 – Comparação entre solução numérica e solução analítica, pontos do domínio, com
c=15.81, otimizado pelo método multiquadrático direto.
Figura 4.11– Definição das condições de contorno da EDO, para uso do método inverso.
54
Figura 4.12 – Gráfico de resíduo e determinação de c=70.61, como sendo o c - ótimo do contorno,
via método multiquadrático inverso.
Figura 4.13 – Gráfico de resíduo e determinação de c=16.81, como sendo o c - ótimo do domínio, via
método multiquadrático inverso.
55
Figura 4.14 – Comparação entre solução numérica e analítica, pelo método inverso c=16.81.
(4.47)
(4.48)
{
(4.49)
56
(4.50)
(4.51)
(4.52)
(4.53)
(4.54)
{
(4.55)
{
(4.56)
{
(4.57)
57
(4.58)
√
√
Concluímos que:
(4.59)
( ) ( )
√ √
(4.60)
(4.61)
( )
√
(4.62)
(4.63)
(4.64)
∫ ∫
( ) (4.65)
(4.66)
∑ ( )
(4.67)
∫ ( )
58
Tomando, em particular,
(4.68)
(4.69)
(4.70)
(4.71)
∫
(4.72)
(4.73)
∑
(4.74)
∑
(4.75)
(4.76)
√
59
(4.77)
√ √
(4.78)
√
(4.79)
√( )
(4.80)
(4.81)
( )
(4.82)
( )
Considera-se que:
(4.83)
( )
(4.84)
(4.85)
(4.86)
[ ]
(4.87)
[ ] [ ]
61
(4.88)
(4.89)
(4.90)
(4.91)
(4.92)
(4.93)
62
Figura 4.15 – Solução analítica da Equação da Difusão Pura para os instantes t=0s; t=0.05s; t=0.10s
com N=50 pontos, x (Km).
63
Figura 4.16 – Comparação solução analítica com solução numérica da Equação da Difusão Pura,
pontos do domínio, para os instantes t=0s; t=0.05s; t=0.10s com N=5 pontos, x (Km).
Figura 4.17 – Comparação solução analítica com solução numérica da Equação da Difusão Pura,
pontos do domínio, para os instantes t=0s; t=0.05s; t=0.10s com N=20 pontos, x (Km).
64
Figura 4.18 – Comparação solução analítica com solução numérica da Equação da Difusão Pura,
pontos do domínio, c-ótimo 0.3, para os instantes t=0s; t=0.05s; t=0.10s com N=40 pontos.
(4.94)
(4.95)
(4.96)
(4.97)
( )
√
66
a) 12 minutos;
b) 24 minutos;
c) 36 minutos.
Onde é massa total das partículas normais a área da seção transversal, ou seja,
e representa a distância entre a cidade e o ponto de lançamento.
(4.98)
(4.99)
(4.100)
67
(4.101)
∑
(4.102)
√
(4.103)
√ √
• Derivada primeira
√ (4.104)
• Derivada segunda
(4.105)
√( )
68
(4.106)
(4.107)
∑
(4.108)
∑
(4.109)
∑
(4.110)
∑
∑ ∑ (4.111)
∑ ∑
∑ ∑ (4.112)
∑ ∑
69
(4.113)
∑* + ∑
(4.114)
( ) ( )
( ) ( )
( ) ( )
[ ]
(4.115)
[ ]
[ ] [ ]
Dessa forma podemos reescrever a equação (4.110) em sua forma matricial, que é
dada por:
(4.116)
(4.117)
Da Álgebra de matrizes, sabemos que uma matriz multiplicada pela sua inversa é
igual à matriz identidade.
(4.118)
(4.119)
[ ]
(4.120)
• Matriz
(4.121)
[√ ] [| |]
71
(4.122)
[ ] [ ]
• Matriz
(4.123)
[√ ] [√ ]
√ √ √ (4.124)
√ √ √
√ √ √
[ ]
• Matriz
(4.125)
* +
√
[ ]
(4.126)
[ ] [ ]
72
• Matriz
[ ] [ ] (4.127)
(√ )
(4.128)
[ ] [ ]
(4.129)
( ) ( )
( ) ( )
(4.130)
( ) ( )
[ ]
73
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
[ ]
(4.132)
(4.133)
(4.134)
75
Figura 4.23 – Gráfico comparativo entre a solução numérica e a solução analítica da Equação de
Difusão-Advecção, pontos do domínio, nos instantes t=12min, t=24min, t=36min. O parâmetro de
forma, c = 0.149254, foi otimizado pelo SCILAB 5.4.1.
5. CONCLUSÕES:
forma, são utilizados para prever situações nas quais estudos empíricos, sejam
dispendiosos e, por vezes também onerosos.
REFERÊNCIAS BIBLIOGRÁFICAS
Barret R., Berry M., et. al. Templares for the solution of Linear Systems: Building
Blocks for Iterative Methods. SIAM, 1994.
BENNET, C. O. & MYERS, T. E. Fenômenos de Transporte. São Paulo, McGraw-
Hill do Brasil.1980.
BOYCE, William Edward. Equações diferenciais elementares e problemas de
valores de contorno.9.ed. São Paulo: LTC, 2010.
BRAGA, Benedito, et.al. Introdução à Engenharia Ambiental. São Paulo, SP:
Pearson Prentice Hall, 2005.
CHOW, Ven Te; MAIDMENT, R. David; MAYS, Larry W.; Hidrologia Aplicada.
Tradução para o espanhol de SALDARRIAGA, Juan G.; Santa Fé de Bogotá-
Colômbia, 1994. Editora: Mc GRAW -HILL.
FISCHER, H. B., et. al.: Mixing in Inland and Coastal Waters. Academic Press,
New York 1979 apud ANDRADE, Rodrigo Campos: Uma nova abordagem para a
solução numérica de problemas de advecção e difusão multidimensional em
corpos de água naturais. Tese de doutorado. UFRJ/ COPPE, 2006
80
LIMA, Elon Lages. Álgebra Linear. 8.ed.Rio de Janeiro: Impa, 2011. (Coleção
matemática universitária).
LIU, Gui-Rong. Mesh free methods: moving beyond the finite elemento method.
USA, New York: CRC Press LLC, 2003.
PHILIPPI, Arlindo Jr; ROMÉRO, Marcelo de Andrade; BRUNA, Gilda Collet. Curso
de Gestão Ambiental. Barueri, SP: Manole, 2004.
Seja V um espaço vetorial sobre o corpo , e sejam ⃗⃗⃗⃗ ⃗⃗⃗⃗ ⃗⃗⃗⃗ vetores de
V. o conjunto ⃗⃗⃗⃗ ⃗⃗⃗⃗ ⃗⃗⃗⃗ , é dito linearmente dependente sobre se existem
escalares reais ; não todos nulos, tais que:
⃗ (A.1.1)
Para todo .
Seja V um espaço vetorial sobre o corpo , e sejam ⃗⃗⃗⃗ ⃗⃗⃗⃗ ⃗⃗⃗⃗ vetores de
V. o conjunto ⃗⃗⃗⃗ ⃗⃗⃗⃗ ⃗⃗⃗⃗ , é dito linearmente independente sobre se existem
escalares reais ; tais que:
⃗ (A.2.1)
ii) ( ⃗ (⃗ ⃗ , . (A.3.2)
(⃗ ) ⃗ (A.4.1)
(A.5.1)
(A.5.2)
∫
(A.5.3)
∫
i. sempre que ;
ii. ∫
Vale ressaltar que a função delta de Dirac, na verdade não é uma função, no
sentindo clássico ou formal da palavra, mas é conhecida como à classe de
funções generalizadas.
86
B.1 – INTRODUÇÃO
Uma matriz é uma espécie de tabela que permite guardar números de uma
forma ordenada e indexável, a mesma também pode ser vista como vetor, haja vista
o conjunto de matrizes m por n, satisfazer os oito axiomas de espaço vetorial. No
SCILAB para criarmos uma matriz 3x3, por exemplo, basta digitá-la, separada por
ponto e vírgula e colocada entre colchetes, conforme feito na FIGURA B.5:
Operadores Significado
igual a
menor do que
maior do que
menor ou igual
maior ou igual
diferente
Fonte: (PIRES, 2004, p. 59)
95
Figura B.12 – Navegador de ajuda no SCILAB 5.4.1, possui comandos específicos para os mais
variados ramos da Matemática.
97
//Dados de entrada--------------------------------------------------------------
N=evstr(x_dialog('Insira o número de pontos (deve ser um inteiro): ','7'))
X1=0;
XN=2;
Y1=4
C=2/(N)^0.5;
//------------------------------------------------------------------------------
//Intervalo---------------------------------------------------------------------
intervalo=(XN-X1)/(N-1)
for (i=1:1:N)
X(i)=intervalo*(i-1)+X1
end
//------------------------------------------------------------------------------
//XI(Linha) --------------------------------------------------------------------
for (linha=1:1:N)
XI(linha,1)=X(linha)
end
//------------------------------------------------------------------------------
//XJ(Coluna)--------------------------------------------------------------------
for (coluna=1:1:N)
XJ(1,coluna)=X(coluna)
end
//------------------------------------------------------------------------------
//Matriz R----------------------------------------------------------------------
for (i=1:1:N) //i para linha
for (j=1:1:N) //j para coluna
R(i,j)=(XI(i,1)-XJ(1,j))
end
end
98
//------------------------------------------------------------------------------
//Matriz FI---------------------------------------------------------------------
for (i=1:1:N)
for (j=1:1:N)
FI(i,j)=(R(i,j)^2+C^2)^0.5
end
end
//------------------------------------------------------------------------------
//Matriz LFI--------------------------------------------------------------------
for (i=1:1:N)
for (j=1:1:N)
LFI(i,j)=(R(i,j)^2+C^2)^0.5+(R(i,j)/(R(i,j)^2+C^2)^0.5)
end
end
//------------------------------------------------------------------------------
//Matriz A----------------------------------------------------------------------
for (i=1:1:N)
for (j=1:1:N)
if(i==1) then
A(i,j)=FI(i,j)
else
A(i,j)=LFI(i,j)
end
end
end
//------------------------------------------------------------------------------
//FF----------------------------------------------------------------------------
FF(1,1)=Y1
for(i=2:1:N)
FF(i,1)=X(i)
end
//------------------------------------------------------------------------------
//Exibe os dados----------------------------------------------------------------
99
//----------------------------------------
txt0=['Digite 1 para u(x1) ou 2 para Dx(x1)';
'Condição de contorno 1 (cc1):';
'Digite 1 para u(x2) ou 2 para Dx(x2):';
'Condição Contorno 2 (cc2):';
'Método direto 1, inverso 2'];
Escolhacc1=evstr(valor0(1));
cc1=evstr(valor0(2));
Escolhacc2=evstr(valor0(3));
cc2=evstr(valor0(4));
Metodo=evstr(valor0(5));
//------------------------------------------
//------------------------------------------
txt=['Número de pontos do domínio:';
'Limite inferior do domínio(x1):';
'Limite superior do domínio(x2):';
'Parâmetro de forma C:']; //Indica nome das variáveis
np=evstr(valor(1));
xmenor=evstr(valor(2));
xmaior=evstr(valor(3));
PFindicado=evstr(valor(4));
101
//------------DISCRETIZAÇÃO DO DOMÍNIO
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++
//------BUSCA O VALOR ÓTIMO DE C PARA EDO NÃO-HOMOGÊNIA----COMEÇA AQUI
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++
//---------------OBTEM INFORMAÇÕES PARA OTIMIZAÇÃO DO PARÂMETRO FORMA
if PFindicado==0.0 then
txt3=['C Inicial:';
'C Final:';
'Incremento de C:']; //Indica nome das variáveis
PFinicial=evstr(valor(1));
PFfinal=evstr(valor(2));
DeltaC=evstr(valor(3));
PF=PFinicial
//---------INICIALIZA VARIÁVEIS
MPF=[] //Cria uma matriz vazia para armazenar os parâmetro C testado
MSR=[] //Cria uma matriz vazia para armazenar o resíduo testado
MRC= [] // Cria uma matriz vazia para armazenar os residuos das condições de contorno
//------------DETERMINA A MATRIZ R
[m n]=size(Mx) //obtem a quantidade de linha (m) e colunas (n)
for i=1:m //Laço para linhas
for j=1:m //Laço para as colunas
R(i,j)=([Mx(i,1)-My(j,1)]^2)^0.5; //Determina a matriz R
end
end
//------------DETERMINA A MATRIZ FI
[m n]=size(R) //obtem a quantidade de linha (ri) e colunas (rj)
for i=1:m //Laço para linhas
for j=1:n //Laço para as colunas
if Metodo == 2 then
FI(i,j)=(R(i,j)^2+PF^2)^(-0.5);
else
FI(i,j)=(R(i,j)^2+PF^2)^0.5; //Determina a matriz FI
end//end if
end //end for j
end// end for i
[m n]=size(FI);
//Determina L(FI) para 2ª derivada
for i=1:m //Laço para linhas
for j=1:n //Laço para as colunas
if Metodo == 2 then
RFI2(i,j)=(R(i,j)^2+PF^2)^(-2.5);
LFI2(i,j)=RFI2(i,j)*((-(R(i,j)^2+PF^2))+(3*R(i,j)^2));//Matriz L(FI)
else
RFI2(i,j)=(R(i,j)^2+PF^2)^1.5;
LFI2(i,j)=PF^2/RFI2(i,j); //Matriz L(FI)
end //end if
end//end for j
end//end for i
103
//-----------DETERMINA O VETOR Y
[m n]=size(Mx)
for i=1:m //Cria um laço descosiderando as condições de contorno da fronteira - MODIFIQUEI
AQUI
y(1)=cc1;//Torna o valor inicial de Y igual a cc 1
y(m)=cc2; //Torna o valor final de Y igual a cc 2
x(i)=Mx(i) //torna x iagual ao vetor de pontos do domínio - Mx
y(i)=D*sin(E*x(i))+F*cos(G*x(i))+H*x(i)^3+I*x(i)^2+J*x(i)+L //Igualdade da EDO - f(x)
end
ML=MA\y
if PFindicado<>0 then
PF=PFindicado
//----- LAÇO PARA PROCURA DA SOLUÇÃO NUMÉRICA ------
//------------DETERMINA A MATRIZ R
[m n]=size(Mx) //obtem a quantidade de linha (m) e colunas (n)
for i=1:m //Laço para linhas
for j=1:m //Laço para as colunas
R(i,j)=([Mx(i,1)-My(j,1)]^2)^0.5; //Determina a matriz R
end
end
//------------DETERMINA A MATRIZ FI
[m n]=size(R) //obtem a quantidade de linha (ri) e colunas (rj)
for i=1:m //Laço para linhas
for j=1:n //Laço para as colunas
105
if Metodo == 2 then
FI(i,j)=(R(i,j)^2+PF^2)^(-0.5);
else
FI(i,j)=(R(i,j)^2+PF^2)^0.5; //Determina a matriz FI
end//end if
end //end for j
end// end for i
//-----------DETERMINA O VETOR Y
[m n]=size(Mx);
y(1)=cc1;//Torna o valor inicial de Y igual a cc 1
y(m)=cc2; //Torna o valor final de Y igual a cc 2
for i=2:m-1 //Cria um laço desconsiderando as cc na fronteira
x(i)=Mx(i); //torna x iagual ao vetor de pontos do domínio - Mx
//Igualdade da EDO - f(x)
y(i)=D*sin(E*x(i))+F*cos(G*x(i))+H*x(i)^3+I*x(i)^2+J*x(i)+L;
end
end
z =-exp(-3*x)/[3*(exp(3)-exp(-3))]+exp(3*x)/[3*(exp(3)-exp(-3))]-x/3;
if MSR<>0 then
scf()
plot(MPF,MSR,'ro-'); //Plota residuo
xgrid(2) //Coloca uma grade no gráfico
xlabel(["Parâmetro de Forma - C"]);
ylabel("Resíduo");
title("Gráfico de Resíduo");
txt=string(PFindicado);
107
if MRC<>[] then
scf()
plot(MPF,MRC,'o-b'); //Plota residuo das cc
xgrid(2) //Coloca uma grade no gráfico
xlabel(["Parâmetro de Forma - C"]);
ylabel("Resíduo das Condições de Contorno");
title("Gráfico de Resíduo nas Condições Contorno e no Domínio");
//legend(["Parâmetro de Forma no Contorno: "]);
leg=legend("Parâmetro de Forma Ótimo no Contorno(C): " +[txt1],1);
end
//FIM
108
//Função meshless///////////////////////////////////////////////////////
function [r, FI, DFI, D2FI, LFI, CI, G, A, LAMBDA]...
=meshless(x,N,c)
//matrizes do meshless
for i=1:N
for j=1:N
r(i,j)=x(i)-x(j);
FI(i,j)=sqrt(r(i,j)^2+c^2);
DFI(i,j)=r(i,j)/FI(i,j);
D2FI(i,j)=c^2/(FI(i,j)^3)
end
end
//matriz LFI
LFI_1=FI;
LFI_2=(-D*dt)*D2FI;
LFI=LFI_1+LFI_2;
//vetor condição inicial
for i=1:N
CI(i)=2*x(i)*(1-x(i));
end
//concatenação da condição inicial e de contorno c(0,t)=c(L,t)=0
G=[0;CI;0];
//Matriz de colocação
A=[FI(1,:);LFI;FI(N,:)];
//Cálculo do lambda
109
LAMBDA=A\G;
endfunction
//Dados do problema
x0=0;xf=1;
t0=0;tf=0.20;
D=2;//Coeficiente de dispersão
NA=200;//Número de pontos da solução analítica;
NN=40; //Número de pontos da solução numérica;
//Solução analítica
t0=0*tf;
t1=0.25*tf;
t2=0.50*tf
[x,t]=vetores(x0,xf,t0,tf,NA);
ANALITICA_t0=u(x,t0);
ANALITICA_t1=u(x,t1);
ANALITICA_t2=u(x,t2);
plot(x,ANALITICA_t0,x,ANALITICA_t1,x,ANALITICA_t2);
xlabel("$x(Km)$","fontsize", 4);
ylabel("$c(x,t)$","fontsize", 4);
hl=legend(['t=0s';'t=0.05s';'t=0.10s']);
hl=legend(['Num.t=0s';'Num.t=0.05s';'Num.t=0.10s']);
//solução numérica
[x,t]=vetores(x0,xf,t0,tf,NN);
dx=x(2)-x(1);
dt=(dx^2)/6*D;
for j=1:100
c(j)=j/100;
[r,FI,DFI,D2FI,LFI,CI,G,A,LAMBDA_0]=meshless(x,NN,c(j));
VR=A*LAMBDA_0-G;
RES=sum(VR^2);
R_AC(j)=RES;
end
[R_min, pos_c_otimo]=min(R_AC);
printf("C ótimo = %g", c(pos_c_otimo));
[r,FI,DFI,D2FI,LFI,CI,G,A,LAMBDA_0]=meshless(x,NN,c(pos_c_otimo));
NUMERICA_t0=FI*LAMBDA_0;
tempo=0;
k=0;
while tempo<=tf
k=k+1;
tempo=tempo+dt;
sol=FI*LAMBDA_0;
B=[0;sol;0];
LAMBDA=(A\B);
sol=FI*LAMBDA;
for i=1:NN
NUMERICA(k,i)=sol(i);
end
110
LAMBDA_0=LAMBDA;
end
NUMERICA_t1=NUMERICA(int(t1/dt),:);
NUMERICA_t2=NUMERICA(int(t2/dt),:);
plot(x,NUMERICA_t0,"*",x,NUMERICA_t1,"*",x,NUMERICA_t2,"*");
111
clear;
stacksize("max");
//Dados do problema***************************************************
z=1;L=60;V=2.4;D=0.15;m=5000;
Area=z*L;mp=m/Area;
//Dominio*************************************************************
x0=0;
xl=1;
xf=6;
//********************************************************************
t1=0.2;t2=2*t1;t3=3*t1;
dx=0.09;
dt=0.05*dx/V;
Courant=V*dt/dx;
N=round((xf-x0)/dx)+1;
N1=round((xl-x0)/dx)+1;
xi=[linspace(x0,xl,N1) linspace(xl+dx,xf,N-N1)];
xj=[linspace(x0,xl,N1) linspace(xl+dx,xf,N-N1)];
[oi N]=size(xi);
//Função Meshless*****************************************************
//function [M,R]=meshless(c,xi,xj,N,V,D,xl,t1,t2,t3)
function [M, R_media, LAMBDA, DLT]=meshless(c, xi, xj, N, V, D, xl, t1, t2, t3)
//inicializar as matrizes vazias**************************************
r=[];FI=[];DFI=[];D2FI=[];LFI=[];F1=[];A=[];B=[];M=[];
//matrizes do meshless************************************************
for i=1:N
for j=1:N
r(i,j)=xi(i)-xj(j);
end
end
FI=sqrt(r.^2+c^2);
DFI=r.*(FI).^(-1);
D2FI=c^2*(FI.^(-3));
//matriz LFI**********************************************************
//D=D+(V^2*dt)/2;//Dispersão numérica (livro do chapra)
LFI=FI+dt*(V*DFI-D*D2FI);
//vetor condições iniciais********************************************
//A concentração é nula em todos os pontos exceto no lançamento x=xl**
for i=1:N
x=xi(i)
if x==xl then
F1(i)=mp/(dx*1000)
else
F1(i)=0;
end
end
//********************************************************************
//vetor condições de contorno*****************************************
B(1)=0;//condição de contorno
112
B(N)=0;//condição de contorno
//********************************************************************
LAMBDA_ANT=FI\F1 ///?????????????????????
tempo=0;
k=0;
A=LFI;
A(1,:)=FI(1,:);//matriz de colocação
A(N,:)=FI(N,:);//matriz de colocação
//laço do tempo*******************************************************
while (tempo<t3)
tempo=tempo+dt;
k=k+1;
FIL=FI*LAMBDA_ANT
B(2:N-1)=FIL(2:N-1);
LAMBDA=A\B;// LAMDA=B|F1
DLT=(LAMBDA-LAMBDA_ANT)/dt;
//R=V*DFI*LAMBDA-D*D2FI*LAMBDA;// //vetor resíduo
R=FI*DLT+V*DFI*LAMBDA-D*D2FI*LAMBDA;
//R_ANT=FI*DLT+V*DFI*LAMBDA_ANT-D2FI*LAMBDA_ANT;
//R=R+R_ANT;
// LAMBDA_ANT=LAMBDA
// SOL=FI*LAMBDA
if (k==1) then
R_AC=(abs(R))
else
R_AC=R_AC+(abs(R))
end
SOL=FI*LAMBDA;
LAMBDA_ANT=LAMBDA;
for i=1:N
M(k,i)=SOL(i)
end
end
R_media=sum(R_AC/k)
//********************************************************************
endfunction
//********************************************************************
//função para a solução analítica*************************************
function y=C(t, x)
C1=mp/(sqrt(4*%pi*D*t)*1000);
C2=(x-xl-V*t)^2;
C3=4*D*t;
y=C1*exp(-C2/C3);
endfunction
//********************************************************************
c_0=0.01;
c_f=1;
d_c=0.01;
N_INT = int((c_f - c_0)/d_c)+1
Ds=xf-xl;
NS=N;
113
dc=Ds/(NS-1);
//c0=0.01;
//c=linspace(0.001,1,100);
//c=[];
winH=waitbar("Aguarde...")
waitbar(0,winH)
nint=20
for i=1:nint
alfaS=2+(i-1)*d_c;
c(i)=alfaS*dc//rand();
//c(i)=c_0 + (i-1)*d_c;
[M,R_media,LAMBDA,DLT]=meshless(c(i),xi,xj,N,V,D,xl,t1,t2,t3);
R_AC(i)=R_media;
waitbar(i/nint,winH)
end
close(winH);
//for i=1:N_INT
// //alfaS=2.0+(i-1)*d_c;
// //c(i)=alfaS*dc//rand();//c_0 + (i-1)*d_c;
// c(i)=c_0 + (i-1)*d_c;
// [M,R,LAMBDA]=meshless(c(i),xi,xj,N,V,D,xl,t1,t2,t3)
// R_AC(i)=sum(abs(R));
//end
subplot(211);
//clf(1);
plot(c,R_AC);
xlabel("$c$","fontsize", 4);
ylabel("$R$","fontsize", 4);
[R_min,pos_c_otimo]=min(R_AC);
printf("c ótimo = %g\n",c(pos_c_otimo));
clear;
//Dados do problema******************************************************
z=1;//profundidade (m)
L=60;//largura(m)
Area=z*L;//Area(m^2)
V=2.4;//velocidade (km/h)
D=0.15;//Dispersão em (m^2/h)
m=5*10^3;//massa do poluente (g)
mp=m/Area;//massa por unidade de área. (g/m2)
//***********************************************************************
//função para a solução analítica****************************************
function [y]=C(x, t);
C1=(0.001*mp)/(sqrt(4*%pi*D*t));
C2=(x-xL-V*t)^2;
C3=4*D*t;
y=C1*exp(-C2/C3);
//Obs.: Multiplica-se por 0.001 para converter as unidades!
endfunction
//***********************************************************************
//Função para criar os vetores x e t*************************************
function [x, t, dx, dt, xL]=vetores(x0, xf, t0, tf, N)
x=linspace(x0,xf,N); t=linspace(t0,tf,N);
dx=x(2)-x(1);
dt=(Courant*dx)/V;
[a b]=size(x);
p=int(b/5);
xL=x(p);
endfunction
//***********************************************************************
//Função meshless
function [r, FI, DFI, D2FI, LFI, CI, G, A, LAMBDA]...
=meshless(x,N,c)
//matrizes do meshless **************************************************
for i=1:N
for j=1:N
r(i,j)=x(i)-x(j);
FI(i,j)=sqrt(r(i,j)^2+c^2);
DFI(i,j)=r(i,j)/FI(i,j);
D2FI(i,j)=c^2/(FI(i,j)^3)
end
end
//matriz LFI*************************************************************
LFI_1=FI;
LFI_2=V*dt*DFI;
LFI_3=-D*dt*D2FI;
LFI=LFI_1+LFI_2+LFI_3;
//vetor condição inicial*************************************************
//A concentração é nula em todos os pontos exceto no lançamento x=xL
116
for i=1:N
if x(i)==xL then
CI(i)=(0.001*mp)/dx;
else
CI(i)=0;
end
end
//***********************************************************************
//concatenação da condição inicial e de contorno c(x0,t)=c(xf,t)=0*******
G=[0;CI;0];
//Matriz de colocação****************************************************
A=[FI(1,:);LFI;FI(N,:)];
//Cálculo do lambda
LAMBDA=A\G;
endfunction
//fim da função**********************************************************
//Dados de entrada dos espaços e dos tempos******************************
x0=0;//posição inicial em km
xf=5;//posição final em km
t0=0;//tempo inicial em h
tf=1;//tempo final em h.
Courant=0.01;//número de courant
t1=0.25*tf;t2=2*t1;t3=3*t1;//tempos para plotagem dos gráficos
N_analitica=300;//número de pontos da solução analítica.
N_numerica=100;//número de pontos para a solução numérica.
c=0.15;//rand();//parâmetro de forma do meshless
//Solução analítica******************************************************
[x,t,dx,dt,xL]=vetores(x0,xf,t0,tf,N_analitica);
ANALITICA_t1=C(x,t1);ANALITICA_t2=C(x,t2);ANALITICA_t3=C(x,t3);
plot(x,ANALITICA_t1);
//plot(x,ANALITICA_t1,x,ANALITICA_t2,x,ANALITICA_t3);
xlabel("$x\,(\text{km})$","fontsize", 4);
ylabel("$c\,(\text{mg}/\text{L})$","fontsize", 4);
hl=legend(['t=15 min';'t=30 min';'t=45 min']);
//***********************************************************************
//Solução numérica*******************************************************
[x,t,dx,dt,xL]=vetores(x0,xf,t0,tf,N_numerica);
[r,FI,DFI,D2FI,LFI,CI,G,A,LAMBDA_0]...
=meshless(x,N_numerica,c)
//Laço para o tempo*****************************************************
tempo=0;
k=0;
while tempo<=t1
k=k+1;
tempo=tempo+dt;
sol=FI*LAMBDA_0;
B=[0;sol;0];
LAMBDA=(A\B);
VR=A*LAMBDA-B;
R(k)=sum(VR)^2;
sol=FI*LAMBDA;
117
for i=1:N_numerica
NUMERICA(k,i)=sol(i);
end
LAMBDA_0=LAMBDA
end
TN1=NUMERICA(int(t1/dt),:);
//TN2=NUMERICA(int(t2/dt),:);
//TN3=NUMERICA(int(t3/dt),:);
plot(x,TN1,".");
//plot(x,TN1,x,TN2,x,TN3);