apendice a -- introducao aos sistemasˆ matlab/gnu … · apendice a -- introducao aos sistemasˆ...

22
AP ˆ ENDICE A -- Introdu¸ ao aos Sistemas Matlab/GNU Octave Existem uma s´ erie de ambientes matem´ aticos prop´ ıcios para a solu¸ ao de a maioria das tarefas a serem realizadas cotidianamente em c´ alculos da Engenharia: Matlab, Mathemathica, GNU Octave, SciLab, etc. Sendo alguns destes capazes inclusive de trabalhar com manipula¸ ao simb´ olica. Para este curso, basicamente o uso ficar´ a restrito aos sistemas Matlab/GNU Octave sendo o primeiro um sistema licensiado e o segundo uma alternativa livre de ambientes matem´ aticos. Embora similares em grande n´ umero de comandos a coincidˆ encia n˜ ao ´ e completa existindo algumas diferen¸ cas entre os comandos em cada um dos sistemas. Existem uma s´ erie de referˆ encias que podem complementar as informa¸ oes aqui fornecidas, dentre as quais destaco os materiais de Domingues e Mendes Jr (2002) e Eaton (2006). Outra importante fonte de ajuda ´ e o pr´ oprio programa, onde uma s´ erie de informa¸ oes a respeito de um comando podem ser obtidas utilizando-se help -i nome_do_comando. Inicialmente ser´ a visto simplesmente algumas opera¸ oes fundamentais com matrizes e ve- tores que n˜ ao apresentam varia¸ ao entre estes sistemas. Com estas informa¸ oes j´ a s˜ ao poss´ ıveis realizar uma s´ erie de procedimentos do nosso curso. A.1 Opera¸ oes Fundamentais Neste tipo de plataformas est˜ ao contemplados todos os tipos de operadores, tanto para opera¸ ao com reais com inteiros. Assim s˜ ao poss´ ıveis a soma(+), subtra¸ ao(-), divis˜ ao(/), multiplica¸ ao (*) divis˜ ao reversa (\) e exponencial (ˆ). Opera¸ oes com inteiros s˜ ao tamb´ em

Upload: doandat

Post on 19-Sep-2018

241 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

APENDICE A -- Introducao aos Sistemas

Matlab/GNU Octave

Existem uma serie de ambientes matematicos propıcios 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 possıveis

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 possıveis a soma(+), subtracao(-), divisao(/),

multiplicacao (*) divisao reversa (\) e exponencial (ˆ). Operacoes com inteiros sao tambem

Page 2: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

Top. Esp. Fluido-Temica 2

possıveis 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)25ou

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 disponıveis 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 possıvel criar vetores e matrizes atraves de um valor inicial, um valor

final e incrementos constantes do tipo:

octave> 1:10ans =

1 2 3 4 5 6 7 8 9 10

octave> 1:2:10ans =

1 3 5 7 9

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

Page 3: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 24 7

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

octave> b=[3 6> 9 4]b =3 69 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+bans =

4 813 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 =

811

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:

Page 4: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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*bans =21 1475 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.*bans =

3 1236 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 possıveis 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.1428570.214286 -0.071429

Page 5: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

Top. Esp. Fluido-Temica 5

• Matriz Transposta (’):

octave> b’ans =3 96 4

• Matriz nula de qualquer tamanho (zeros):

octave> zeros(4)ans =0 0 0 00 0 0 00 0 0 00 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 11 11 1

• Matriz Identidade de qualquer tamanho (eye):

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

que e uma operacao bastante util se voce estiver interassado em montar uma linha qual-

quer com um valor ”1”na posicao da diagonal principal e o restante zeros:

octave> eye(10)(5,:)ans =0 0 0 0 1 0 0 0 0 0

Page 6: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 00 2 00 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 00 0 0 0 01 0 0 0 00 2 0 0 00 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 70 3 4 1 51 2 2 4 03 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 mınimo (min) e a ordenacao de matrizes

(sort). Todos estes comandos realizam estas operacoes entre os elementos pertencentes a

mesma coluna.

Page 7: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 8888 121

e diferente de:

octave> c’*cans = 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 caracterısticas 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.

Page 8: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 sinalfunction ret=sinal(x)if (x!=0) ret=x/abs(x);else ret=0;endifend

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 disponıvel 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

