Você está na página 1de 22

APENDICE A -- Introducao aos Sistemas

Matlab/GNU Octave

Existem uma serie de ambientes matematicos propcios para a solucao de a maioria das
tarefas a serem realizadas cotidianamente em calculos da Engenharia: Matlab, Mathemathica,
GNU Octave, SciLab, etc. Sendo alguns destes capazes inclusive de trabalhar com manipulacao
simbolica.

Para este curso, basicamente o uso ficara restrito aos sistemas Matlab/GNU Octave sendo
o primeiro um sistema licensiado e o segundo uma alternativa livre de ambientes matematicos.
Embora similares em grande numero de comandos a coincidencia nao e completa existindo
algumas diferencas entre os comandos em cada um dos sistemas.

Existem uma serie de referencias que podem complementar as informacoes aqui fornecidas,
dentre as quais destaco os materiais de Domingues e Mendes Jr (2002) e Eaton (2006). Outra
importante fonte de ajuda e o proprio programa, onde uma serie de informacoes a respeito de
um comando podem ser obtidas utilizando-se help -i nome_do_comando.

Inicialmente sera visto simplesmente algumas operacoes fundamentais com matrizes e ve-
tores que nao apresentam variacao entre estes sistemas. Com estas informacoes ja sao possveis
realizar uma serie de procedimentos do nosso curso.

A.1 Operacoes Fundamentais

Neste tipo de plataformas estao contemplados todos os tipos de operadores, tanto para
operacao com reais com inteiros. Assim sao possveis a soma(+), subtracao(-), divisao(/),
multiplicacao (*) divisao reversa (\) e exponencial (). Operacoes com inteiros sao tambem
Top. Esp. Fluido-Temica 2

possveis como a divisao, utilizando o truncamento dos decimais (floor ), e resto (mod ou rem).
Assim:

octave>mod(5,2)
ans =
1

octave> rem(5,2)
ans =
1

octave> floor(5/2)
ans =
2

octave> disp(5**2), disp( ou ),disp(5^2)


25
ou
25

O disp e um comando utilizado para escrever na tela e converte a saida para caracteres.
Comandos para arredontamento como round ou ceil tambem estao disponveis no Octave.

Alem disto, existe uma extensa biblioteca matematica pre-implementada que permite o
calculo de uma serie de funcoes hiperbolicas (exp, log, sinh, etc.), trigonometricas (sin, cos,
tan, etc.), de Bessel (besselj , besselk , besseli , etc.) e uma infinidade de outras.

A.2 Definicoes e operacoes com matrizes e vetores

Antes de mais nada e possvel criar vetores e matrizes atraves de um valor inicial, um valor
final e incrementos constantes do tipo:

octave> 1:10
ans =
1 2 3 4 5 6 7 8 9 10

octave> 1:2:10
ans =
1 3 5 7 9

ou entao se estabelecendo nao o incremento, mas sim o numero de componentes da matriz:


Top. Esp. Fluido-Temica 3

octave> linspace(1,10,5)
ans =
1.0000 3.2500 5.5000 7.7500 10.0000

Para criar uma matriz ou um vetor incluindoos valores de cada posicao e armazena-lo numa
variavel, o procedimento tambem e simples, basta inseri-lo da maneira mostrada abaixo:

octave> a=[1 2; 4 7]
a =
1 2
4 7

ou ainda utilizando um <enter>, ao inves do ; , para indicar mudanca de linha:

octave> b=[3 6
> 9 4]
b =
3 6
9 4

Definidas as matrizes pode-se realizar operacoes entre elas. Veja por exemplo como realizar
uma adicao entre as matrizes a e b, definidas anteriormente.

octave> a+b
ans =
4 8
13 11

Da mesma maneira pode-se utilizar uma resposta anterior, mesmo que nao armazenada
em variavel nenhuma utilizando da variavel ans. Como exemplo disto, veja como apresentar a
segunda coluna da matriz resposta anterior:

octave> c=ans(:,2)
c =
8
11

sendo que para isto e bastante util o :da maneira apresentada. Ele pode representar, quando
usado desta maneira, todas as linhas ou colunas de uma matriz. Caso desejasse mostrar apenas
um componente da matriz, bastaria colocar o seu endereco ente parenteses:
Top. Esp. Fluido-Temica 4

octave> a(2,1)
ans = 4

Da mesma maneira que a adicao, outras operacoes entre as matrizes poderiam ser realizadas,
como por exemplo a multiplicacao:

octave> a*b
ans =
21 14
75 52

Outra forma desta operacao, a chamada multiplicacao termo a termo, pode tambem ser
necessaria e neste caso ela pode ser realizada atraves da forma:

octave> a.*b
ans =
3 12
36 28

sendo ainda existente uma operacao equivalente a esta para a divisao termo a termo, represen-
tada pelo operador ..

A.2.1 Funcoes e operacoes especiais

Sao ainda possveis uma serie de outras operacoes com matrizes, sendo destacadas aqui:

Determinante (det):

octave> det(a)
ans = -1

Matriz Inversa (inv):

octave> inv(b)
ans =
-0.095238 0.142857
0.214286 -0.071429
Top. Esp. Fluido-Temica 5

Matriz Transposta ():

octave> b
ans =
3 9
6 4

Matriz nula de qualquer tamanho (z eros):