Page 9: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 xoctave> a=cos(x1); %define o primeiro vetor yoctave> b=sin(x1); %define o segundo vetor yoctave> gset xlabel "x" % define nome do eixo xoctave> gset ylabel "y" % define nome do eixo yoctave> gset key outside box % define legenda

% do lado de fora do grafico e com bordaoctave> 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 possıvel 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.

Page 10: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

Top. Esp. Fluido-Temica 10

Figura 1: Grafico gerado no octave

octave> a=22

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

octave> a=3;3

octave> if (mod(a,2)==0) disp(\"Numero par\") else disp(\"Numero impar\") endifNumero 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; endwhile13

• 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); endfor13

• switch permite a selecao de uma alternativa entre diversas. Pode ser substituido por um

conjunto de if s em cascata.

Page 11: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

Top. Esp. Fluido-Temica 11

octave> nlados=3;octave> switch (nlados)> case (3) disp("Triangulo")> case (4) disp("Quadrado")> case (5) disp("Pentagono")> otherwise disp("Figura n~ao classificada")> endswitchTriangulo

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.

Page 12: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 ′(t, T ) = 37.681(40 + 22.48 sin(2πt) − 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

Page 13: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

Top. Esp. Fluido-Temica 13

e a partir dele e possıvel calcular o valor da funcao para qualquer par ordenado T ′(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 possıvel realizar a marcha do processo de solucao. Caso se desejasse

a temperatura apos decorridos 2 min, e possıvel 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

Page 14: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 analıtica 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

e

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

Page 15: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

Top. Esp. Fluido-Temica 15

Para comparacao uma tabela de saıda de dados foi montada com base nos resultados obti-

dos. Desta forma e possıvel uma analise dos valores numericos de cada caso:

octave> [te’ TT’ texv’ tba’]ans =

0.00000 15.00000 14.99853 40.000000.03333 34.44279 34.90197 44.673850.06667 43.55979 43.83592 49.143440.10000 49.28485 49.41487 53.213410.13333 53.61306 53.67464 56.705900.16667 57.04284 57.07827 59.468250.20000 59.63482 59.66188 61.379750.23333 61.34022 61.36521 62.356850.26667 62.10423 62.12881 62.356850.30000 61.89951 61.92357 61.379750.33333 60.73686 60.75968 59.468250.36667 58.66766 58.68836 56.705900.40000 55.78252 55.80022 53.213410.43333 52.20758 52.22153 49.143440.46667 48.09910 48.10870 44.673850.50000 43.63665 43.64147 40.000000.53333 39.01527 39.01510 35.326150.56667 34.43692 34.43177 30.856560.60000 30.10170 30.09180 26.786590.63333 26.19909 26.18487 23.294100.66667 22.89964 22.88172 20.531750.70000 20.34756 20.32672 18.620250.73333 18.65439 18.63154 17.643150.76667 17.89412 17.87027 17.643150.80000 18.09998 18.07617 18.620250.83333 19.26298 19.24024 20.531750.86667 21.33229 21.31162 23.294100.90000 24.21747 24.19977 26.786590.93333 27.79242 27.77847 30.856560.96667 31.90090 31.89130 35.326151.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;");

Page 16: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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, domınio)

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.

domınio 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 inıcio: 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.

Page 17: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 domınio pode ser estabelecido atraves de um vetor na forma [inıcio 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 fısicas 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 ′(t, T ) = 137.06(40 + 22.48 sin(2πt) − T )

e a solucao analıtica do problema seria dada por:

T (t) = 40 + 22.46 sin(2πt − 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 analıtica.

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

riores

Tambem no caso da EDO de segunda ordem e possıvel utilizar estes metodos. Como foi

visto a saıda 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.

Page 18: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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:

T ′′(r, T, T ′) = 93.02(T − 25) − 1

rT ′

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 domınio 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 topoctave> 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.

Page 19: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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 caracterısticas. 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 ”estimativas”da derivada na base da aleta,

usando-se a seguinte sequencia de comandos:

Page 20: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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+09octave> 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.3octave> 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:

Page 21: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

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.25octave: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.

Page 22: APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU … · APENDICE A -- Introducao aos Sistemasˆ Matlab/GNU Octave Existem uma s´erie de ambientes matem´aticos prop´ıcios para

REFERENCIAS BIBLIOGRAFICAS

DOMINGUES, M. O.; MENDES JR, O. Introducao aos Programas Cientıficos 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.