octave> zeros(4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

ou ainda para qualquer matriz nao quadrada definindo-se o numero de linhas e colunas:

octave> zeros(1,7)
ans =
0 0 0 0 0 0 0

Matriz Unitaria tambem pode ser montada de dorma analoga (ones):

octave:1> ones(3,2)
ans =
1 1
1 1
1 1

Matriz Identidade de qualquer tamanho (eye):

octave> eye(4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

que e uma operacao bastante util se voce estiver interassado em montar uma linha qual-
quer com um valor 1na posicao da diagonal principal e o restante zeros:

octave> eye(10)(5,:)
ans =
0 0 0 0 1 0 0 0 0 0
Top. Esp. Fluido-Temica 6

Matriz Diagonal generica a partir de um vetor (d iag):

octave> a=[1 2 3]
a =
1 2 3

octave> diag(a)
ans =
1 0 0
0 2 0
0 0 3

O vetor diagonal tambem pode ser usada para montar uma diagonal secundaria da matriz,
para isto basta fornecer como segundo argumento inteiro que representa a sua posicao
na matriz. Numeros negativos podem ser usados para representar diagonais secundarias
abaixo da posicao atual:

octave> diag(a,-2)
ans =
0 0 0 0 0
0 0 0 0 0
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0

Se aplicado em uma matriz bidimensional, o comando diag retorna a respectiva diago-


nal indicada na forma de vetor, como se fizesse uma operacao inversa da anteriormente
demonstrada:

octave:18> b=[8 5 5 6 7; 0 3 4 1 5; 1 2 2 4 0;3 9 7 8 6 ]


b =
8 5 5 6 7
0 3 4 1 5
1 2 2 4 0
3 9 7 8 6

octave:19> diag(b,1)
ans =
5 4 4 6

Operacoes com as colunas de componentes de uma matriz: no caso da soma (sum)

octave> sum(a)
5 9

e ainda existem outros comandos que permitem a obtencao da media(mean), o produto


dos termos(prod ), o valor maximo (max ), o valor mnimo (min) e a ordenacao de matrizes
(sort). Todos estes comandos realizam estas operacoes entre os elementos pertencentes a
mesma coluna.
Top. Esp. Fluido-Temica 7

Deve-se lembrar ainda que mesmo nos ambientes deste tipo nao existe a comutatividade
em operacoes com matrizes assim:

octave> c*c
ans =
64 88
88 121

e diferente de:

octave> c*c
ans = 185

como era de se esperar.

Bem este texto serve como uma referencia basica para o tratamento de matrizes e vetores
nos referidos sistemas entretanto existem ainda uma serie de diferentes comandos relacionados
a este que podem ser encontrados em documentacoes mais aprofundadas e atraves do Help dos
programas.

Existem uma serie de outras operacoes que permitem operacoes basicas com vetores, prin-
cipalmente com relacao a uniao de vetores (union) e a idendificacao de posicoes que obedeccam
a caractersticas definidas (find ).

A.3 Graficos e funcoes

Para definir funcoes no octave nomalmente e indicado criar um arquivo com extensao .m
no diretorio corrente obedecendo a uma estrutura basica:

i. a primeira linha deve conter a palavra chave function, em seguida a variavel que armazena
o valor a ser retornado que, por sua vez, e igualada ao nome da funcao seguida da sequencia
de parametros de entrada. E fundamental que o nome da funcao seja identico ao fornecido
ao arquivo .m.

ii. na linha a seguir sao definidas as variaveis globais, se existirem.

iii. depois vem o corpo da funcao com a sua sequencia de comandos.


Top. Esp. Fluido-Temica 8

iv. o procedimento e finalizado com a palavra end .

Veja por exemplo a criacao de uma funcao do tipo sinal de um numero. Desta forma sera
editado um arquivo sinal.m do tipo:

# func~
ao sinal
function ret=sinal(x)
if (x!=0) ret=x/abs(x);
else ret=0;
endif
end

A partir deste ponto existe uma funcao pronta no octave de nome sinal que pode ser
chamada em qualquer instante. Cabe ressaltar entretanto que esta funcao deve estar no diretorio
corrente ou no diretorio de funcoes do octave. Assim:

octave> sinal(100)
ans= 1

octave> sinal(-10)
ans=- 1

octave> sinal(0)
ans = 0

Esta mesma funcao poderia ser criada simplesmente digitando a sequencia de comandos apre-
sentada no octave dispensando, assim, a necessidade da criacao de um novo arquivo. O inco-
veniente desta forma e que a mesma so estaria disponvel depois de carregada para a memoria
do octave em cada secao.

Quando se trata de funcoes mais simples, que envolve o seu calculo diretamente a partir
de parametros fornecidos o comandoinline pode ser uma boa alternativa. Sofre das mesmas
limitacoes de quando se define a funcao no interior de um script, entretanto sua definicao e bem
mais simples:

octave> f=inline("2*x.^2-3*x+4")
f =
f(x) = 2*x.^2-3*x+4

octave> f(2)
ans = 6
Top. Esp. Fluido-Temica 9

sendo que neste caso todos os parametros envolvidos na funcao seriam tambem argumentos da
mesma dificultando, assim, definicoes mais complexas. Existem alternativas para personalizar
esta definicao uma vez que este comando pode ser utilizado com maior numero de parametros.
Maiores detalhes podem ser encontrados com a utilizacao da ajuda da funcao.

Para elaboracao de graficos o octave se utiliza de um programa externo denominado GNU-


PLOT. Existem comandos internos do proprio gnuplot que muitas vezes sao utilizados para
definir parametros preliminares dos graficos. Para um bom conhecimento destas funcoes sugere-
se uma leitura do manual do proprio programa.

Com relacao ao comando para plotagem plot ele pode ser utilizado com a entrada de pelo
menos dois vetores (x, y), mas sua forma geral permite a utilizacao de um formato em sequencia
identificando como vai ser a linha

Apenas para ilustrar, foi feito um grafico personalizado alterando algus parametros mais
importantes do gnuplot via gset e utilizando-se de um script do octave:

octave> x1=0:0.1:pi; %define vetor x


octave> a=cos(x1); %define o primeiro vetor y
octave> b=sin(x1); %define o segundo vetor y
octave> gset xlabel "x" % define nome do eixo x
octave> gset ylabel "y" % define nome do eixo y
octave> gset key outside box % define legenda
% do lado de fora do grafico e com borda
octave> plot(x1,a,"-;cos(x);",x1,b,"-;sin(x);")

e com isto foi criado o grafico mostrado na figura (1). Deve-se ressaltar que em versoes novas
do programa existe a perspectiva de substiturir o comando gset por __gnuplot_set__.

A.4 Operacoes logicas

E possvel realizar uma serie de operacoes logicas e testes usando o Octave. As operacoes
mais usuais sao maior (>) ou maior ou igual (>=), menor(<) ou menor ou igual (<=), igual
(==) e diferente (! = ou =). E conveniente notar que o teste de igualdade (==) e diferente
da atribuicao (=).

if e utilizado para realizacao de comparacoes diretas e direcionar o fluxo do programa em


funcao de seu resultado.
Top. Esp. Fluido-Temica 10

Figura 1: Grafico gerado no octave

octave> a=2
2

octave> if (mod(a,2)==0) disp(\"Numero par\") else disp(\"Numero impar\") endif


Numero par

octave> a=3;
3

octave> if (mod(a,2)==0) disp(\"Numero par\") else disp(\"Numero impar\") endif


Numero impar

while utilizado para o caso de repeticoes onde o teste e feito por diversas vezes a cada
interacao do problema.

octave> z=1;
octave> while (z<5) disp(z); z+=2; endwhile
1
3

for no caso de operacoes que usam um contador com incrementos constantes o comando
for e o mais indicado.

octave> for z=1:2:4 disp(z); endfor


1
3

switch permite a selecao de uma alternativa entre diversas. Pode ser substituido por um
conjunto de if s em cascata.
Top. Esp. Fluido-Temica 11

octave> nlados=3;
octave> switch (nlados)
> case (3) disp("Tri^
angulo")
> case (4) disp("Quadrado")
> case (5) disp("Pentagono")
> otherwise disp("Figura n~ao classificada")
> endswitch
Tri^
angulo

Em todos os comandos acima o final endif , endwhile, endfor e endswitch pode ser substi-
tuido por end sem comprometer o funcionamento do script (e mantendo compatibilidade com
o Matlab)

A.5 Diferencas basicas entre o Matlab e o Octave

Algumas diferencas basicas que podem afetar a compatibilidade entre ambos sao:

o nome de algumas funcoes sao diferentes

o comentario no Matlab e % e no Octave tambem e aceito o #

no Matlab, os blocos formados por while, if e for e as functions necessariamente ter-


minam com end . No octave pode-se usar, opcionalmente, endwhile, endif , endfor e
endfunction.

no Matlab a unica forma aceita para a desigualdade e o =. O != e aceito apenas no


Octave.

operadores incrementais ++ e - - nao sao aceitos no Matlab.


APENDICE B -- Solucao de Equacoes
Diferenciais Ordinarias
(ODEs) pelo GNU/Octave

Sera apresentado agora a tecnica de solucao de ODEs usando o gnu Octave. A solucao via
Matlab tambem e bastante similar ao procedimento proposto mudando apenas algumas funcoes.
Sera descrito o procedimento inicialmente para uma ODE de primeira ordem, depois uma de
segunda ordem com condicoes iniciais e, finalmente, uma de segunda ordem com condicao de
contorno. Maiores detalhes a respeito dos comandos aqui utilizados, podem ser encontrados na
documentacao octave .

B.1 Solucao de ODE de primeira ordem

Para arepresentar o problema sera escolhida a solucao da relacao entre a temperatura de


um termometro e de seu banho apresentada na apostila. Neste caso a equacao do problema e
dada por:
T 0 (t, T ) = 37.681(40 + 22.48 sin(2t) T )

sendo a condicao de partida a temperatura inicial do termometro T (0) = 15.

Para definir esta equacao do problema e preciso criar um arquivo representando esta funcao,
sendo que ambos (a funcao e arquivo) devem ter o mesmo nome. No caso sera criado o arquivo
dert.m, composto por:

function dr=dert(tempo,temper)
dr=37.681*(40+22.48*sin(2*pi*tempo)-temper);
endfunction
Top. Esp. Fluido-Temica 13

e a partir dele e possvel calcular o valor da funcao para qualquer par ordenado T 0 (t, T ). Por
exemplo:

octave> dert(0,15)
ans = 942.02

Cabe ressaltar aqui que no Matlab nao existe o comando endfunction, sendo que o mesmo
nao precisa ser incluido no caso de arquivos deste tipo.

Entretanto o objetivo principal e a solucao desta equacao diferencial, portanto e preciso


resolve-la. Para tanto sera montado uma outra funcao runge.m na qual sera implementado o
metodo de Runge-Kutta. A funcao referida que utilizara a dert.m, anteriormente definida.

function resp=runge(tempo,temper,h)
k1=h*dert(tempo,temper);
k2=h*dert(tempo+h/2, temper+k1/2);
k3=h*dert(tempo+h/2, temper+k2/2);
k4=h*dert(tempo+h, temper+k3);
resp=temper+(k1+2*k2+2*k3+k4)/6;
endfunction

Com esta funcao agora e possvel realizar a marcha do processo de solucao. Caso se desejasse
a temperatura apos decorridos 2 min, e possvel obte-la usando a funcao recem definida:

octave> runge(0,15,2/60)
ans = 34.443

Para a obtencao da solucao completa e preciso repetir este procedimento por diversas vezes
este procedimento e armazenar a solucao em vetores. Para isto, a sequencia de comandos abaixo
pode ser implementada diretamente ou via arquivo e a solucao armazenada nos valores de te
e TT:

dt=2/60;
te=0:dt:1;
TT=zeros(1,31);
TT(1)=15;
for i=2:31
TT(i)=runge(te(i-1),TT(i-1),dt);
endfor
Top. Esp. Fluido-Temica 14

que se executado no octave. Deve-se observar que o comando te=0:2/60:1; cria um vetor com
todos os termos de 0 a 1, incrementados em intervalos de 2/60.

Feita esta analise implementar ainda solucao analtica do problema e a evolucao da tem-
peratura do banho em funcoes distintas (t exata.m e tbanho.m). O resultado obtido destas
funcoes sao armazenadas em variaveis:

function tex=t_exata(t)
tex=40+22.17*sin(2*pi*t-0.165)-21.36*exp(-37.681*t);
endfunction

function tba=tbanho(t)
tba=40+22.48*sin(2*pi*t);
endfunction

Definidas as funcoes pode-se avaliar as solucoes e armazena-los nas variaveis texv e tba,
a partir das quais, pode-se plotar os resultados. Estes valores estao mostrados no grafico em
funcao do tempo armazenado na variavel te, e o resultado esta mostrado na figura (2).

Figura 2: Grafico gerado no octave


Top. Esp. Fluido-Temica 15

Para comparacao uma tabela de sada de dados foi montada com base nos resultados obti-
dos. Desta forma e possvel uma analise dos valores numericos de cada caso:

octave> [te TT texv tba]


ans =
0.00000 15.00000 14.99853 40.00000
0.03333 34.44279 34.90197 44.67385
0.06667 43.55979 43.83592 49.14344
0.10000 49.28485 49.41487 53.21341
0.13333 53.61306 53.67464 56.70590
0.16667 57.04284 57.07827 59.46825
0.20000 59.63482 59.66188 61.37975
0.23333 61.34022 61.36521 62.35685
0.26667 62.10423 62.12881 62.35685
0.30000 61.89951 61.92357 61.37975
0.33333 60.73686 60.75968 59.46825
0.36667 58.66766 58.68836 56.70590
0.40000 55.78252 55.80022 53.21341
0.43333 52.20758 52.22153 49.14344
0.46667 48.09910 48.10870 44.67385
0.50000 43.63665 43.64147 40.00000
0.53333 39.01527 39.01510 35.32615
0.56667 34.43692 34.43177 30.85656
0.60000 30.10170 30.09180 26.78659
0.63333 26.19909 26.18487 23.29410
0.66667 22.89964 22.88172 20.53175
0.70000 20.34756 20.32672 18.62025
0.73333 18.65439 18.63154 17.64315
0.76667 17.89412 17.87027 17.64315
0.80000 18.09998 18.07617 18.62025
0.83333 19.26298 19.24024 20.53175
0.86667 21.33229 21.31162 23.29410
0.90000 24.21747 24.19977 26.78659
0.93333 27.79242 27.77847 30.85656
0.96667 31.90090 31.89130 35.32615
1.00000 36.36335 36.35853 40.00000

Neste grafico estao mostradas a solucao numerica e exata do problema, alem da temperatura
do banho. O comando utilizado para plotagem, considerando-se as avriaveis anteriormente
definidas e dado por:

xlabel "Tempo [horas]"


ylabel "Tempertura [C]"
plot(te,texv,"-;Sol Analitica;",te,TT,"*;Sol Numerica;",te,tban, "-;Temp. Banho;");
Top. Esp. Fluido-Temica 16

B.1.1 Solucao usando comandos preexistentes no octave

Embora o procedimento acima possa ser realizado sem maiores problemas ele depende,
como foi mostrado, da elaboracao de uma rotina para a solucao do problema, no caso usando
o procedimento de Runge-Kutta. Existe uma alternativa um pouco mais simples que consiste
na utilizacao do procedimento de solucao ja implementado no octave usando o comando lsode.

Este comando consiste na utilizacao do algoritmo de Hindmarsh, um algoritmo um pouco


mais recente que o de Runge-Kutta e otimizado para sistemas de Equacoes Diferenciais Or-
dinarias. Para a solucao do problema anteriormente proposto e preciso conhecer o uso de:

lsode(nome da funcao, condicao, domnio)

sendo que:

nome da funcao e o nome do arquivo que contem a expressao da funcao a ser integrada e cujo
nome vem entre . Embora esta seja basicamente igual a definida anteriormente deve-se
tomar o cuidado de que a funcao deve ser chamada sempre com o primeiro argumento
sendo o vetor da grandeza a ser calculada e o segundo o do parametro da solucao.

Nestas condicoes a funcao utilizada na solucao do problema do termometro, chamada de


dert2.m deve ser redefinida como:

function dr=dert2(temper, tempo)


dr=37.681*(40+22.48*sin(2*pi*tempo)-temper);
endfunction

condicao sao a(s) condicao(oes) de partida necessarias para a solucao do problema.

domnio representa a faixa de valores para os quais a solucao vai ser obtida. Neste caso deve-se
estabelecer a forma de um vetor do tipo incio: passo: fim ou forma equivalente.

Para o caso do exemplo anterior pode-se utilizar:

octave> sol2=lsode("dert2",15,te);

considerando o dominio do problema anteriormente definido por te. Depois disto a solucao
poderia ser plotada e comparada com as anteriores ou mesmo verificado a diferenca entre a
nova solucao e a anterior.
Top. Esp. Fluido-Temica 17

Um procedimento similar a este poderia ser elaborado usando-se o Matlab para obter a
solucao deste problema com as seguintes diferencas:

existem uma serie de funcoes que permitem a solucao de odes no Matlab, sendo a mais
utilizada a ode45, que normalmente substituir o lsode.

a chamada da funcao dentro do ode45 se da com um @ na frente do nome e nao entre .

o domnio pode ser estabelecido atraves de um vetor na forma [incio final ], alem das
formas anteriormente apresentadas.

EXERCICIO: Repita o procedimento anteriormente apresentado agora para um termopar,


cuja capacidade termica e, por consequencia, o tempo de resposta sao bem menores. Supondo
que as condicoes do banho sao as mesmas propostas para o caso do termometro e que as
propriedades fsicas do termopar sao: = 7600 kg/m3 ; c = 0.12 kcal/kg K; D = 0.0008
m.Considere neste caso que o volume submerso e igual ao diametro total do par termoeletrico.

Solucao: Neste caso a EDO do problema seria dada por:

T 0 (t, T ) = 137.06(40 + 22.48 sin(2t) T )

e a solucao analtica do problema seria dada por:

T (t) = 40 + 22.46 sin(2t 0.0458) 23.97 exp(137.06t)

Agora apresente a solucao numerica deste problema e compare-a com a resposta obtida a partir
da solucao analtica.

B.2 Solucao de ODE de segunda ordem ou ordens supe-


riores

Tambem no caso da EDO de segunda ordem e possvel utilizar estes metodos. Como foi
visto a sada e converter a solucao para um sistema de equacoes diferenciais em que cada
uma representa uma ordem diferente. Uma solucao implementando a tecnica de Runge Kutta
apresentada anteriormente poderia ser vista, entretanto, aqui so sera apresentada a tecnica que
se utiliza da funcao pre-implementada no octave lsode.
Top. Esp. Fluido-Temica 18

Bem para isto e necessario definir uma funcao que represente a equacao diferencial do
problema que foi apresentada anteriormente, sendo:
1
T 00 (r, T, T 0 ) = 93.02(T 25) T 0
r
que sera representada atraves da funcao sol ale1.m, que tem como parametros de entrada um
vetor que armazena T e suas derivadas e uma variavel para armazenar a posicao radial r.

function temr=sol_ale1(temper, raio)


temr=zeros(2,1);
temr(1)=temper(2);
temr(2)=93.02*(temper(1)-25)-1/raio*temper(2);
endfunction

onde a variavel temr (1) e (2) representam as expressoes para a primeira e segundas derivadas
de T nos pontos considerados, respectivamente.

Feito isto a solucao pode ser obtida estabelecendo a regiao do domnio para a qual seria
solucionada (raios rr), as condicoes iniciais) e executando a chamada do lsode, como mostra
o script a seguir.

octave> saida=lsode("sol_ale1", [50 -296.1], rr=[0.06:0.01:0.2]);


octave> xlabel "Tempo [horas]"
octave> ylabel "Temperatura [C]"
octave> plot(rr,saida(:,1),"-*; Sol. Numerica;")
octave> figure(2)
octave> xlabel "Tempo [horas]"
octave> ylabel "Grad. Temper [C/h]"
octave> gset key left top
octave> plot(rr,saida(:,2),"-*; Sol. Numerica;")

que apresentaria a solucao do problema na tela e o armazenaria na variavel saida. A partir


destes dados, poderia ser tracar os graficos da forma que se mostrasse adequada e tambem
identificar o tamanho real da aleta, a partir do ponto em que a derivada se anula. A figura (3),
mostra o comportamento da solucao.
Top. Esp. Fluido-Temica 19

Figura 3: Temperatura e gradientes no caso da aleta

B.3 Solucao de ODE de segunda ordem ou ordens supe-


riores com condicao de contorno deslocada

Os problemas de ordem superior nem sempre fornecem as condicoes necessarias para a


partida do processo de marcha, ou seja, o valor da funcao e de sua derivada no ponto. Em um
grande numero de situacoes serao conhecidos o valor da funcao, ou mesmo da funcao e derivadas,
em dois pontos distintos. Imagine o caso da aleta anterior, se conhece o valor da temperatura
na base e a da temperatura na ponta, ou mesmo a temperatura na base e as condicoes de
conveccao na ponta, o problema nao poderia ser resolvido da maneira apresentada.

Para obter-se a solucao neste caso e necessario o procedimento iterativo, onde admite-se os
valores da funcao e suas derivadas no ponto e busca-se os outros valores nos pontos desejados.
Desta forma imagine o caso resolvido na apostila onde deseja-se saber o fluxo maximo de
calor que pode ser dissipado por uma aleta com estas caractersticas. Admitindo-se que o
comprimento infinito seja uma aleta de 2 m, busca-se o valor da derivada na base que obtenha
fluxo de calor nulo nesta ponta.

Calcula-se os valores inicialmente para duas estimativasda derivada na base da aleta,


usando-se a seguinte sequencia de comandos:
Top. Esp. Fluido-Temica 20

octave> rr=0.06:0.01:2;
octave> fx1=-296.1;
octave> fx2=-300;
octave> saida=lsode("sol_ale1", [50 fx1], rr);
octave> y1=saida(end,2)
y1 = 1.1202e+09
octave> saida=lsode("sol_ale1", [50 fx2], rr);
octave> y2=saida(end,2)
y2 = 1.0816e+09

onde os valores fx1 e fx2 sao os valores da derivada da temperatura no ponto r = 2 m.

A partir destes valores utiliza-se o metodo da reta tangente mostrado no texto da apostila
para encontrar a nova (neste caso, terceira) estimativa para o dT /dx|r=6 cm .

octave> fx3=(y2*fx1-y1*fx2)/(y2-y1)
fx3 = -409.26

Esta e a nova estimativa da derivada na base da aleta, com a qual podem ser reefetuados
os calculos sucessivas vezes ate que seja encontrado um valor para a derivada da temperatura
nula na posicao desejada. Seguindo o procedimento abaixo:

octave> fx1=fx2;
octave> fx2=fx3;
octave> saida=lsode("sol_ale1", [50 fx2], rr);
octave> y2=saida(end,2)
y2 = -5744.3
octave> fx3=(y2*fx1-y1*fx2)/(y2-y1)
fx3 = -409.25

que resulta num valor para a derivada na base de 409.2547 K/m, e que pode tranquilamente
ser convertido para o valor do fluxo de calor na base q = 164.23 W. O comportamento do
grafico da derivada da temperatura ao longo da posicao pode ser visto utilizando um script de
plotagem similar ao proposto anteriormente na pagina (18).

Um procedimento similar a este, embora utilizando-se do comando pre-implementado no


GNU-Octave, o fsolve (equivalente ao fzero no Matlab), para encontrar zero de funcoes pode
tambem ser utilizado. Para tanto sera necessaria a definicao de uma funcao que se anule quando
o resultado esperado de derivada nula em x = 2 m ocorra. A implementacao foi realizada na
funcao ale inf.m, onde o parametro de entrada x e o vetor com o chute inicial da derivada e
o valor retornado e a derivada da temperatura no ponto afastado da base, como mostrado a
seguir:
Top. Esp. Fluido-Temica 21

function rr=ale_inf(x)
raio=0.06:0.01:2;
y=lsode("sol_ale1",[50 x], raio);
rr=y(length(y),2);
endfunction

Definida esta funcao a mesma pode ser facilmente solucionada buscando-se o valor de x que
zera a funcao acima:

octave:65> solu=fsolve("ale_inf", -300)


solu = -409.25
octave:66> printf("%15.8f\n",solu);
-409.25472132

obtendo-se com isto um resultado similar ao anterior e o grafico dos valores de tempertura e
sua derivada tambem podem ser montados a partir do valor correto encontrado em solu.
REFERENCIAS BIBLIOGRAFICAS

DOMINGUES, M. O.; MENDES JR, O. Introducao aos Programas Cientficos de Dis-


tribuicao Gratuita: GNU/Octave, GNU:Maxima, LaTeX e GNU/Rcs. http://mtc-
m16.sid.inpe.br/col/sid.inpe.br/irismac2002.pdf, 2002. Acesso em 28/09/2006.

EATON, J. W. Octave Manual. http://www.gnu.org/software/octave/doc/interpreter/, 2006.


Acesso 25/09/2006.

Você também pode gostar