Você está na página 1de 207

Mtodos numricos para a engenharia

Sobre o autor

Paulista criado em Minas Gerais e engenheiro Mecnico formado na


Faculdade de Engenharia Mecnica da Universidade Federal de Uberlndia,
com conceito CAPES 5 (nota mxima para cursos de graduao), e com
intercmbio pelo programa BRAFITEC na cole Nationale de Mecanique et
d'Aerotechnique (ISAE-ENSMA) em Poitiers, Frana. O autor atualmente
ps graduando no curso de Engenharia Mecnica da Universidade Federal
de Uberlndia e pesquisador do Laboratrio de Mecnica de Estruturas Prof.
Jos Eduardo Tanns Reis.

Foi tambm bolsista de Iniciao Cientfica do CNPq pelo projeto dos


INCTs, especificamente pelo Instituto Nacional de Cincia e Tecnologia de
Estruturas Inteligentes em Engenharia (INCT-EIE), durante quatro anos, sob
orientao do Prof. Dr. Domingos Alves Rade (ITA - DCTA - IEM). Tem
experincia nas reas de dinmica de estruturas, estruturas inteligentes,
modelagem de sistemas mecnicos, mtodo dos elementos finitos,
programao aplicada, mtodos computacionais, otimizao de sistemas e
vibraes.

Como esta obra deve ser citada:

Claro, V.T.S., 2015. Metodos numericos para a engenharia: uma introducao


ao MATLAB. Ed. Composer, Uberlandia, 207p.

4
Uma introduo ao MATLAB

Agradecimentos

Agradeo aos professores e alunos da Faculdade de Engenharia


Mecnica, Mecatrnica e Aeronutica da Universidade Federal de
Uberlndia, onde me formei engenheiro mecnico. Muito obrigado por tanto
se empenharem em fazer destes alguns dos melhores cursos de Engenharia
do pas.

Agradeo tambm aos rgos de fomento governamentais, CAPES


(BRAFITEC/Frana), CNPq (IC) e FAPEMIG (MSc), por todas as bolsas,
projetos, financiamentos e auxlios de custo, despendidos direta ou
indiretamente durante minha formao. Sem o apoio constante destes rgos
a realizao deste livro e de muitos outros trabalhos no seria vivel.
Agradeo tambm aos colegas da cole Nationale de Mecanique et
d'Aerotechnique (ISAE-ENSMA) em Poitiers, Frana, por uma ano de muito
aprendizado.

Agradeo especialmente aos professores Dr. Domingos Alves Rade e


Dr. Valder Steffen Jnior pelo apoio e confiana constantes e aos colegas
pesquisadores e servidores do Laboratrio de Mecnica de Estruturas "Prof.
Jos Eduardo T. Reis" - LMEst - pela amizade e auxlio desde quando
ingressei na engenharia. E o mais importante, agradeo muito minha
famlia pela ajuda e apoio incondicionais durante esses anos.

Sou muito grato a todos vocs.

Eng. Verglio Torezan Silingardi Del Claro

5
Mtodos numricos para a engenharia

Dedico este livro a meu av, Edye Mauro Silingardi, por ter me
apresentado o mundo da engenharia.

6
Uma introduo ao MATLAB

Sumrio

1) Introduo - 11
a. Por que usar o MATLAB? - 13
b. Como iniciar o programa - 15
c. Principais funcionalidades e aplicaes - 17

2) Operaes com escalares e matrizes - 18


a. Escalares - 19
b. Vetores e matrizes - 23

3) Strings de caracteres - 28
a. Declarao e uso de strings - 29
b. Principais funes - 30

4) Criao e tratamento de funes - 31


a. Scripts - 32
b. Functions - 33
c. Sub-rotinas - 34
d. Nested-functions - 39

5) Operadores e estruturas lgicas - 43


a. Operadores lgicos - 44
b. Condicionais if, elseif e else - 45
c. Loops for e while - 48
d. Chave switch e comando break - 51

7
Mtodos numricos para a engenharia

6) Determinando os zeros de funes - 54


a. Mtodo da bisseco - 57
b. Zeros de funes com comandos do MATLAB - 59

7) Resolvendo sistemas lineares - 61


a. Matrizes com propriedades especficas - 62
b. Mtodo da Eliminao de Gauss - 65
c. Clculo de matriz inversa - 66
d. Cdigo para soluo de sistemas lineares - 67

8) Ajuste de curvas - 70
a. Regresso linear pelo MMQ - 71
b. Funo polyfit - 77
c. Funo polyval - 78
d. Basic fitting - 79

9) Interpolaes - 81
a. Interpolao linear e por spline cbica - 82
b. Mtodo de Lagrange - 86
c. Mtodos diversos e consideraes - 89

10) Derivao numrica - 90


a. Derivao vetorial - 91
b. Localizao dos pontos crticos - 93

11) Integrao numrica - 95


a. Regra do trapzio - 96
b. Regra de Simpson 1/3 - 97

8
Uma introduo ao MATLAB

12) Soluo numrica de equaes diferenciais ordinrias - 102


a. Mtodo de Euler ou Runge-Kutta de 1 ordem - 103
b. Mtodos de Runge-Kutta e de Adams-Bashforth - 105
c. Funo ODE45 - 110

13) Grficos - 115


a. Grficos bidimensionais - 117
b. Grficos tridimensionais - 122
c. Propriedades de grficos 2D - 129
d. Propriedades de grficos 3D - 133

14) Animaes - 137


a. Criao de loops para animaes - 138
b. Gravao de vdeos usando animaes - 142

15) SYMs Variveis simblicas - 143


a. Declarao de variveis simblicas - 144
b. Operaes bsicas com syms - 145
c. Clculo diferencial e integral com syms - 148

16) GUIs Graphical User Interfaces - 155


a. Criao grfica de guides - 156
b. Programao de guides no MATLAB - 161
c. Objetos grficos e seus callbacks especficos - 168
d. Generalidades sobre guides - 188

17) Simulink - 190


a. Criao de diagramas de blocos - 191
b. Soluo de problemas envolvendo EDOs - 193

9
Mtodos numricos para a engenharia

c. Soluo de problemas envolvendo sistemas de EDOs - 198

18) Referncias - 204


a. Referncias bibliogrficas - 204

10
Uma introduo ao MATLAB

1) Introduo
Este livro se baseia em vrias apostilas, livros, cursos sobre MATLAB
e programao em geral e na experincia do autor, tendo como objetivo
auxiliar na resoluo de problemas por mtodos numricos e no uso do
programa. Inicialmente, este livro foi usado em vrios cursos de programao
em MATLAB oferecidos por laboratrios, empresas Juniores e pela
Faculdade de Engenharia Mecnica da Universidade Federal de Uberlndia,
e tem sido corrigido e editado desde 2009.
Visando servir como guia para estudo e trabalho na grande rea de
engenharia, com muitos exemplos na rea das engenharias mecnica,
mecatrnica, eltrica e aeronutica, este material um guia para estudo e
consultas. A organizao do livro feita de maneira bastante didtica, para
uma boa compreenso do assunto em questo atravs de linguagem
acessvel e problemas simples, enfatizando hora a teoria e conceitos, hora a
programao envolvida em sua soluo.

NOTA 1: recomendado que o leitor tenha conhecimento prvio de


clculo integral e diferencial, geometria analtica, lgebra linear e noes
mnimas de programao.

NOTA 2: Por diversas vezes palavras da lngua inglesa e suas


"derivaes" so usadas no texto. No contexto de programao, muitas
palavras so "importadas" de outras lnguas e adaptadas para o portugus.
Estes termos so usados em sua forma nativa pela sua adequao ao
contexto e pelo seu uso j bastante difundido no meio tcnico (exemplos:
plotar, setar, etc.).

11
Mtodos numricos para a engenharia

NOTA 3: Este material foi escrito para a verso R2015a do Matlab,


tendo todos os comandos antigos atualizados, entretanto note que para
verses mais novas ou antigas podem haver pequenas variaes de sintaxe
em algumas funes.

12
Uma introduo ao MATLAB

1.a) Por que usar o MATLAB?

O pacote MATLAB extremamente til para solucionar problemas de


engenharia que frequentemente envolvem clculos complexos ou extensos.
muito usado em situaes especficas, como otimizao de processos,
desenho de grficos, interfaces e simulaes, entre outros.
Podemos usar como exemplo de aplicao o otimizador de
aeronaves criado pela Equipe Tucano de Aerodesign. Esse programa utiliza
um tipo de algoritmo de otimizao bastante complicado (algoritmo gentico)
que cria um processo semelhante evoluo de espcies, adaptado a um
problema prtico de engenharia. No caso, ele cria milhares de possibilidades
de modelos aeronaves, dentro de parmetros estabelecidos, e evolui os
modelos, obtendo um modelo muito melhorado e bastante eficiente,
selecionado por uma "evoluo" numrica.
Outro exemplo complexo so os programas que usam o Mtodo dos
Elementos Finitos, muito usado em pesquisas sobre estruturas no LMEst
(Laboratrio de Mecnica de Estruturas Prof. Jos Eduardo Tanns Reis).
Esse tipo de algoritmo basicamente simplifica um problema infinito, como
uma viga, placa, ou uma estrutura qualquer, para um modelo finito. O que se
faz discretizar a estrutura e represent-la por sistemas equaes, escritos
como matrizes. Assim pode-se descrever como uma estrutura complexa se
comportar em uma situao-problema.
Programas como estes so muito elaborados, compostos de vrios
algoritmos simples inter-relacionados. Para criar esses cdigos so
necessrios conhecimentos especficos de certas reas, como aeronutica
ou vibraes, porm, independentemente da rea de engenharia
necessrio que se saiba programar.
Este material pretende ensinar fundamentos de clculo numrico e os
fundamentos da programao em linguagem MATLAB e suas funes mais

13
Mtodos numricos para a engenharia

relevantes para estudantes de engenharia, abordando problemas prticos


reais.

14
Uma introduo ao MATLAB

1.b) Como iniciar o programa?

Para comear, sempre que se for usar o MATLAB til seguir uma
sequncia de raciocnio. Por mais simples que seja o processo a ser feito, e
mesmo que se faa o processo mentalmente, no se deve deixar de faz-lo.
A sequncia de raciocnio a seguinte:

Interpretar o problema e escrever de modo simples como ser


abordado;
Resolver o problema (ou parte dele), manualmente (com calculadora
ou analiticamente) para ter alguns dados seguros para comparar com
os resultados obtidos no Matlab;
Escrever um cdigo funcional em Matlab;
Comparar os dados obtidos manualmente e numericamente.
Fazer o "debug" do cdigo e valid-lo;

Este procedimento parece trabalhoso, porm reduz a possibilidade


de erros, principalmente em programas extensos.
Partindo agora para o programa MATLAB, uma vez instalado em seu
computador, ele deve apresentar as seguintes funcionalidades principais:

Command Window - a rea onde se digitam os comandos a serem


executados pelo programa, como por exemplo: chamar funes,
fazer contas simples, resolver sistemas, plotar grficos, dentre
outros;

Editor - rea de criao de funes, aqui onde o trabalho de


programao feito;

15
Mtodos numricos para a engenharia

Command History - histrico de tudo o que foi digitado na "Command


Window";

Current Directory - o diretrio atual, sobre o qual o MATLAB


trabalha, todas as funes contidas nele podem ser executadas
simplesmente digitando seu nome na "Command Window";

Help - "enciclopdia" contendo todas as informaes sobre o


programa, suas funes, como us-las e teorias envolvidas em seu
desenvolvimento.

16
Uma introduo ao MATLAB

1.c) Principais funcionalidades e aplicaes

O pacote MATLAB comporta um editor de textos ( editor), um


compilador, um ambiente grfico para criao de interfaces ( guide), um
ambiente grfico para programao em diagramas de blocos (simulink) e
inmeras toolboxes para aplicaes especficas. Comummente, um usurio
padro deve ser capaz de criar funes e programas tanto no editor como no
simulink, e neste material iremos cobrir alm destas duas funcionalidades, a
parte de criao de interfaces grficas para programas complexos, a criao
de vdeos, e uma ampla gama de mtodos de clculo numrico muito
usados.

17
Mtodos numricos para a engenharia

2) Operaes com escalares e


matrizes

Usualmente, durante a resoluo de problemas necessrio realizar


operaes matemticas com diferentes complexidades. Seja um problema
simples ou uma anlise complexa e mais elaborada necessrio conhecer
como realizar as operaes primordiais da linguagem adotada. Este captulo
demonstra como executar operaes bsicas com escalares e matrizes,
desde uma simples soma algbrica a uma inverso de matrizes.
Inicialmente deve-se notar que as variveis numricas so sempre
matrizes, mesmo que sejam escalares, para o MATLAB elas sero tratadas
como matrizes 1x1. Isto implica que existem diferenas entre realizar uma
operao (exe: somar, multiplicar, etc.) quando a varivel deve ser tratada
como escalar e quando deve ser tratada como matriz. Por exemplo,
multiplicar dois escalares implica numa multiplicao simples, entretanto,
para multiplicar duas matrizes pode-se desejar uma multiplicao matricial ou
uma multiplicao "elemento a elemento". Estas facilidades e detalhes de
programao sero abordadas a fundo no devido momento, e possibilitam
realizar operaes trabalhosas sem a necessidade de se criar um cdigo
especfico.

18
Uma introduo ao MATLAB

2.a) Escalares

Comandos com escalares funcionam de modo muito parecido aos de

uma calculadora cientfica. Os operadores bsicos so mostrados abaixo.

Operao Exemplo

Soma a+b
Subtrao a-b
Multiplicao a*b
Diviso direta a/b
Diviso inversa a\b
Exponenciao a^b
Radiciao a^(-b)
Raiz quadrada sqrt(a) ou a^(1/2)
Potncia de 10 aeb = a*10^b
Logaritmo neperiano log(a)
Logaritmo na base 10 log10(a)
Mdulo abs(a)
Exponencial exp(a)

Estes comandos so vlidos para escalares e podem ser executados

a partir da janela de comando ou de programas criados no editor de textos. A

seguir so listadas as funes trigonomtricas suportadas pelo programa,

todas em radianos. Para us-las numa expresso matemtica, basta seguir a

regra padro para chamada de funes, usada em qualquer calculadora

cientfica, onde se entra o nome da funo (exe: "sin" ) e em seguida e entre

19
Mtodos numricos para a engenharia

parnteses a varivel na qual se deseja aplicar a funo chamada. Veja o

exemplo:

Funes Trigonomtricas Exemplo

Seno sin(a)
Cosseno cos(a)
Tangente tan(a)
Secante sec(a)
Cossecante csc(a)
Cotangente cot(a)
Arco-seno asin(a)
Arco-cosseno acos(a)
Arco-tangente atan(a)
Arco secante asec(a)
Arco cossecante acsc(a)
Arco cotangente acot(a)
Seno hiperblico sinh(a)
Cosseno hiperblico cosh(a)
Tangente hiperblica tanh(a)
Secante hiperblica sech(a)
Cossecante hiperblica csch(a)
Cotangente hiperblica coth(a)

Ressaltando que estes ltimos comandos esto em RADIANOS, e

que para obter a resposta em graus pode-se realizar a operao matemtica

20
Uma introduo ao MATLAB

padro ( ), ou acrescentar um "d" na chamada (

trocar "sin" por "sind" ).

Nmeros Complexos Exemplo

Parte real real(a)


Parte imaginria imag(a)
Conjugado conj(a)
Mdulo abs(a)
ngulo angle(a)

Uma propriedade bsica, essencial para a programao, a

atribuio de valores a variveis. Ao nomear uma varivel, ou seja, atribuir

um valor a ela, toda vez que se usar aquela varivel se estar usando o

ltimo valor que ela recebeu. Por exemplo:

>>var1 = 5;
>>var2 = (3*var1+5)/10;
>>var3 = asin(sqrt(var2)/var2);
>>resp = var3*180/pi;
>>resp

>>ans =

45

Observe que permitido usar uma funo dentro da outra, como

em asin(sqrt(var2)/var2) por exemplo. Essa mesma linha poderia ter

sido reescrita em outras duas ou mesmo trs linhas, porm mais prtico

escrev-la numa linha s. Tambm importante perceber que ao digitar o

ponto e vrgula ( ; ) no final da linha de comando, o MATLAB executa o

21
Mtodos numricos para a engenharia

comando mas no mostra o valor da resposta, e quando no se usa o ";"

como na linha em negrito, o programa mostra o valor da varivel.

22
Uma introduo ao MATLAB

2.b) Matrizes

Para o programa, todo escalar, vetor, matriz, string, cell-array, handle


ou qualquer outro formato uma matriz. Porm, para quem usa o programa,
h diferenas ao se operar com matrizes. A maioria dos comandos usados
para escalares pode ser usado do mesmo modo para matrizes, sem
nenhuma diferena na sintaxe, porm, se o comando deve ser executado
elemento a elemento na matriz deve-se adicionar um ponto antes do
comando. Por exemplo:

>> matriz_a=magic(2)

matriz_a =

1 3
4 2

>> matriz_b=magic(2)

matriz_b =

1 3
4 2

>> c=matriz_a*matriz_b % multiplicao de matrizes

c =

13 9
12 16

>> c=matriz_a.*matriz_b % multiplicao elemento elemento

c =

1 9
16 4

23
Mtodos numricos para a engenharia

Note tambm que possvel realizar algumas destas operaes em


matrizes linha ou matrizes coluna (informalmente denominadas de vetores),
respeitando as regras de lgebra linear para operaes matriciais.
Para se declarar uma matriz manualmente, deve-se usar vrgulas ( , )
ou espaos para marcar diviso de colunas e ponto e vrgula ( ; ) para marcar
diviso de linha. Veja o exemplo abaixo:

>> a=[1,2;3,4]

ans =
1 2
3 4

Existem certos comandos especficos de matrizes, tais como calcular


determinantes, inversas, transpostas, criar matrizes identidade, entre outros.
Nas funes abaixo, L e C representam o nmero de linhas e colunas da
matriz e "M" representa a prpria matriz em questo e "V" representa um
vetor. Para outras operaes convencionais, siga a tabela de referncia a
seguir:

Matrizes Exemplo

Multiplicao matricial M1*M2


Multiplicao elemento a elemento M1.*M2
Inversa inv(M)
Transposta M'
Determinante det(M)
Matriz identidade eye(L,C)
Matriz nula zeros(L,C)
Matriz de uns ones(L,C)
Matriz aleatria rand(L,C)
Quadrado mgico magic(L)

24
Uma introduo ao MATLAB

Remodelar matriz reshape(M,L,C)


Rotacionar matriz rot90(M)
Somatrio sum(M)
Somatrio cumulativo cumsum(M)
Inverter horizontalmente fliplr(M)
Inverter verticalmente flipud(M)
Diagonalizar diag(M)
Zerar abaixo da diagonal principal triu(M)
Zerar acima da diagonal principal tril(M)
Dimenso de vetor length(V)
Dimenso de matriz size(M)

Caso seja necessrio criar uma matriz com uma estrutura repetitiva,
como um vetor de tempos, no necessrio criar uma estrutura iterativa,
basta usar o operador dois-pontos. Veja o exemplo:

>> tempos=[ t_zero : passo : t_final ];

>> tempos=[0:1:5]
>> ans =
0 1 2 3 4 5

Ou caso necessite de dois vetores de mesmo tamanho, por exemplo


o tempo a posio de uma partcula em MRU, pode-se escrev-los como
uma matriz de duas linhas:

>> tempos_e_posicoes=[ 0:1:5 ; 3:0.1:3.5 ]

>> ans =
Columns 1 through 11
0.000 1.000 2.000 3.000 4.000 ...
3.000 3.100 3.200 3.300 3.400 ...

25
Mtodos numricos para a engenharia

Caso seja necessrio preencher matrizes deste modo e um dos


vetores seja maior do que o outro, o vetor menor ser complementado at
que tenha o mesmo tamanho do vetor maior. Outro modo til para criao de
vetores a funo linspace, pois ocasionalmente se sabe a quantidade de
pontos que um vetor dever ter, mas no se sabe o passo adequado. Por
exemplo, para montar um vetor de 10 pontos, de 0 a 1, como proceder?

>> vetor = linspace(t_inicial , t_final , n_pontos)


>> vetor = linspace(0.1 , 1 , 10)
>> ans =
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1

Outra funo extremamente importante a "meshgrid". Para


descrever numericamente uma funo espacial preciso uma malha, nos
eixos X e Y, para que seja possvel escrever uma funo Z dependente de X
e Y ( Z(x,y) ). Para isso usa-se a funo meshgrid, que retorna duas
malhas, uma para X e outra para Y, dependendo de dois vetores
representativos de X e Y.

>>[malha_x , malha_y] = meshgrid (vetor_x , vetor_y)

Para melhor compreenso, veja o exemplo a seguir:

>> x=[0:0.1:10]; %gera o vetor X


>> y=x; %gera o vetor Y
>> [X,Y]=meshgrid(x,y); %gera as malhas em X e Y
>> Z=3+5*X.*Y-2*X.^2+0.5*Y.^3; %calcula Z(X,Y) - exemplo
>> surf(X,Y,Z) %plota a superfcie da funo Z(X,Y)

26
Uma introduo ao MATLAB

O que a funo meshgrid, e a maioria dos comandos citados, faz no


muito elaborado, porm trabalhoso e demanda certa ateno, que pode
ser mais bem aplicada na soluo do problema de engenharia em si. A
grande vantagem do MATLAB sobre outros softwares a facilidade da
programao, o que evita que se desperdice tempo e esforo realizando
tarefas de programao, que no so diretamente relacionadas soluo do
problema.
De forma similar s matrizes numricas, o tratamento de palavras ou
"strings" de caracteres tambm feito de forma matricial. O estudo destas
variveis ser detalhado no prximo captulo.

27
Mtodos numricos para a engenharia

3) Strings de caracteres
Strings de caracteres so geralmente usados genericamente em
situaes onde h necessidade de um dos seguintes fatores:

Interao com usurio;


Leitura ou criao de arquivos externos ao programa;
Mudana de diretrio;
Menu com diversas opes complexas;

Nestas situaes muito comuns quase obrigatrio o uso e


tratamento de strings de caracteres, seja para uma melhor interao do
programa com usurios ou para um funcionamento adequado do cdigo. Por
exemplo, num programa complexo usual denominar opes diversas por
meio de strings, para facilitar a compreenso do prprio cdigo, e demandar
do usurio que selecione uma destas opes. Outro exemplo a necessidade
de mudar de diretrio para realizar determinada operao, e para realizar
este procedimento preciso usar um string para representar o nome do
diretrio e seu endereo adequado. Outro caso bastante comum a criao
de arquivos para exportao de dados para outros programas, onde preciso
criar vrios arquivos com nomes diferentes, tambm usando a manipulao
de strings.
Em todos estes exemplos essencial que se faa uma manipulao
adequada de strings, de forma a tornar os cdigos viveis e compreensveis.

28
Uma introduo ao MATLAB

3.a) Declarao e uso de strings

A declarao e tratamento de strings segue uma lgica similar das


matrizes de nmeros, tendo suas prprias funes para comandos
especficos. Neste captulo ser adotada a nomenclatura de "S" para strings
e "N" para nmeros. Para declarar uma string deve-se proceder da seguinte
forma:

>> S='palavra'

S =
palavra

Para escrever strings contendo variveis numricas, pode-se


proceder segundo o exemplo abaixo:

>> tempo=200;
>> tempo_str=num2str(tempo);
>> texto=strcat('O tempo de simulao : ', tempo_str,' seg.');
>> disp(texto)
O tempo de simulao :200 seg.

Neste caso uma varivel numrica foi transformada em string e


concatenada com outras strings de modo a formar uma frase complexa.
Posteriormente esta frase atribuda a uma varivel e mostrada do display
do computador por meio do comando "disp". Outras operaes diversas so
melhor exemplificadas na seo seguinte.

29
Mtodos numricos para a engenharia

3.b) Principais funes

As funes mais usuais relacionadas a strings e sua manipulao


so listadas a seguir:

Funes para strings Exemplo

Concatenao strcat(S1,S2,...,Sn)
Cria string em branco blanks(tamanho)
Comparao strcmp(S1,S2)
Localizar termo num texto strfind(S1,S2)
Transformar nmeros em texto int2char(N)
Codificar nmeros em texto char(N)
Transforma decimal em string binrio dec2bin(N)
Remove espaos brancos deblank(S)
Minsculas lower(S)
Maisculas upper(S)
Organiza em ordem crescente sort(S)
Justifica a string strjust(S)
Troca uma string por outra strrep(S1,S2)
Remove espaos antes e depois strtrim(S)

30
Uma introduo ao MATLAB

4) Criao e tratamento de funes


As funes (function) so o principal mecanismo existente em
qualquer linguagem de programao para se criar cdigos funcionais.
Funes, no sentido de programao, podem ser definidas como:

"Funo uma sequncia de comandos que realiza uma sequncia


de aes, sendo necessrio ou no dados de entrada e fornecendo ou no
dados de sada. Esta sequncia de comandos pode ser nomeada e chamada
por outras funes, de modo recursivo."

Este captulo mostra como definir funes, sua sintaxe bsica, define
o que so parmetros de entrada e de sada e como chamar funes.
Tambm mostra como usar "scripts", nested functions e sub-rotinas.
Scripts so funes no nomeadas, que no recebem entradas mas
podem ou no fornecer sadas, estas podem ser chamadas por outros
programas, entretanto so comummente usadas como um 'rascunho' para
testar uma sequncia lgica. Sub-rotinas so funes chamadas por outras
funes, podem ou no conter entradas e sadas, e podem ser chamadas por
vrias funes distintas. Por sua vez a nested-functions so funes dentro
de outras funes, ou seja, escritas no mesmo cdigo, o que permite que ela
seja chamada somente por esta outra funo, restringindo seu uso mas
elevando a velocidade da troca de informao entre as duas.

31
Mtodos numricos para a engenharia

4.a) Scripts

Scripts so sequncias de comandos escritas num arquivo ".m", sem

que haja a chamada "function", nem argumentos de entrada e sada para

outros programas. Na linguagem MATLAB, scripts tem uma caracterstica

fundamental, as suas variveis locais ficam visveis para o usurio aps sua

execuo. Eles funcionam como se o usurio tiver entrado todos os

comandos na janela de comando, ou seja, no de fato um programa, mas

uma sequncia de comandos que pode ser salva.

Por estes fatores, scripts so muito teis durante a fase de debug

(eliminao de erros) de um cdigo, quando h necessidade de conferncia

de valores de variveis. Quando se executa o script e se necessita visualizar

alguma varivel basta digitar seu nome na linha de comando que a varivel

ser mostrada na tela. Por outro lado isto eleva muito o uso de memria

RAM, pois ir deixar a memria ocupada mesmo aps a execuo do cdigo.

Apesar de no conter argumentos de entrada e sada, possvel

chamar variveis globais e utiliz-las no cdigo:

global var1 var2 var3

Seguindo este comando as variveis listadas aps a palavra

"global" estaro disponveis para o script, bem como para todas as funes

ativas no momento.

32
Uma introduo ao MATLAB

4.b) Funes

Funo um conjunto de comandos escritos em sequncia, que


seguem uma linha de raciocnio lgica. Funes possuem ou no
argumentos de entrada e de sada e podem ou no ter sub-rotinas. Para criar
uma funo no editor do MATLAB deve-se digitar o seguinte:

function [sadas] = nome_da_funcao (entradas)


%comentrios

Comandos

Uma funo pode ter vrios comandos e realizar operaes de todo


tipo, desde uma montagem de matriz a clculos muitssimo complexos e
montagem de animaes. interessante que se crie o hbito de comentar
suas funes, uma vez que ir criar muitas e dificilmente se lembrar de
todas elas. Por exemplo, vamos escrever uma funo que calcula a rea de
uma circunferncia. Para isso digite:

function [area] = areacirc (raio)


%esta funcao calcula a rea de uma circunferncia, dado seu raio

area=pi*(raio^2);

Deste modo, quando se digitar na linha de comando o seguinte


comando: ">> areacirc(3)" o programa ir executar a funo areacirc
enviando a ela um dado de entrada que vale 3 e recebendo de volta um
dado de sada que tem o valor da rea de um crculo de raio 3.

33
Mtodos numricos para a engenharia

4.c) Sub-rotinas

Sub-rotinas so funes chamadas por outras funes, elas

geralmente contm argumentos de entrada e de sada, que apesar de no

serem obrigatrios so muito importantes para seu uso. Estas funes

existem para particionar o raciocnio do programador e a organizar um

cdigo, bem como para dividir tarefas especficas para funes especficas.

De maneira geral, programas complexos usam um menu principal,

contendo diversas funes menores, com mltiplas sub-rotinas cada. Abaixo

est um exemplo da organizao de um cdigo complexo, com interface

grfica, que segue algumas leis de hierarquia comuns (organizada em

"rvore").

34
Uma introduo ao MATLAB

Nova
Arquivo anlise

Sair

Banco de
dados Mat. Base Metlico

Mat. PZT Metlico


com PZT

Elemento Metlico
Modelo de viga
MEF Composto

Metlico
Elemento com PZT
Menu principal de placa
Fora
aplicada Simples
Tenso
Gerao
aplicada
Esttica de energia

Fora
aplicada Simples
Anlise Modal
Gerao
de energia
Excitao
Harmnica da base

Simples
Ajuda
Sobre o Tenso Gerao
GetSmart! aplicada de energia

Desta forma comum que haja vrios nveis de sub-rotinas

embutidas umas nas outras, pois comum que uma funo seja usada por

diversas outras. Note que este diagrama ilustra as funcionalidades do

programa, e no quais so as rotinas intercomunicantes e suas diversas sub-

rotinas. Dentro de cada bloco listado acima existem ainda muitas outras

ligaes "invisveis" de variveis e dados transferidos e recebidos que so o

que faz o programa funcionar de fato.

35
Mtodos numricos para a engenharia

Para exemplificar disposto a seguir um exemplo de um cdigo

simples, com apenas uma sub-rotina de clculo. Este programa calcula e

ilustra a animao de uma manivela girando, atravs de uma sub-rotina:

function [] = animamanivela ()
% Esta funo executa a animao de uma manivela, como a de um %
trem a vapor.

r=2; %raio da manivela [m]


L=6; %comprimento do brao [m]
T=2; %perodo [s]
n=30; %nmero de voltas animadas

%Chama a funo 'geramanivela', dando os parmetros de entrada


%(T,r,L) e recebendo os parmetros de sada
%[t,theta,x,y,a,b,h,xc,yc]
[t,x,y,a,b,h,xc,yc] = geramanivela (T,r,L);

%define os valores mximos e mnimos para x e y, para definir o


%tamanho da %janela onde ser desenhada a animao
xmin=-max(a)-1;
xmax=max(a)+max(b)+1;
ymin=-max(h)-1;
ymax=max(h)+1;

%plota a animao ----------------------------------------------

for k=1:n
for cont=length(t)-1:-1:1
tic

plot(x(cont,:),y(cont,:),xc,yc,x(cont,2),y(cont,2),'o',...
x(cont,3),y(cont,3),'o',0,0,'o',-x(cont,2),-
y(cont,2),'o',...
'linewidth',6)
axis equal
axis ([xmin,xmax,ymin,ymax])
title ('Manivela','fontweight','bold')
grid on
s=toc;
pause (t(cont+1)-t(cont)-s)
end
end
%---------------------------------------------------------------

36
Uma introduo ao MATLAB

function [t,x,y,a,b,h,xc,yc] = geramanivela (T,r,L)


%
% Esta funo calcula os pontos usados na animao executada
%pela funo 'animamanivela', uma sub-rotina. gera os valores
%principais da manivela (as duas pontas e a articulao)

w=2*pi/T; %define a velocidade angular


t=[0:1/30:T]; %define o vetor de tempos
theta=t.*w; %calcula o vetor de posies em funo do tempo

%calcula as posies dos dois pontos girantes e da extremidade


%do brao
a=r.*cos(theta);
h=r.*sin(theta);
b=sqrt(L^2-h.^2);

%gera matrizes nulas para x e y, com length(theta) linhas e 3


%colunas, essas %matrizes nulas sero preenchidas com as
%respostas calculadas acima
x=zeros(length(theta),3);
y=zeros(length(theta),3);

%atribui os valores calculados s matrizes resposta x e y


x(:,2)=a;
x(:,3)=a+b;
y(:,2)=h;

%gera uma circunferncia para a animao


alfa=0:0.01:2*pi;
xc=r*37s(alfa);
yc=r*sin(alfa);
%===============================================================

Note que a funo animamanivela no tem argumentos de entrada


nem de sada, pois os valores dos parmetros variveis foram fixados no
incio do programa. Observe tambm que a sub-rotina de clculo,
geramanivela tem vrios argumentos de entrada e de sada e que os
argumentos equivalentes devem ter as mesmas posies tanto na funo
como na chamada. Por exemplo, o vetor de tempos pode ter nomes
diferentes na funo principal e na sub-rotina, porm ele deve sempre ocupar
a mesma posio na chamada e na sub-rotina. Ou seja, quando se transfere
dados de um programa para outro o que importa a posio da varivel na

37
Mtodos numricos para a engenharia

chamada e no ttulo da funo, e no o nome que ela ter dentro de um


programa ou outro.
Entretanto, como conveno adotaremos sempre o mesmo nome
para variveis, independente de em qual rotina ela ser tratada. Esta medida
simples tem "eficcia comprovada" na reduo de erros de programao por
anos de experincia do autor e colaboradores.

Para salvar uma funo deve-se clicar na opo save e salv-la


com o mesmo nome que ela recebeu na chamada, caso isto no seja
obedecido o programa no reconhecer a funo. Quando forem salvas, o
programa deve gerar um arquivo para a funo com a terminao ".m",
similar aos apresentados abaixo.

areacirc.m animamanivela.m

38
Uma introduo ao MATLAB

4.d) Nested functions

Nested functions (funes aninhadas) so funes subalternas,


frequentemente usadas para realizar clculos repetitivos e recursivos. Este
um tipo de funo especfica para solucionar certos problemas, como
resolver numericamente equaes diferenciais. Estas so funes recursivas,
constantemente usadas dentro de loops para clculos pesados, e devem ser
escritas no mesmo cdigo (arquivo) que sua funo superior. Para
exemplificar apresentado um cdigo que calcula o movimento de um
pndulo simples atravs de uma ODE45 usando uma nested function.

function []=pendulo(ang,vzero,comp_corda,massa,coef_at,tempo)
%angulo - graus
%velocidade inicial - rad/s
%comprimento da corda - metros
%massa - quilos
%coeficiente de atrito - (N*m*s)/rad
%tempo - segundos

%------------------------------------conversao de unidades

%define os valores como globais para us-los no ode45


%(subrotina)
global angtheta vz tf l b m;

%atribui o valor dos "input" a outras variveis, para nao


%alterar o %valor das variveis de entrada.
angtheta=ang;
vz=vzero;
tf=tempo;
l=comp_corda;
b=coef_at;
m=massa;

%converte o ngulo recebido em graus para radianos, para us-lo


%nas equaes necessrias.
angtheta=(angledim(angtheta,'degrees','radians'));

%-------------------------------------------clculos

%O 1 elemento o ngulo theta inicial, o 2 elemento a


%derivada

39
Mtodos numricos para a engenharia

%primeira de theta, ou seja, a velocidade angular inicial. esses


%dados so necessrios para o mtodo 'runge-kutta'.
ci=[angtheta,vz];

%Integra as equaoes do movimento definidas por 'f' usando o


%mtodo 'Runge-Kutta', de tzero tf, usando as condicoes
%iniciais, definidas por 'ci'. Chama a nested function
%"mov_pen"
[t,y]=ode45(@mov_pen,[0,tf],ci);

%A primeira coluna de y so os valores de th


th=y(:,1);

%A segunda coluna de y thp (derivada de theta), que a


%velocidade angular do pendulo em cada instante do movimento
thp=y(:,2);

%A aceleracao foi determinada pela derivada da velocidade


%(dthp/dt)
thpp=diff(thp)./diff(t);
n=length(thpp);
thpp(n+1)=thpp(n);

%------------------------------------------grficos

%Abre a janela do grafico


figure(1);

%Define a cor de fundo


whitebg (1,'white');

%Plotam os graficos da posicao e velocidade angulares em funcao


%do tempo e definem as propriedades desses grficos
valores=[th,thp,thpp];
plot(t,valores,'linewidth',2);
axis normal;
grid on;
title('Movimento do pndulo em funo do tempo',...
'fontweight','bold','fontname','Monospaced');
xlabel('Tempo
(segundos)','fontname','Monospaced','fontangle','italic');
ylabel('\theta (t), \theta(t) e
\theta(t)','fontname','Monospaced',...
'fontangle','italic');
legend ('Posio, \theta(t), (rad)','Velocidade, \theta(t),
(rad/s)',...
'Acelerao, \theta(t), (rad/s)','location','best');

40
Uma introduo ao MATLAB

%------------------------------------------subrotina

%y1=theta, y2=theta'(vel.angular)
function dy=mov_pen(t,y)

%permite que a subrotina use as variaveis globais


global l b m;
ll=l;
bb=b;
mm=m;
g=9.81;
y1=y(1,1);
y2=y(2,1);

%define as equaoes do movimento


%angulo
dy(1,1)=y2;

%velocidade
dy(2,1)=-(g/ll)*sin(y1)-bb/(mm*ll^2)*y2;

Com a construo realizada da forma mostrada anteriormente,


possvel criar funes "compostas", mantendo a rotina principal e sua sub-
rotina de clculo num mesmo arquivo. Como j citado anteriormente, isto
permite acelerar o processamento dos clculos.
Esta configurao a mais indicada para a resoluo de equaes
diferenciais muito pesadas, devido grande velocidade de resoluo e
simplicidade de programao . Neste caso, a nested function chamada
"mov_pen" chamada mltiplas vezes pela funo "ode45", dentro da funo
"pendulo".
Vale a pena ressaltar que quanto menos clculos forem feitos num
programa, mais rpido este ser, logo deve-se evitar ao mximo o uso de
loops, pois estes tendem a exigir grandes esforos computacionais. Apesar
de indesejados, os loops so por vezes indispensveis, e devem ser criados
com o mnimo necessrio de clculos internos, realizando tudo que possvel
como pr-processamento ou ps-processamento.
Neste contexto, as funes prontas do MATLAB para tratamento de
dados em matrizes so excepcionais na reduo de custo computacional.

41
Mtodos numricos para a engenharia

Estas funes, as estruturas condicionais, lgicas e as estruturas iterativas


(loops) sero vistas mais a fundo a seguir.

42
Uma introduo ao MATLAB

5) Operadores e estruturas lgicas


Operadores lgicos, condicionais e estruturas iterativas so a base
para a programao de qualquer tipo. Seja uma linguagem bsica ou uma
dita de alto nvel, orientada a objeto, como o MATLAB estas estruturas
fundamentais so essenciais para a criao de qualquer programa.
Para melhor compreenso de seu uso e funcionalidades, neste
captulo estas funes sero descritas e explicadas de maneira metdica,
com diversos exemplos de aplicaes reais. Sero abordadas as estruturas
dos tipos:

Operadores (&&, ||, >, <, ==, etc.)


Condicionais (if, else e elseif )
Iterativas (for e while )
Chaveamento (switch )
Parada (break )

Com estes comandos possvel exprimir quase qualquer processo


lgico de maneira organizada e relativamente simples. Recomenda-se um
estudo prvio do tema "lgica de programao", que convencionalmente a
mesma independente das particularidades de cada tipo de linguagem.
Independentemente do nvel prvio de conhecimento do leitor, h uma
tentativa de simplificar ao mximo a exposio do tema, e so includos
diversos exemplos prticos para consulta e explicao.

43
Mtodos numricos para a engenharia

5.a) Operadores lgicos

Um operador um smbolo que represente uma comparao ou


condio, como igual, diferente, maior que, menor que, entre outros. Os
principais operadores lgicos do MATLAB esto listados abaixo.

Operador Funo

= Varivel da esquerda recebe valor da direita (varivel=valor)


< Varivel da esquerda menor que varivel da direita
<= Varivel da esquerda menor ou igual que varivel da direita
> Varivel da esquerda maior que varivel da direita
>= Varivel da esquerda maior ou igual que varivel da direita
== Igualdade de valores (com sentido de condio)
~= Diferena de valores (diferente ou "no igual")
&& Operador e (dependendo do tipo de dado simples ou
duplo)
|| Operador ou (dependendo do tipo de dado simples ou
duplo)
~ Negao
1 VERDADEIRO / SIM / EXISTE / ATIVO (conveno)
0 FALSO / NO / INEXISTE / INATIVO (conveno)

Estes operadores so por vezes usados livremente em expresses


matemticas (como o caso do operador "=", ou atribuio de valor), ou
dentro de outras funes, com o sentido de comparao, por exemplo.

44
Uma introduo ao MATLAB

5.b) Condicionais 'if', 'elseif' e 'else'

Condicionais so estruturas de comparao, que realizam ou no


uma srie de comandos, dependendo da ocorrncia ou no ocorrncia de
algum fato externo.

Operador IF

if condio
comando 1
comando 2
...
end

Que equivale a: "se X ocorrer, faa Y", se a expresso for verdadeira


os comandos abaixo dela sero executados, se for falsa o programa passa
direto para o "end", e no executa os comandos internos.

if a<50
cont=cont+1;
sum=sum+a;
end

Ou ento:

if expressao 1
comandos 1
if expressao 2
comandos 2
end
comandos 3
end

Por exemplo, podemos considerar uma condio para abrir uma janela
grfica:

45
Mtodos numricos para a engenharia

if ang==0
plot([0,0],'color','k')
axis off
end

Operadores ELSE e ELSEIF

if condio
comandos 1
elseif condio
comandos 2
else
comandos 3
end

Perceba que o operador elseif funciona como um if aps o if


inicial, pois precisa de uma condio, porm o comando else no demanda
condies, sendo que sempre ser executado se a condio anterior a ele
falhar. O operador else sempre a ltima opo, que somente ser
executada se nenhuma condio anterior a ela for satisfeita.

if condio 1
grupo de comandos A
elseif condio 2
grupo de comandos C
else
grupo de comandos D
end

Um exemplo de aplicao uma estrutura condicional de um


programa que faz anlise de reaes esforos:

46
Uma introduo ao MATLAB

if j==1
FORCAS(1)=f_impostos(1);
FORCAS(end)=f_impostos(2);
DESLOCAMENTOS(1)=u_impostos(1);
DESLOCAMENTOS(end)=u_impostos(2);
else
FORCAS(j)=f_livres(j-1);
DESLOCAMENTOS(j)=u_livres(j-1);
end

Convencionalmente, so usadas variveis do tipo "flag" para registrar


a ocorrncia de condies ou eventos. Flags so geralmente nmeros
inteiros, que valem 1 ou 0, e cada valor representa um estado (ativo/inativo)
de algum evento.

47
Mtodos numricos para a engenharia

5.c) Loops 'for' e 'while'

Operadores FOR e WHILE

for varivel = valor_inicial : passo : valor_final


comandos
end

while condio1 && condio2


comandos
end

Para um loop for tem-se um nmero definido de iteraes, e


usado para se realizar processos onde se sabe a quantidade de iteraes.
Por exemplo:

for i=1:length(conect) %para i de 1 at o tamanho do vetor


conect

if ele_pzt==i && pzt_sup==1 %condio dupla


mat_ele_no(i,2)=1;
end
if ele_pzt==i && pzt_inf==1
mat_ele_no(i,3)=1;
end

end

Entretanto um loop while tem aplicao em situaes onde no se


sabe as dimenses do problema como, por exemplo, um programa que
calcula razes de equaes:

while i<1000 && ERRO>(10^(-6))%enquanto as condies no forem


satisfeitas, faa

XI=(E+D)/2;
VALOR_MEDIO=funcao(XI);
if (VALOR_MEDIO*DIREITA)> 0

48
Uma introduo ao MATLAB

D=XI;
DIREITA=VALOR_MEDIO;
else
E=XI;
ESQUERDA=VALOR_MEDIO;
End
ERRO=abs(DIREITA-ESQUERDA); %expresso que muda a condio
i=i+1;

end
Na criao de estruturas iterativas deve-se sempre atentar para o
nmero de iteraes e para as condies de parada. No caso de um loop
"for", o nmero de iteraes definido em sua chamada e, apesar de j ter
um nmero definido de, pode haver uma condio de parada ou continuao
caso algum evento acontea. Neste caso deve-se incluir um comando "break"
que quebre o loop quando a condio acontecer, ou algo que mude o valor
do contador. Entretanto, quando se usa loop "for" geralmente o nmero de
iteraes no ser alterado.
Para loops "while", define-se na chamada a condio de parada, e
deve-se obrigatoriamente criar alguma forma de alterar a condio de parada
dentro do loop, para que quando ela for satisfeita o loop seja finalizado. Caso
no seja includa uma forma de alterar a condio de parada, uma vez que o
loop se inicie ele no ser finalizado, pois no h modificao da condio de
parada, criando o chamado "loop infinito". Loop infinito uma estrutura
iterativa falha, que fora o programa a repetir indefinidamente o contedo do
loop, e deve-se conferir loops "while" com cautela.
Via de regra, recomenda-se criar condies redundantes para o loop
"while", de forma que se imponha a condio desejada (por exemplo:
ERRO>(10^(-6))) mas que se limite o nmero de iteraes totais, caso o loop
no venha a convergir dentro de um nmero de iteraes racional (por
exemplo: i<1000). Quando se cria a condio redundante de limite de
nmero de iteraes deve-se obrigatoriamente criar um "contador", ou seja,
uma varivel que muda de valor a cada iterao, marcando quantas iteraes

49
Mtodos numricos para a engenharia

j foram realizadas (no caso do exemplo acima o contador o "i"). Este


contador deve ser alterado dentro do loop, e no exemplo acima isto feito
com uma expresso simples: i=i+1;, que est fora das estruturas
condicionais do tipo "if", e ser executado a cada iterao.
Na indesejvel situao de um loop infinito ou programa executado
de maneira errada, h a possibilidade de interromper sua execuo, para
tanto deve-se clicar dentro da "command window" e digitar "Ctrl+C", que ir
forar o MATLAB a finalizar todos os programas em execuo.

50
Uma introduo ao MATLAB

5.d) Chave 'switch' e comando 'break'

Operador SWITCH

O comando "switch" cria uma chave, composta de vrias opes, que


orienta o cdigo para uma delas dependendo de alguma condio externa.
bastante usada em menus e cdigos que devem responder de formas
diversas dependendo de alguma condio ou evento. Ele recebe uma
varivel externa (declarada a frente do comando "switch") testa seu valor em
cada "case", executando o case que satisfizer o critrio de comparao. A
varivel do "switch" pode ser de qualquer tipo, porm geralmente um
nmero inteiro ou uma string de caracteres. H tambm a possibilidade de
incluir um caso final, denominado "default", que ser executado na situao
de nenhum outro caso ter sido satisfeito.

switch varivel
case 1
comandos
case dois
comandos
default
comandos
end

Por exemplo, um programa que plota vrios tipos de grficos


dependendo da opo selecionada pelo usurio:

switch caso

case 'placa3d'
%viga ou placa 3D com engastes
surf(dimX*xx, dimY*yy, (dimZ*zz)) %viga
hold on
surf((xx-1), dimY*yy, (dimZ*10*zz)-(dimZ*5))
%'frente'
surf((dimX*xx), (yy-1), (dimZ*10*zz)-(dimZ*5))
%direita'

51
Mtodos numricos para a engenharia

surf((dimX*xx), (yy+dimY), (dimZ*10*zz)-(dimZ*5))


%'esquerda'
surf((xx+dimX), dimY*yy, (dimZ*10*zz)-(dimZ*5))
%'fundo'
hold off

case 'malha'
%plota somente a malha
x=linspace(0,dimX,nelx+1); %vetor de x
y=linspace(0,dimY,nely+1); %vetor de y
[x,y]=meshgrid(x,y); %gera os elementos
z=(x*0)+dimZ+(dimZ/100); %eleva na altura certa
surf(x,y,z);
axis equal
camproj ('orthographic')
tam_el_x=(max(x)/(nelx+1));
tam_el_y=(max(y)/(nely+1));

case 'elemento'
%plota somente um elemento genrico
x=linspace(0,(dimX/(nelx+1)),2); %vetor de x
y=linspace(0,(dimY/(nely+1)),2); %vetor de y
[x,y]=meshgrid(x,y); %gera os elementos
a=(dimX/(nelx+1));
b=(dimY/(nely+1));
z=(x*0);
surf(x,y,z);
hold on
plot3(0,0,0,a/2,0,0,a,0,0,a,b/2,0,a,b,0,a/2,b,0,0,b,0,0,b
/2,...

...0,0,0,0,'marker','o','markerfacecolor','k','markeredgecolor',
'b')

default
%caso nenhum caso seja executado, o programa roda o default
error('Digite um opo vlida!')

end

Neste caso, a varivel que orienta o switch chama-se caso, e como


ela deve ser uma string as opes possveis para ela devem ser escritas
entre aspas simples, 'nome', mas se as opes fossem nmeros no
haveria necessidade das aspas. Note que a opo default ser ativada
somente se o programa no for direcionado para nenhuma das opes
anteriores.

52
Uma introduo ao MATLAB

Comando BREAK

Este comando tem a funo de "quebrar" um loop (encerr-lo), e


usado frequentemente dentro de uma condio, como citado anteriormente,
por exemplo:

for k=1:length(xmax)

if xmax(k)<=xalvo
fprintf('\n%f\n',theta);
break
end

end

53
Mtodos numricos para a engenharia

6) Determinando os zeros de funes


Neste captulo so apresentados mtodos numricos para resolver
equaes do tipo , que no apresentam soluo analtica. Como no
h soluo analtica, adota-se uma abordagem numrica, voltada para
aproximao do resultado real at uma preciso considerada satisfatria.
Para tanto foram desenvolvidos diversos mtodos numricos ao
longo dos anos, melhorando caractersticas de velocidade de convergncia e
estabilidade de soluo. Independente do mtodo, entretanto, deve-se seguir
o procedimento de isolar um intervalo que contm a raiz (geralmente por
meio de grficos) e posteriormente refinar a posio desta raiz com algum
mtodo numrico.
Para determinar em qual intervalo est a raiz podemos usar grficos
e visualizar a funo ou usar o seguinte teorema:

Seja f(x) uma funo contnua em [a,b], se f(a)*f(b)<0, ento existe ao menos
uma raiz de f(x) contida em [a,b].

Isto ocorre pois se , ento e tm sinais


opostos, ou seja, uma negativa e a outra positiva, de forma que a curva
necessariamente passa por zero. Entretanto, no necessariamente a funo
corta o zero somente uma vez, por exemplo quando se tem uma funo do
terceiro grau:

a=-2:0.01:6;
>> b=a.^3-5*a.^2+5;
>> plot(a,b)

54
Uma introduo ao MATLAB

Que neste caso apresenta 3 razes num intervalo [a,b] = [-2,6], e


respeita o teorema acima citado. O problema destas funes apresentarem
mais de uma raiz no intervalo que os mtodos convencionais tendem para
uma das razes, e iro ignorar outras duas que tambm so soluo e
tambm esto dentro do intervalo especificado.
Graficamente a funo citada acima :

Devido possvel existncia de vrias razes num intervalo, como


visto anteriormente, recomenda-se a visualizao da funo em questo
sempre que possvel. Quando se visualiza o intervalo de interesse possvel,
alm de eliminar razes indesejadas, reduzir o intervalo consideravelmente,
acelerando a convergncia do mtodo de refinamento da soluo.
Tambm se apresentam mtodos mais robustos e prticos para a
soluo de equaes deste tipo se valendo de funes prontas do MATLAB,
que novamente simplificam a soluo do problema de engenharia, reduzindo
o tempo de trabalho com problemas 'anexos', como a soluo de equaes.

55
Mtodos numricos para a engenharia

O mtodo mais simples o da bisseo, mas existem tambm outros


mtodos como o Iterativo Linear e o de Newton-Raphson, que chegam
convergncia de forma mais rpida, exigindo uma maior preparao prvia.

56
Uma introduo ao MATLAB

6.a) Mtodo da bisseco

O primeiro mtodo apresentado tambm um dos mais simples e


intuitivos, que consiste em cortar o intervalo [a,b] ao meio diversas vezes
sucessivas, testando cada intervalo para o teorema da existncia de soluo
citado na introduo. Faz-se esta operao at que o intervalo atualizado
seja menor que um erro ( ) definido pelo usurio. Matematicamente isto se
escreve:

Parte-se deste modelo matemtico para se elaborar o modelo


computacional, que tambm bastante simples se escreve:

function []=metodo_bissecao()

E=2;
D=3;

ESQUERDA=funcao(E);
DIREITA=funcao(D);

i=1;
ERRO=abs(DIREITA-ESQUERDA);

while i<1000 && ERRO>(10^(-6))


XI=(E+D)/2;
VALOR_MEDIO=funcao(XI);
if (VALOR_MEDIO*DIREITA)> 0
D=XI;
DIREITA=VALOR_MEDIO;
else
E=XI;
ESQUERDA=VALOR_MEDIO;
end
ERRO=abs(DIREITA-ESQUERDA);
i=i+1;

57
Mtodos numricos para a engenharia

end

disp('Nmero de iteraes:');disp(i)
disp('Intervalo que contm a raz:');disp(E);disp(D)
disp('Erro da aproximao:');disp(ERRO)

E onde "funo" :

function [fun]=funcao(x)

fun=cos(x)+2*log10(x); %funo qualquer

Neste exemplo destaca-se que o loop usado do tipo "while", que


exige um contador (neste caso "i") e uma condio de parada caso o mtodo
no atinja a convergncia (1000 iteraes).
A resposta deste algoritmo o valor mdio do intervalo quando o erro
da ltima iterao for menor que o erro entrado pelo usurio, alm do prprio
valor de erro que pode ser usado para estimar a preciso de clculos
posteriores. Tambm se ressalta que, no caso de no haver raiz no intervalo,
o mtodo ir convergir para o valor mais prximo de zero possvel, ou seja ir
encontrar o ponto com menor mdulo dentro do intervalo.

58
Uma introduo ao MATLAB

6.b) Zeros de funes com comandos do MATLAB

Existem outros mtodos mais complexos, que se valem de funes


anexas e anlise de derivadas para chegar uma aproximao mais robusta
e rpida, entretanto um mtodo simples como o da bisseo consegue
solucionar diversos tipos de problemas prticos, atendendo proposta do
livro. H tambm os programas e funes prontos fornecidos pelo pacote
MATLAB, que so muito versteis e prticos para se usar em problemas de
determinao de zeros.
Neste quesito, o MATLAB fornece uma funo especfica para
solucionar polinmios e outra para funes contnuas em [a,b], similar ao
mtodo da bisseo.

Funo "roots"

Esta funo recebe como dado de entrada os coeficientes de um


polinmio qualquer e devolve as razes deste polinmio. Deve-se utilizar da
seguinte forma:

>> raizes = roots ([C(n), C(n-1), ..., C(1), C(0)])

Realizando um exemplo, pode-se solucionar o seguinte polinmio de


terceiro grau:

>> coef=[2 9 -15 -30];


>> raiz=roots(coef)

raiz =

-5.376077694479660
2.164890398406852
-1.288812703927196

59
Mtodos numricos para a engenharia

Funo "fzero"

Este comando busca uma funo escolhida pelo usurio e dado um


valor inicial, tambm fornecido pelo usurio, busca o zero da funo. Sua
sintaxe a seguinte:

>> x = fzero(@funcao,x0);

Onde "funcao" a funo em questo e "x0" a posio inicial para


disparar o programa de refinaento de soluo.

60
Uma introduo ao MATLAB

7) Resolvendo sistemas lineares


A resoluo de sistemas lineares de equaes so problemas usuais
em engenharia e em outras reas afins, e existem diversos mtodos
conhecidos para sua resoluo (i.e. Gauss-Seidel, Eliminao de Gauss,
Pivotamento parcial, etc.). Felizmente, o MATLAB fornece um pacote de
solues implementadas para a soluo destes problemas na funo
"linsolve", que ser explicada detalhadamente a seguir.
O problema de sistema de equaes lineares geral descrito por:

Onde uma matriz de dimenses x , e e so vetores


de dimenses x . A sintaxe adequada para soluo deste problema :

>> X = linsolve(A,B)

Ou ento, no caso de haverem particularidades nas matrizes ou no


mtodo de soluo desejado, deve-se acrescentar as opes de uso da
funo:

>> X = linsolve(A,B,opts)

61
Mtodos numricos para a engenharia

7.a) Matrizes com propriedades especficas

Matrizes com propriedades especficas apresentam solues


diferenciadas, e que podem por vezes ser mais rpidas que o mtodo
genrico de soluo. Um tipo comum de especificidade que auxilia na
soluo so as matrizes triangulares, seja superior ou inferior.
Por exemplo:

A = [0.1419 0.6557 0.7577 0.7060 0.8235


0 0.0357 0.7431 0.0318 0.6948
0 0 0.3922 0.2769 0.3171
0 0 0 0.0462 0.9502
0 0 0 0 0.0344];

B =[0.1419
0.6915
1.8931
1.0148
1.8354];

Este problema tem soluo invertendo-se a matriz A, e fazendo como


segue:

y1 = (A')\b

y1 =

1.0000
1.0000
1.0000
0
0

Que o mtodo matemtico mais direto de soluo do problema.


Outro mtodo o uso da funo "linsolve", que consiste em definir a opo
adequada de execuo, como visto a seguir:

opts.UT = true; opts.TRANSA = true;

62
Uma introduo ao MATLAB

y2 = linsolve(A,b,opts)
y1 =

1.0000
1.0000
1.0000
0
0

Note que foi definido que opts.UT = true, ou seja, a matriz dada
para o programa triangular superior (UT equivale a "Upper Triangular"). De
forma similar, poderamos fazer o mesmo com matrizes triangulares inferiores
(opts.LT = true, ou seja, "Lower Triangular"). Perceba tambm que foi
definida a opo opts.TRANSA = true , que diz se o problema a ser
resolvido direto ou o conjugado transposto. Veja o exemplo:

opts.TRANSA = true y1 = (A')\b Problema conjugado transposto


opts.TRANSA = false y2 = (A )\b Problema direto

Estas so somente algumas da opes disponveis para acelerar a


resoluo do problema. Existem diversas outras:

Comando Funo
opts.LT Triangular inferior
opts.UT Triangular superior
opts.UHESS Hessenberg superior
opts.SYM Real simtrica ou Complexa Hermitiana
opts.POSDEF Positiva definida (muito usada em Elementos Finitos)
opts.RECT Retangular genrica
opts.TRANSA Transposta conjugada (exemplo acima)

63
Mtodos numricos para a engenharia

Portanto, para se usar os mtodos j implementados no programa,


basta utilizar os comandos prontos da forma exemplificada acima. Entretanto,
por vezes necessrio obter solues passo a passo, ou ento definir novos
mtodos, e para tanto a inverso de matrizes tem um papel essencial. O
processo de inverso de matrizes para soluo de problemas de sistemas
lineares ser explicado a seguir.

64
Uma introduo ao MATLAB

7.b) Mtodo da eliminao de Gauss

Um dos mtodos de soluo mais simples e didticos que existem


o mtodo da eliminao de Gauss. Este mtodo parte do princpio que: " Se
dois sistemas lineares tm a mesma soluo, ento eles so equivalentes. "
Ou seja, pode-se realizar operaes que no alterem o resultado final do
sistema, e estas operaes so as trs seguintes:

1. Troca de linhas (equaes);


2. Multiplicao de linha por constante no nula;
3. Soma de linhas;

Vale notar que estas operaes podem ser realizadas


arbitrariamente, porm devem ser sempre aplicadas em toda a equao, e
no somente na respectiva linha da matriz [A]. Desta forma, o objetivo final
do mtodo transformar um problema geral do tipo em um
problema particular do tipo , onde triangular
superior, obtendo uma soluo mais simplificada.

65
Mtodos numricos para a engenharia

7.c) Clculo de matriz inversa

Uma vez realizada a triangulao da matriz, seja pelo processo de


eliminao de Gauss ou por outro qualquer, esta pode ser facilmente
invertida e solucionada. Partindo deste pressuposto, deve-se ento tentar
resolver "k" sistemas lineares do tipo: , , ..., , sendo a
matriz "A" triangular superior e sendo ela a mesma para todos os sistemas
em questo.
Realizando o processo desta forma, a matriz "A" independente dos
vetores "b", e estas solues podem ser obtidas de uma s vez, fazendo a
eliminao e aplicando a retro soluo (explicada a seguir) para cada vetor
.
Neste contexto, o clculo da inversa de uma matriz somente um
caso particular do problema acima. Tem-se que, a inversa de uma matriz "A"
qualquer, , chamada simplesmente de , dada por:

Vale notar que este processo vlido para uma matriz "A" qualquer,
porm a soluo destes exemplos ser realizada numa matriz "A" triangular
superior.

66
Uma introduo ao MATLAB

7.d) Cdigo para soluo de sistemas lineares

Partindo dos pressupostos explicados anteriormente, pode-se


escrever um cdigo que realize as operaes descritas de modo bastante
simples e eficiente. A seguir apresentado e descrito um programa para
soluo de sistemas lineares pelo mtodo de eliminao de Gauss, que
permite resolver "k" sistemas lineares com uma matriz "A" em comum.

function x=linear_sys_solver(A,varargin)

% Processo de soluo de sistemas lineares por eliminao de


% Gauss
%
% k = n de sistemas lineares
% A = matriz de dimenses nxn
% x = linear_sys_solver (A,b1,b2,b3,...,bk), onde x nxk
% varargin = lista de vetores de termos independentes
%
% Vale notar que a matriz A comum todas as tentativas de
% soluo, e que podem haver vrios vetores b de entrada.
%

b=[varargin{:}];
db=size(b);

% Verificao de sistema quadrado


da=size(A);
n=da(1);
if n ~=da(2),
disp('A matriz no quadrada');
return;
end;

% Verificao do tamanho de b
if n ~=db(1)
disp('Erro na dimenso de b');
return;
end;

% Declarao da matriz estendida


Ax=[A,b];

%% Eliminao de Gauss
for k=1:(n-1)

67
Mtodos numricos para a engenharia

for i=k+1:n
if abs(Ax(k,k)) < 10^(-16),
disp('Piv nulo');
return;
end;
m=Ax(i,k)/Ax(k,k);
for j=k+1:da(2) + db(2)
Ax(i,j) = Ax(i,j)-m*Ax(k,j);
end;
end;
end;

%% Retro soluo
if abs(Ax(n,n)) < 10^(-16),
disp('Piv nulo');
return;
end;

for m=1:db(2)
x(n,m) = Ax(n,n+m)/Ax(n,n);
end;

for k=(n-1):-1:1
for m=1:db(2)
som=0;
for j=k+1:n
som=som+Ax(k,j)*x(j,m);
end;
x(k,m) = (Ax(k,n+m)-som)/Ax(k,k);
end;
end;

Este programa uma implementao bastante simples e direta para


a soluo de sistemas lineares, e exige certos cuidados. Vale ressaltar que
este somente um mtodo entre tantos outros, e que a escolha do mtodo
mais adequado depende fortemente do tipo de sistema em questo.
Para sistemas grandes (maiores que 50x50) com poucos elementos
nulos na matriz "A", um mtodo direto como este apresentaria grandes erros
de arredondamento. Erros que infelizmente no esto no controle do usurio
do mtodo, e so inerentes soluo por este mtodo.
Existem entretanto diversas solues e procedimentos iterativos para
obteno de solues aproximadas, que podem ser uma alternativa mais

68
Uma introduo ao MATLAB

vivel para sistemas de grande porte. Para alunos ainda na graduao em


engenharia pode parecer algo quase surreal, entretanto bastante comum
em problemas de clculo "pesados" ( i.e. elementos finitos, mecnica de
fluidos computacional, transferncia de calor, acstica, etc.) que se obtenha
matrizes e sistemas lineares gigantescos que necessitam de
soluo/inverso. Em problemas de elementos finitos, por exemplo, comum
ter que solucionar matrizes com 5~10 milhes de elementos, mesmo para
problemas relativamente pequenos, em um computador pessoal ou notebook.
Para tanto os mtodos aproximados so essenciais, uma vez que no h
interesse em todas as solues e nem mesmo em todos os elementos da
resposta. Portanto alguns dos mtodos iterativos de soluo de sistemas
lineares valem ser citados.
Para problemas grandes, da ordem de grandeza de alguns milhes
de elementos na matriz "A", o mtodo serial de Gauss-Seidel bastante
indicado. Este mtodo permite uma soluo bastante rpida em
processamento serial, usando somente um processador.
Entretanto, para problemas realmente gigantescos, mtodos como o
de Gauss-Jacobi so mais indicados. Este mtodo (bem como outros
similares) so propostos para processamento em paralelo, usando mltiplos
processadores em clusters de processamento. Apesar de no ser to rpido
quanto o mtodo de Gauss-Seidel usando somente um processador, o
mtodo de Gauss-Jacobi permite o uso de mltiplos processadores, pois
realiza o processo de soluo de forma que um "step" em particular da
soluo no interfere nos outros. O tempo de soluo ento dividido pelo
nmero de processadores empregados, tornando este mtodo muito
eficiente.

69
Mtodos numricos para a engenharia

8) Ajustes de curvas
Neste captulo so apresentadas funes e mtodos de interpolao
e ajuste de curvas, exemplificando como manipular e apresentar
adequadamente dados de experimentos e simulaes de forma prtica. Estes
mtodos so muito teis para realizar aproximaes, que so procedimentos
que todo bom engenheiro deve saber realizar. Uma aproximao ou ajuste de
curva, por exemplo, permite transformar um conjunto grande de dados
experimentais em uma curva simples e cuja equao conhecida.
Por estes e outros motivos essencial que profissionais da rea de
engenharia dominem estes temas com um mnimo de destreza. No MATLAB
existem vrias formas de se ajustar curvas, pode-se usar desde uma simples
regresso linear a uma funo polyfit. Nesta seo apresentaremos os
mtodos usuais de ajuste de curvas.

70
Uma introduo ao MATLAB

8.a) Regresso linear pelo Mtodo dos Mnimos Quadrados

A regresso linear o processo que determina qual equao linear


a que melhor se ajusta a um conjunto de pontos, minimizando a soma das
distncias entre a linha e os pontos elevadas ao quadrado. O ajuste feito
atravs de uma funo y=mx+b. Para entender esse processo, primeiro
consideraremos o conjunto de valores de temperatura tomados na cabea
dos cilindros de um motor novo. Ao plotar esses pontos, evidente que
y=20x uma boa estimativa de uma linha que passa pelos pontos, como
mostra a figura.

x=0:5;
y=[0 20 60 68 77 110];
y1=20.*x;
plot(x,y,'o',x,y1)

71
Mtodos numricos para a engenharia

Para medir o erro da estimativa linear utilizamos a distncia entre os


pontos e a reta elevada ao quadrado. Este erro pode ser calculado no Matlab
utilizando os seguintes comandos:

erro = sum((y-y1).^2);

Para esse conjunto de dados o valor do erro 573. Pode-se calcular


o erro quadrtico mdio (MSE) de 95.5 com essa instruo:

mse=sum((y-y1).^2)/length(y);

Aprendemos anteriormente como calcular uma equao linear que


melhor se ajusta ao conjunto de dados. Entretanto, podemos utilizar uma
tcnica similar para calcular uma curva atravs de uma equao polinomial:

Observe que a equao linear tambm um polinmio de grau 1. Na


figura abaixo plotamos os grficos com os melhores ajustes para polinmios
de grau 1 a 5. Ao aumentar o grau do polinmio, aumentamos tambm o
nmero de pontos que passam sobre a curva. Se utilizamos um conjunto de
n+1 pontos para determinar um polinmio de grau n, todos os pontos n+1
ficaro sobre a curva do polinmio.

72
Uma introduo ao MATLAB

73
Mtodos numricos para a engenharia

74
Uma introduo ao MATLAB

Estes grficos mostram como a preciso do ajuste aumenta


gradualmente, medida que aumenta o grau do polinmio interpolador. Os
grficos superiores representam o ajuste de curva, e os grficos inferiores os
erros residuais. Vale notar que quanto maior o grau do polinmio melhor o
ajuste, entretanto tambm maior sua complexidade. Vale tambm notar que
possvel e usual discretizar um conjunto de dados "trecho a trecho", usando
diversos polinmios de baixa ordem, para obter uma melhor aproximao.
Considerando ento esta teoria de ajuste de curvas pelo mtodo dos
mnimos quadrados, apresentado a seguir um programa aberto para
realizar esta operao:

function []=linear_mmq()

%===============================================================

%Programa para linearizao de curvas pelo Mtodo dos Mnimos


Quadrados
%
%Este algoritmo calcula os coeficientes do melhor polinmio
%possvel para representar os dados experimentais representados
%por x e y, dado o grau do polinmio escolhido. Tambm desenha
%o grfico linearizado sobre os dados experimentais. Os
%coeficientes so dados na seguinte ordem:
%
% a+bx+cx+...+nx^n
%
%===============================================================

clear all;close all;clc;

%entrada de dados experimentais


x=0:1:10;
y=[4.44 4.83 5.155 5.43 5.67 5.88 6.065 6.23 6.37 6.45 6.51];

%===============================================================

%cdigo efetivo

x=x(:,1:length(x));
y=y(:,1:length(y));

figure(1)

75
Mtodos numricos para a engenharia

plot(x,y,'o')
xlabel('Tempo [s]')
ylabel('Voltagem [V * 10^(-1)]')
grid on

grau=input('Entre o grau do polinmio: ');

for i=1:(grau+1)
B(i,1)=sum(y.*(x.^(i-1)));
for j=1:(grau+1)
A(i,j)=sum(x.^(i+j-2));
end
end

alfas=inv(A)*B;

for ii=1:length(x)
fi(ii)=0;
for jj=1:(grau+1)
fi(ii)=fi(ii)+alfas(jj)*x(ii)^(jj-1);
end
end

figure(2)
plot(x,y,'o',x,fi,'linewidth',2)
title('Descarregamento do Capacitor no tempo',...
'fontweight','bold')
xlabel('Amperagem [mA]','fontweight','bold')
ylabel('Voltagem [mV]','fontweight','bold')
legend(strcat('Coeficientes:',num2str(alfas(1)),...
num2str(alfas(2)),'X'))
grid on

ym=mean(y);
st=sum(((y-ym).^2));
sr=sum(((y-fi).^2));
r=sqrt(((st-sr)/st));

clc;

disp('Coeficientes:')
alfas
disp('Erro ao quadrado:')
r

saveas(gcf,'Linearizao_mmq.jpg')

76
Uma introduo ao MATLAB

8.b) Funo polyfit

A funo que calcula o melhor ajuste de um conjunto de dados com


um polinmio de certo grau a funo polyfit. Esta funo tem trs
argumentos: as coordenadas x e y dos pontos de dados e o grau n do
polinmio. A funo devolve os coeficientes, em potncias decrescentes de x,
no polinmio de grau n que ajusta os pontos xy.

polyfit(x,y,n)

Vamos agora utilizar essa funo para fazer o ajuste linear e de 2


grau dos dados de temperatura na cabea dos cilindros.

% entrada dos dados


x=0:5;
y=[0 20 60 68 77 110];

%regresso linear
coef=polyfit(x,y,1);
m=coef(1);
b=coef(2);
ybest=m*x+b;
plot(x,y,'o',x,ybest)

%regresso polinomial de grau 2


coef=polyfit(x,y,2);
a=coef(1);
b=coef(2);
c=coef(3);
ybest=a*x.^2 +b*x + c;
plot(x,y,'o',x,ybest)

Ateno ao fazer a aquisio dos dados da funo polyfit. No se


esquea que o nmero de coeficientes igual a n+1, sendo n o grau do
polinmio.

77
Mtodos numricos para a engenharia

8.c) Funo polyval

A funo polyval serve para calcular o valor de um polinmio em um


conjunto de pontos. O primeiro argumento da funo polyval um vetor que
contm os coeficientes do polinmio (no caso anteriror, coef) e o segundo, o
vetor de valores x para qual desejamos conhecer os valores do polinmio.

ybest = polyval(coef,x);

78
Uma introduo ao MATLAB

8.d) Basic fitting

O Basic fitting uma ferramenta que permite realizar regresses de


maneira mais intuitiva. muito eficiente na comparao de ajustes de curva
de polinmios de graus diferentes, pois com poucos comandos possvel
plotar as curvas de diferentes regresses. Para utilizar o basic fitting, primeiro
plote o grfico xy. Na janela do grfico (Figure1) acesse: Tools > Basic
Fitting.

Abrir a seguinte janela:

79
Mtodos numricos para a engenharia

esquerda h a janela do basic fitting. Nela podemos escolher o tipo


de ajuste de curva, selecionando o check box da regresso. possvel
escolher mais de um tipo de ajuste e comparar os valores na janela da
direita. Selecionando a opo Show Equations, o Matlab mostra a equao
de cada polinmio no grfico.

80
Uma introduo ao MATLAB

9) Interpolaes
So apresentadas neste captulo as funes e mtodos de
interpolao, exemplificando como manipular e apresentar adequadamente
dados de experimentos e simulaes de forma prtica. Uma interpolao
permite transformar um conjunto com poucos pontos em uma curva bem
definida com resoluo adequada, mesmo que isto seja um processo
aproximado.

81
Mtodos numricos para a engenharia

9.a) Interpolao linear e por spline cbica

Nessa seo vamos apresentar dois tipos de interpolao: a


interpolao linear e a interpolao com spline cbica. A interpolao linear
estima os valores traando uma reta entre os pontos definidos. J a
interpolao spline considera uma curva suave que se ajusta aos pontos
atravs de um polinmio do terceiro grau.

100
data 2
spline
90
linear

80

70

60

50

40

30

20
1 2 3 4 5 6 7

Interpolao linear e spline

Interpolao Linear

uma das tcnicas mais utilizadas para estimar dados entre dois
pontos de dados. A interpolao linear calcula o valor de uma funo em
qualquer ponto entre dois valores dados usando semelhana de tringulos.

82
Uma introduo ao MATLAB

A funo interp1 realiza a interpolao usando vetores com os


valores de x e y. A funo supe que os vetores x e y contm os valores de
dados originais e que outro vetor x_new contm os novos pontos para os
quais desejamos calcular os valores interpolados y_new. Para que a funo
opere corretamente, os valores de x devem estar em ordem crescente, e os
valores x_new devem estar em ordem e dentro do intervalo dos valores de x.
A sintaxe apresentada a seguir:

>> Interp1(x, y, x_new)


>> Interp1(x, y, x_new, linear)

Esta funo devolve um vetor do tamanho de x_new, que contm os


valores y interpolados que correspondem a x_new usando interpolao linear.
Para esse tipo de interpolao no necessrio escrever linear como ltimo
parmetro da funo, j que esta a opo default. A fim de ilustrar o
emprego da funo, vamos usar os seguintes dados de medies de
temperatura tomadas na cabea de um cilindro de um motor novo.

Tempo (s) Temperatura (F)

0 0
1 20
2 60
3 68
4 77
5 110
0 0

83
Mtodos numricos para a engenharia

Para se manipular essas informaes, deve-se armazen-las na


forma matricial da seguinte maneira.

tempo = [0 1 2 3 4 5 ];
temperatura = [0 20 60 68 77 110];

Pode-se realizar a interpolao de duas formas: ponto a ponto ou por


vetores.

% Ponto a ponto
y1=interp1(tempo,temperatura,3.4);

% y1 corresponde a temperatura para o tempo igual a 3.4


%segundos.

Ou ento:

% Vetores
y2=interp1(tempo,temperatura,[1.8 2.2 3.7 4.3]);
x_new=0:0.2:5;
y3=interp1(tempo,temperatura,x_new);

% y2 corresponde temperatura para os tempos a 1.8,2.2,3.7 e


% 4.3 segundos.
% y3 corresponde temperatura para os tempos de 0 a 5 segundos
% com passo de 0.2s.

Interpolao Spline

Uma spline cbica uma curva contnua construda de modo que


passe por uma srie de pontos. A curva entre cada par de pontos um
polinmio de terceiro grau, calculado para formar uma curva contnua e uma
transio suave entre os pontos. No Matlab, a spline cbica se calcula com a
funo interp1 usando um argumento que especifica interpolao spline
cbica no lugar da interpolao linear (default). O procedimento para o bom

84
Uma introduo ao MATLAB

funcionamento dessa interpolao o mesmo da linear do que diz respeito


aos valores de x_new, ou seja, todos os elementos em ordem crescente.

Interp1(x,y,x_new,spline)

Que devolve um vetor do mesmo tamanho de x_new com os valores


de y interpolados correspondentes usando splines cbicas. Como ilustrao,
suponha que queremos usar interpolao spline para calcular a temperatura
na cabea dos cilindros em t=2.6s. Podemos usar as seguintes instrues:

tempo=[0 1 2 3 4 5];
temperatura=[0 20 60 68 77 110];

temp1 = interp1(tempo, temperatura, 2.6, 'spline')

% Para calcular a temperatura em instantes diferentes, podemos


utilizar % o seguinte comando:
temp2 = interp1(tempo,temperatura,[2.6 3.8],'spline')

% ou
temp3= interp1(tempo, temperatura, x_new,'spline')

Suponha que tenhamos um conjunto de dados que obtivemos de um


experimento. Depois de plotar esses pontos, vemos que em geral caem em
uma linha reta. Entretanto, se traamos uma linha reta que passe por esses
pontos, provvel que apenas alguns deles fiquem na linha. Podemos utilizar
ento o mtodo de ajuste de curvas de mnimos quadrados para encontrar a
linha reta que mais se aproxima dos pontos, minimizando a distncia entre
cada ponto e a linha. Ento, possvel que essa linha otimizada no passe
por nenhum dos pontos.

85
Mtodos numricos para a engenharia

9.b) Mtodo de Lagrange

Para se realizar uma interpolao sem auxlio direto do MATLAB,


existem tambm diversas alternativas e mtodos numricos, sendo um
destes o mtodo de Lagrange. Neste mtodo deve-se considerar um conjunto
de n+1 pontos ( ), sendo k de 1 n distintos, e tambm deve-se
considerar um polinmio interpolador do tipo:

Sendo um polinmio de grau n que satisfaz as condies a


seguir:

Desta forma tem-se que todos os termos onde so nulos,


resultando simplesmente em:

Estes polinmios so denominados polinmios de Lagrange,


que so obtidos pelo seguinte procedimento:

Para exemplificao, pode-se considerar a tabela abaixo:

86
Uma introduo ao MATLAB

x f(x)

0.0 4.00
0.2 3.84
0.4 3.76

Esta tabela d os valores de x e f(x) para um problema qualquer.


Para obter os polinmios de Lagrange para este problema faz-se:

Retornando ento estes resultados para a equao do polinmio tem-


se:

Que o polinmio ajustado para este problema. Uma vez entendida


a teoria, criado um cdigo para executar o mtodo de Lagrange:

function []=lagrange()
%polinomio de lagrange

% inicializao
clc;close all;clear all

% entrada de dados
x=[0 80 200 380 500 550];
y=[0 300 700 1200 1000 600];

% montagem dos vetores

87
Mtodos numricos para a engenharia

n=length(x);
xp=min(x):((max(x)-min(x))/fator_ampliacao):max(x);
np=length(xp);

% processo iterativo
for i=1:np
p(i)=0; %calcular o polinomio no ponto xp(i)
for k=1:n
L=1;
for j=1:n
if j~=k
L=L*(xp(i)-x(j))/(x(k)-x(j)); %polinomio de
lagrange
end
end
p(i)=p(i)+y(k)*L;
end
end

disp('Interpolao por Lagrange')


xp'
disp('Pontos interpolados')
p'

plot(xp,p,'.b',x,y,'*r')
grid on

Que o cdigo que realiza todo o processo descrito


matematicamente acima.

88
Uma introduo ao MATLAB

9.c) Mtodos diversos e consideraes

Vale notar que existem diversos outros mtodos de interpolao de


pontos, i.e. mtodo de Newton, Linear, Polinomial, Trigonomtrica, etc..
Entretanto, independentemente do mtodo escolhido, algumas consideraes
devem ser feitas.
Numa interpolao, seja qual for, necessrio que os pontos sejam
distintos, e preferencialmente bem espaados, pois caso existam pontos
muito prximos provavelmente a interpolao dar resultados com grandes
erros na regio dos pontos prximos. Uma interpolao, via de regra, serve
para indicar uma tendncia ou ento descrever comportamentos locais, at
mesmo ocasionalmente para descrever quantitativamente o comportamento
de um conjunto de pontos.
Um ajuste de curva por outro lado usa uma abordagem diferente,
fornecendo uma tima aproximao qualitativa, mas sem grande significado
matemtico.

89
Mtodos numricos para a engenharia

10) Derivao numrica

Este captulo demonstra como executar uma derivao numrica em


vetor de dados, que representa, por exemplo, a posio de uma partcula no
tempo, e encontrar seus valores de mximos e mnimos, pontos de inflexo e
dados relevantes. desnecessrio dizer o quanto o processo de derivao
de funes ou curvas relevante e importante para o dia-a-dia da
engenharia, e obviamente deve ser estudado e dominado adequadamente.
Alm do simples processo de derivao numrica, muitas vezes
necessria a obteno de pontos chave e propriedades de funes, sendo
estes mtodos melhor detalhados neste captulo.

90
Uma introduo ao MATLAB

10.a) Derivao vetorial

Para fazer uma derivada numrica preciso compreender como um


vetor estruturado. Um vetor basicamente uma sequncia de pontos que
podem ser representados por uma funo, assim, existe uma diferena entre
um valor na posio (i) e o prximo (i+1), assim, se considerarmos esta
diferena como um diferencial de clculo, podemos fazer a derivao usando
a ideia da soma de Riemann. A derivada de uma funo num ponto a
inclinao da reta que tangencia esse ponto. Se a derivada vale zero o ponto
crtico, se ela muda de sinal da esquerda direita o ponto de mximo ou
mnimo local ou global. J sobre derivada segunda, se ela for negativa num
ponto crtico, o ponto de mximo, caso seja positiva o ponto de mnimo.
Para calcular a derivada num ponto o programa seleciona os dois
pontos imediatamente ao lado do ponto desejado e traa uma reta passando
por eles. A inclinao dela retornada como a derivada no ponto. O vetor
das derivadas ser sempre um elemento menor que o original. Observe que
a derivada aproximada, por isso, quanto mais pontos melhor ser a
aproximao.

Funo de derivao diff(x) e diff(y)

Este comando calcula a diferena entre dois pontos vizinhos, num


vetor qualquer (se for uma matriz, cada coluna funciona como um vetor), e
devolve um novo vetor com as diferenas entre os pontos. Usando esse
comando, a derivada "yp" igual a:

>> derivada = diff(vetor_posies)/diff(vetor_tempos);

J a derivada segunda pode ser calculada por:

91
Mtodos numricos para a engenharia

>> derivada2 = diff(derivada)/diff(vetor_tempos);

Note que, como a funo diff calculada entre dois pontos


sucessivos, o vetor derivada ser sempre uma posio menor que o vetor
original, por isso pode-se fazer uma aproximao na ltima posio do vetor
derivada:

>> derivada(end+1) = derivada(end);

Esta aproximao, apesar de gerar um erro matemtico, pode ser


feita uma vez que uma posio num vetor de milhares de posies causar
um distrbio (geralmente) desprezvel. Este procedimento, ou algum similar,
deve ser feito para que a derivada segunda possa ser feita, pois o vetor de
tempos tem originalmente uma posio a mais que o vetor derivada.

92
Uma introduo ao MATLAB

10.b) Localizao pontos crticos

O comando "find" determina os ndices dos locais do produto para os


quais a derivada tp(k) igual a zero ou o mais prximo possvel disto; esses
ndices so ento usados com o vetor contendo os valores de tp para
determinar os locais de pontos crticos. A seguir est um cdigo de
diferenciao numrica de uma funo y=f(x), onde y=x. Este cdigo calcula
a derivada numrica da funo, plota a funo e a derivada e informa o ponto
crtico com um erro de no mximo o tamanho de um passo do vetor inicial.

function derivacao_numerica
% Esta funo um exemplo do uso da funo diff de derivao
numrica
clc

t=-5:0.001:5;
tp=diff(t);

y=t.^2;
yp=diff(y)./diff(t);
yp(end+1)=yp(end);

prod = yp(1 : length(yp) - 1 ) .* yp(2 : length(yp) );


ponto_critico = tp(find (prod < 0) );

plot(t,y,t,yp)
legend('f(x)','f''(x)')
title(strcat('Ponto crtico:',num2str(ponto_critico)))
grid on;

93
Mtodos numricos para a engenharia

Perceba que o ponto de mnimo da parbola coincide com o ponto


onde a reta cruza o zero at a terceira casa decimal, mostrando que a
derivada numrica realmente eficiente, desde que se tenha uma quantidade
razovel de pontos, ou seja, desde que haja uma discretizao adequada.

94
Uma introduo ao MATLAB

11) Integrao Numrica

O processo de integrao numrica pode ser entendido de duas


formas, primeiro, pelo conceito de soma de Riemann, ou seja, um somatrio,
e segundo, como um mtodo de solucionar EDOs. Neste captulo sero
estudados os mtodos baseados na soma de Riemann, e posteriormente, em
outro captulo, a soluo de EDOs propriamente dita.
Existem vrios mtodos de integrao numrica, dentre eles
estudaremos um modelo mais simples, que a regra do trapzio repetida e
um modelo um pouco mais elaborado, que a regra de Simpson repetida.
Ambos os mtodos visam determinar a rea abaixo de uma curva, por
processos iterativos baseados na soma de Riemann.

95
Mtodos numricos para a engenharia

11.a) Regra do trapzio

Uma integral a rea abaixo de um grfico, ento, se dividirmos o


grfico em uma quantidade suficiente de parcelas, pode-se aproximar a rea
dessas parcelas por reas de trapzios. Este o princpio da regra do
trapzio. Somando-se a rea de todas as parcelas se obtm uma integral
aproximada da funo, com um erro relativamente pequeno. A regra dada
por:

Existe uma funo do MATLAB que calcula a regra do trapzio


(trapz) que realiza mltiplas vezes (uma vez para cada intervalo entre
pontos) o procedimento mostrado acima.

96
Uma introduo ao MATLAB

11.b) Regra de Simpson 1/3

Um outro algoritmo que realiza uma operao similar de ao comando


quad, ou a funo integra_simpson, que fazem a integral pela regra de
Simpson. A diferena que este comando considera tambm alguns pontos
prximos ao Xo e X1 para calcular a integral no intervalo. A seguir est um
algoritmo que compara a integrao pela regra do trapzio e pela regra de
Simpson.

function [] = trapezio_x_simpson ()
%este algoritmo compara a integraao numrica pela regra do
trapzio com
%a integrao pela regra de simpson.

x=[0:0.1:10];
y=sin(x.^3)+x;

figure (1)
plot(x,y,'red')
simpson_do_grafico_experimental=INTEGRA_SIMPSON(x,y)
trapz_do_grafico_experimental =trapz(x,y)

%===============================================================

Onde o algoritmo da funo integra_simpson, que funciona de modo


similar, mas no igual funo quad, dado abaixo.

function [integ] = INTEGRA_SIMPSON (x,y)

n=201;
k=x;
xx=linspace(k(1),k(end),n);
f=interp1(k,y,xx,'spline');
dx=(k(end)-k(1))/(3*n);

integ=(dx*(sum(4*f(2:2:end-1))+sum(2*f(3:2:end-
2))+f(1)+f(end)));

%===============================================================

97
Mtodos numricos para a engenharia

simpson_do_grafico_experimental = 49.7540

trapezoidal_dos_experimentais = 49.7172

Note que mesmo com os pontos marcados com um passo muito


grande a diferena pequena, mostrando que no so necessrios mtodos
muito mais precisos para aplicaes simples. Tambm vale ressaltar que
usamos uma funo que no pertence ao MATLAB (integra_simpson), pois
ela permite que se altere o nmero de pontos e a funo de interpolao
usada na integrao numrica. Essas diferenas permitem que se calcule a
integral inclusive de curvas e no somente de funes como o comando
quad faz, pois numa amostragem experimental os dados obtidos nem
sempre definem uma funo. Um exemplo disso uma curva obtida em
laboratrio, que aparentemente bem definida, mas localmente no pode ser
definida por nenhum tipo de mtodo. Assim, usa-se uma spline ou um

98
Uma introduo ao MATLAB

resample como nested function da funo integra_simpson para tratar os


dados amostrais, transformando-os em pontos de uma funo bem definida,
para ser possvel calcular uma integral aproximada. Esta aproximao
muito til em casos onde os dados so to irregulares localmente que nem
mesmo uma interpolao de alto grau (grau 10), ou uma spline podem ser
aplicadas com preciso satisfatria.

Dados amostrais

99
Mtodos numricos para a engenharia

Zoom de uma regio

Curva ajustada

simpson_do_grafico_experimental = 3.2396e+003

trapz_ do_grafico_experimental = 3.2398e+003

simpson_do_grafico_interpolado = 3.2395e+003

trapz_do_grafico_interpolado = 3.2397e+003

100
Uma introduo ao MATLAB

Perceba que o mtodo se mostra eficiente, pois os resultados obtidos


para os dados sem tratamento e para a funo interpolada so muito
prximos.

101
Mtodos numricos para a engenharia

12) Soluo Numrica de EDOs


Equaes diferenciais de primeira ordem (do ingls "Ordinary
Differential Equations", ou ODEs) so equaes que podem ser escritas da
seguinte forma:

Onde x a varivel independente.

A soluo da equao diferencial de primeira ordem a funo y =


f(x), tal que f(x)=g(x,y). A soluo de uma ODE geralmente uma famlia de
solues e a condio inicial necessria para especificar uma nica
soluo. Enquanto que muitas vezes as solues analticas para as ODEs
so preferveis, muitas vezes elas so muito complicadas ou inviveis. Para
esses casos, necessrio utilizar uma tcnica numrica. As mais comuns
so a de Euler e de Runge-Kutta, que aproximam a funo utilizando a
expanso da srie de Taylor.

102
Uma introduo ao MATLAB

12.a) Mtodo de Euler ou Runge-Kutta de 1 ordem

So os mtodos mais populares para resoluo de ODEs. O mtodo


Runge-Kutta de primeira ordem (ou mtodo de Euler) utiliza expanso de
Taylor de primeira ordem, o mtodo de Runge - Kutta de segunda ordem (ou
mtodo de Heun) utiliza da expanso de Taylor de segunda ordem, e, assim
por diante. Sendo o mtodo de Euler igual ao mtodo de Runge-Kutta de
primeira ordem. A equao da integrao Runge-Kutta de primeira ordem a
seguinte:

Esta equao estima o valor da funo usando uma linha reta que
tangente funo em , como se mostra a figura abaixo. Para calcular o
valor de usamos um tamanho de passo h=(b-a) e um ponto de partida ;
se usa a equao diferencial para calcular o valor de . Uma vez
determinando o valor de , podemos estimar o valor de :

A representao grfica deste procedimento a seguinte:

103
Mtodos numricos para a engenharia

Posio dos pontos no mtodo de Euler

104
Uma introduo ao MATLAB

12.b) Mtodos de Runge-Kutta e de Adams-Bashforth

A teoria usada nos mtodos de aproximao de equaes


diferenciais apresentada aqui se baseia na aproximao da EDO por sries,
expandidas at certo termo que calculamos e julgamos como sendo o
"melhor" (levando em conta custo computacional e preciso desejada). A
seguir fazemos a comparao entre as aproximaes de 1, 2, 3, 4 ordens
e o mtodo de Adams-Bashforth, atravs de um algoritmo especfico para
esta comparao (EDO_SOLVER, ver material anexo do curso), mostrando
seguir os mtodos de resoluo citados:

function []=EDO_SOLVER()

%===============================================================

%INICIALIZAO E ENTRADA DE DADOS


clear all; close all; clc;

%NMERO DE PONTOS UTILIZADOS


n=500; %numero de ptos

%X INICIAL
x(1)=0; %abcissa inicial

%X FINAL
x(n)=10; %abcissa final

%Y INICIAL
y=[0;0]; %condioes iniciais

%Passo
h=(x(n)-x(1))/(n-1);

%===============================================================

%TODOS - COMPARAO DAS RESPOSTAS DOS MTODOS

[ye,x]=Euler(n,x,y,h);

[yr2,x]=RK2(n,x,y,h);

[yr3,x]=RK3(n,x,y,h);

105
Mtodos numricos para a engenharia

[yr4,x]=RK4(n,x,y,h);

[yab,x]=ADAMS_BASHF(n,x,y,h);

plot(x,ye,x,yr2,x,yr3,x,yr4,x,yab,'linewidth',2)
grid on
xlabel('X')
ylabel('Y')
title(metodo)
legend('Euler','Runge-Kutta 2','Runge-Kutta 3','Runge-Kutta
4','Adams-Bashforth','location','best')

%===============================================================

%EULER
function [ye,x]=Euler(n,x,y,h)
ye=zeros(length(y),n);
ye(:,1)=y(1);
for j=1:(n-1)
ye(:,j+1)=ye(:,j)+h*fcalc(x(j),ye(:,j));
x(j+1)=x(j)+h;
end
end

%===============================================================

%RUNGE KUTTA 2 ORDEM


function [yr2,x]=RK2(n,x,y,h)
yr2=zeros(length(y),n);
yr2(:,1)=y(1);
for j=1:(n-1)
yr2(:,j+1)=yr2(:,j)+h*fcalc(x(j),yr2(:,j));

yr2(:,j+1)=yr2(:,j)+(h/2)*(fcalc(x(j),yr2(:,j))+fcalc(x(j+1),yr2
(:,j+1)));
x(j+1)=x(j)+h;
end
end

%===============================================================

%RUNGE KUTTA 3 ORDEM


function [yr3,x]=RK3(n,x,y,h)
yr3=zeros(length(y),n);
yr3(:,1)=y(1);
for j=1:(n-1)
k1=h*fcalc(x(j),yr3(:,j));
k2=h*fcalc(x(j)+(h/2),yr3(:,j)+(k1/2));
k3=h*fcalc(x(j)+(3/4)*h,yr3(:,j)+(3/4)*k2);

106
Uma introduo ao MATLAB

yr3(:,j+1)=yr3(:,j)+(1/9)*(2*k1+3*k2+4*k3);
x(j+1)=x(j)+h;
end
end

%===============================================================

%RUNGE KUTTA 4 ORDEM


function [yr4,x]=RK4(n,x,y,h)
yr4=zeros(length(y),n);
yr4(:,1)=y(1);
for j=1:(n-1)
k1=h*fcalc(x(j),yr4(:,j));
k2=h*fcalc(x(j)+(h/2),yr4(:,j)+k1/2);
k3=h*fcalc(x(j)+(h/2),yr4(:,j)+k2/2);
k4=h*fcalc(x(j)+h,yr4(:,j)+k3);
yr4(:,j+1)=yr4(:,j)+(1/6)*(k1+2*k2+2*k3+k4);
x(j+1)=x(j)+h;
end
end

%===============================================================

%ADAMS-BASHFORTH
function [yab,x]=ADAMS_BASHF(n,x,y,h)
yab=zeros(length(y),n);
yab(:,1)=y(1);
for j=1:4
k1=h*fcalc(x(j),yab(:,j));
k2=h*fcalc(x(j)+(h/2),yab(:,j)+k1/2);
k3=h*fcalc(x(j)+(h/2),yab(:,j)+k2/2);
k4=h*fcalc(x(j)+h,yab(:,j)+k3);
yab(:,j+1)=yab(:,j)+(1/6)*(k1+2*k2+2*k3+k4);
x(j+1)=x(j)+h;
end
for j=4:(n-1)
fj=fcalc(x(j),yab(:,j));
fj1=fcalc(x(j-1),yab(:,j-1));
fj2=fcalc(x(j-2),yab(:,j-2));
fj3=fcalc(x(j-3),yab(:,j-3));
yab(:,j+1)=yab(:,j)+(h/24)*(55*fj-59*fj1+37*fj2-9*fj3);
x(j+1)=x(j)+h;
end
end

107
Mtodos numricos para a engenharia

%===============================================================
%SUB-ROTINA - EDO A SER RESOLVIDA
%===============================================================

function F=fcalc(x,y)
%MASSAMOLA RESSONANTE
K=4; M=2; C=0.5; f=1; OM=sqrt(K/M);
ft=f*cos(OM*x);
p=y(1); %posio (x)
v=y(2); %velocidade (v, x)
F(1)=ft/M-(C/M)*v-(K/M)*p; %equao do movimento

end

Note que faz-se a resoluo da mesma EDO por diversos mtodos,


cada um numa sub-rotina, resultando no seguinte grfico comparativo:

Que quando aproximado numa regio de pico mostra a distncia


entre os mtodos.

108
Uma introduo ao MATLAB

Este erro, que aparentemente desprezvel, pode por vezes se


acumular, levando a erros que crescem exponencialmente e fazendo o
mtodo 'divergir'. Para uma anlise mais aprofundada destes mtodos veja
os exemplos anexos ao curso.

109
Mtodos numricos para a engenharia

12.c) Funo ODE45

O Matlab utiliza as funes ODEs para determinar as solues


numricas de equaes diferenciais ordinria. Neste curso abordaremos a
funo ode45.

[x,y] = ode45(nome_da_subrotina,a,b,inicial)

Devolve um conjunto de coordenadas x e y que representam a


funo y=f(x) e se calculam usando o mtodo de Runge-Kutta de quarta e
quinta ordem. O nome_da_subrotina define uma funo f que devolve os
valores de x e y. Os valores a e b especificam os extremos do intervalo do
queremos calcular a funo y=f(x). O valor inicial especifica o valor da funo
no extremo esquerdo do intervalo [a,b]. A funo ode45 pode tambm levar
dois parmetros adicionais. Pode-se utilizar o quinto parmetro para
especificar a tolerncia relacionada com o tamanho do passo; A tolerncia
default de 0.000001 para a ode45. Pode-se utilizar um sexto parmetro
para que a funo exiba imediatamente os resultados, trao. O valor default
zero, especificando nenhum trao para os resultados. Para exemplificar o
funcionamento da ode45, vamos plotar os grficos das solues analtica e
numrica. No exemplo resolveremos a ODE no intervalo [0,3],
com condio inicial igual a 3.

% arquivo g5.m (o arquivo da funo deve ter o mesmo nome da


%funo)
function dy=g5(x,y)
dy=3*y + exp(2*x);

110
Uma introduo ao MATLAB

%arquivo solveode.m
[x,y_num]=ode45('g5',0,3,3);
y=4*exp(3*x) - exp(2*x);
plot(x,y_num,x,y,'o')
title('Soluo da Equao 5')
xlabel('x');
ylabel('y=f(x)');
grid

Considere o sistema massa mola da figura. O corpo de massa m est


ligado por meio de uma mola (constante elstica igual a k) a uma parede. Ao
se deslocar, o movimento do bloco amortecido por uma fora igual a
(sendo b a constante de amortecimento e a velocidade).

111
Mtodos numricos para a engenharia

Por exemplo, plote os grficos deslocamento pelo tempo e


velocidade pelo tempo, para m=2, k=1, c=0.15, F(t)=0 e condies iniciais
x(0)=5 e x(0)=0.

Para resolvermos o problema necessrio primeiro fazer a


modelagem matemtica para encontrar a EDO que descreve o
comportamento do sistema. Atravs da anlise do DCL do corpo, chegamos
seguinte equao:

Onde F(t) a fora aplicada no bloco.

Para resolver uma EDO de segunda ordem utilizando ode45,


precisamos reduzir a ordem da equao, reescrevendo na forma de um
sistema.

Isolando obtemos:

112
Uma introduo ao MATLAB

Montando o sistema:

Agora cria-se uma funo para implementar o sistema:

function xdot = eqx2(t,x);


% arquivo eqx2.m

m=2; %declarao dos dados do exerccio


k=1;
c=0.15;
xdot = zeros(2,1);
xdot(1) = x(2);
xdot(2) = (1/m)*(-c*x(2)-k*x(1));

%arquivo massamola.m
[t,x] = ode45('eqx2',[0 100],[5,0]);
%tempo de 0 a 100, x = 5, x' = 0
plot(t,x(:,1),t,x(:,2))
grid on

113
Mtodos numricos para a engenharia

Resultado da integrao numrica transiente

114
Uma introduo ao MATLAB

13) Grficos
No contexto de engenharia atual, onde h grande integrao entre
reas distintas em projetos ditos multidisciplinares, onde o marketing e a
aparncia so elementos essenciais de qualquer produto, necessrio uma
maior elaborao das interfaces e grficos dos cdigos. Seja para uma
apresentao, paper, ou relatrio tcnico sempre benfico para um
engenheiro saber criar elementos grficos que transmitam a mensagem
desejada, mas que sejam tambm atraentes e que levem em conta o aspecto
visual em sua apresentao.
Por exemplo, para mostrar os resultados anuais do faturamento de
uma empresa, possvel que estes sejam apresentados como tabelas ou
como grficos de barras. Ambos transmitem a mesma mensagem numrica,
entretanto usando grficos possvel tornar a mensagem mais atraente, e
ainda transmiti-la de modo mais eficaz. Raramente uma pessoa ir decorar
valores numricos de uma tabela, entretanto ao visualizar um grfico
elaborado e chamativo (que representa a tabela) ela ir guardar a mensagem
visual. Por esta abordagem, as duas formas de apresentar os dados no
transmitem a mesma informao, pois por uma forma a mensagem ser
entendida e pela outra no.
Alm destes aspecto, existem diversas situaes onde necessrio
passar informaes tcnicas relativamente complexas para um pblico leigo.
Nesta situao indispensvel uma boa apresentao da mensagem.
Em todo caso, o pacote MATLAB fornece diversas opes para
grficos bi e tridimensionais, que podem tambm ser transformados em
animaes e vdeos.

115
Mtodos numricos para a engenharia

Todos permitem variaes de propriedades visuais para uma melhor


qualidade e ajustes especficos de cor, iluminao, transparncia,
refletividade, cmera, etc.

116
Uma introduo ao MATLAB

13.a) Grficos bidimensionais

Grficos bidimensionais necessitam de dois vetores de valores para


serem plotados, e podem ser modificados de diversas maneiras,
normalmente, quando se trata de uma funo, "plota-se" a varivel
independente em X e a dependente em Y. H muitos tipos de grficos
diferentes, subdivididos com base no tipo de informao que cada um
apresenta.
Os principais tipos de grfico do MATLAB sero apresentados a
seguir com uma breve descrio de sua funcionalidade e aplicaes. Os tipos
pais relevantes e usuais, para engenheiros em geral, sero tratados mais a
fundo, por meio de exemplos e descries mais detalhadas.

Grficos de Linhas

plot Grfico de funes y=f(x)

plotyy Grfico com dois vetores de valores em Y

loglog Escala logartmica nos dois eixos

semilogx Escala logartmica no eixo X

semilogy Escala logartmica no eixo Y

stairs Grfico para dados discretos

contour Grfico de curvas de nvel

ezplot Verso simplificada do "plot"

ezcontour Verso simplificada do "contour"

117
Mtodos numricos para a engenharia

Grficos de Barras

bar Grfico de barras verticais

barh Grfico de barras horizontais

hist Histograma

pareto Grfico de pareto

errorbar Plot com barras de erro

stem Grfico para dados discretos

Grficos de reas

area Plot com rea sombreada

pie Grfico tipo pizza

fill Grfico para geometrias complexas 2D

contourf Curvas de nvel com fundo colorido

image Desenha imagem de arquivo do computador

pcolor Curva de nvel com malha sobreposta

ezcontourf Verso simplificada do "contourf"

118
Uma introduo ao MATLAB

Grficos para Vetores

feather Desenha vetores sobre curva

quiver Desenha um campo vetorial

comet Grfico animado de movimento

Grficos com coordenadas polares

polar Grfico de funes polares

rose Grfico de dados discretos polares

compass Grfico vetorial polar

ezpolar Verso simplificada do "polar"

Grficos de disperso

scatter Grfico de disperso de dados matriciais

spy Grfico que identifica elementos no nulos

plotmatrix Grfico de comparao entre duas matrizes

Uma vez exemplificados, partimos para uma abordagem mais


especfica sobre como aplicar os principais tipos de funes grficas
fornecidas pelo MATLAB.
Inicia-se o estudo pelo caso mais comum, a funo "plot". Para
utiliz-la precisa-se de dois vetores, um em X e um em Y. Por exemplo:

119
Mtodos numricos para a engenharia

function plota_funcao
% Plota funes do tipo y=f(x) e dados em vetores X e Y

x=[-1:0.0001:2.5]; %vetor x
y=0.5*x.^3-x.^2; %vetor y
plot(x,y)

Outras funes bastante teis so a contourf e a pcolor, que


podem, por exemplo, representar distribuies de temperatura numa
superfcie. Abaixo est a parte grfica de um cdigo de transferncia de calor
em placas, que usa estas funes para gerar imagens do objeto em estudo.

figure(2);
%plota grfico plano com os dados exatos das temperaturas em
%cada posio
%da matriz correspondente superfcie.
pcolor(mf);
colorbar;
colormap(jet);
axis equal;
grid on;
xlabel('Comprimento horizontal da placa');
ylabel('Comprimento vertical da placa');
title('Temperaturas na placa (quando temp. centro = 80%
laterais)');

120
Uma introduo ao MATLAB

figure(3);
%plota grfico plano com os dados das temperaturas ajustados.
contourf(mf);
colormap(jet);
axis equal;
grid on;
xlabel('Comprimento horizontal da placa');
ylabel('Comprimento vertical da placa');
title('Temperaturas na placa (quando temp. centro = 80%
laterais)');
colorbar;

Que gera como sada os seguintes grficos tipo "pcolor" e "contourf"


respectivamente:

121
Mtodos numricos para a engenharia

13.b) Grficos tridimensionais

Para desenhar grficos em trs dimenses, necessitamos de trs


matrizes, uma em X, uma em Y e uma funo das outras duas em Z,
normalmente. Este tipo de grfico descreve fenmenos mais complexos,
como a vibrao de uma placa, a distribuio de temperatura sobre uma
superfcie, entre outros. Os principais plots tridimensionais esto listados
abaixo, sendo que alguns so exemplificados:

Linha

plot3 Plota funes e curvas no espao

Desenha vrias curvas de nvel


contour3
sobrepostas
Desenha as curvas de nvel nas paredes
contourslice
da caixa de plotagem

ezplot3 Verso simplificada do "plot3"

Similar a um grfico de malha, porm s


waterfall
desenha as linhas das matrizes

Malha de dados

mesh Plota uma matriz como uma malha

Plota uma matriz como uma malha e


meshc
desenha algumas curvas de nvel
Plota uma matriz como uma malha, similar
meshz
ao mesh

122
Uma introduo ao MATLAB

ezmesh Verso simplificada do "mesh"

stem3 Plota dados discretos no espao

bar2 Grfico 3D de barras verticais

bar3h Grfico 3D de barras horizontais

Linha

pie3 Grfico de pizza em 3D

fill3 Superfcie preenchida no espao

Cria polgonos, dadas as coordenadas dos


patch
vrtices

cylinder Cria um cilindro

ellipsoid Cria um elipside

sphere Cria uma esfera

Superfcies

surf Desenha superfcies

123
Mtodos numricos para a engenharia

Desenha superfcies com cores baseadas na


surfl
iluminao do grfico

surfc Desenha superfcies e as curvas de nvel

ezsurf Verso simplificada do "surf"

ezsurfc Verso simplificada do "surfc"

Movimento

Desenha trajetrias no espao, indicando a


quiver3
intensidade de um parmetro
Desenha trajetrias no espao, em
comet3
movimento
Desenha o campo vetorial de um campo
streamslice
para uma varivel constante

Fluxo

Visualiza a distribuio de dados em


scatter3
matrizes esparsas no espao

Desenha orientao de fluxos com cones


coneplot
indicando o sentido com cones

streamline Desenha orientao de fluxos com linhas

124
Uma introduo ao MATLAB

streamribbon Desenha orientao de fluxos com faixas

Desenha orientao de fluxos com


streamtube
slidos no espao

Os grficos tridimensionais so uma das funes mais teis do


programa, e diferentemente do que pode se pensar, so relativamente fceis
de serem desenhados quando comparados com a dificuldade de se obter os
dados que do origem a eles. Uma das melhores e mais teis funes de
desenho de superfcies a funo surfc, que tambm fornece as curvas de
nvel da funo. Ela pode ser usada para qualquer tipo de matriz,
independendo dessa matriz ter sido obtida experimental ou teoricamente. Por
exemplo, podemos gerar uma superfcie bastante interessante a partir de
manipulaes algbricas, numricas e matriciais:

function superficie_surfc
%esta funo desenha uma superfcie usando a funo surfc

x=[-20:0.1:20];
y=x;

[x,y]=meshgrid(x,y);

z=sqrt(x.^2+y.^2)+0.00000001;
z=sin(z)./z;
z=(z-z.*x+z.*y)*3;

surfc(x,y,z)
axis equal
shading interp
alpha (0.7)

125
Mtodos numricos para a engenharia

Existem outras aplicaes bem mais elaboradas, que exigem


combinaes de vrias funes grficas para gerar um nico grfico final.
Podemos usar como exemplo a modelagem de uma estrutura real, como um
sistema massa-mola simples ou um pndulo, e o grfico de sua animao no
tempo. Todos estes problemas podem ser solucionados usando mtodos
numricos e posteriormente animados usando plots sucessivos, porm para
gerar uma animao preciso primeiro criar o grfico inicial. Por exemplo:

126
Uma introduo ao MATLAB

Este pndulo simples resultado de uma integrao numrica


usando o mtodo de Runge-Kutta de 4 ordem, pelo ODE45 e
posteriormente animado atravs de um loop com mltiplos tipos de grficos
simultneos.

127
Mtodos numricos para a engenharia

De forma similar, este sistema massa-mola desenhado com vrios


plots simultneos. Para desenh-los utiliza-se as funes plot, plot3, surf,
cylinder, sphere e cerca de outras vinte funes de ajuste de propriedades
grficas. Estas animaes podem ser usadas inclusive para criar
demonstraes, como por exemplo o efeito piezoeltrico, ilustrado por uma
animao em MATLAB:

Da mesma forma que os exemplos anteriores este grfico feito


partir de vrios plots sobrepostos e alterao de propriedades. Neste caso
altera-se desde a fonte da letra na legenda iluminao do sistema, para
permitir ilustrar a deformao de um cristal de PZT.

128
Uma introduo ao MATLAB

13.c) Propriedades de grficos 2D

As propriedades dos grficos possibilitam que se tenha uma


apresentao adequada das informaes. Elas so basicamente as
legendas, ttulos, grade e cores, para grficos em duas dimenses. As mais
usadas so apresentadas abaixo com uma breve descrio, e apresentada
uma funo que usa vrios destes comandos.

Legendas

Title(texto) Cria ttulos no topo do grfico


Xlabel(texto) Escreve um texto abaixo do eixo X
Ylabel(texto) Escreve um texto ao lado do eixo Y
Escreve um texto na tela do grfico no ponto
especfico das coordenadas (x, y) usando os eixos
Text(x,y,texto)
dos grficos. Se x e y so vetores o texto escrito
no ponto definido por eles
Este comando escreve um texto nas posies
gtext(texto)
indicadas na tela do grfico pelo clique mouse
legend(texto) Cria uma caixa com a descrio da curva
grid on / off Desenha ou apaga a grade do grfico

Grficos mltiplos

subplot(n, p1
Cria vrios grficos numa mesma janela
,p2),plot(x,y)
figure(n) Abre uma nova figura

129
Mtodos numricos para a engenharia

Estilo de linha

- Trao contnuo
. Pontos nos pontos
-- Tracejada
+ Cruz nos pontos
: Pontilhada
* Estrela nos pontos
- Linha trao-ponto

Cores

r Vermelho
g Verde
b Azul
w Branco
i Transparente
r Vermelho
[r,g,b] Matriz em RGB que representa uma cor qualquer
definida pelo usurio

Escala

axis ([xmin, xmax, ymin, Define os limites dos eixos em X e Y


ymax])
axis ([xmin, xmax, ymin, Define os limites dos eixos em X, Y e Z
ymax, zmin, zmax,
cmin, cmax])
axis auto Ativa a definio automtica das escalas

130
Uma introduo ao MATLAB

axis manual Ativa a definio manual das escalas dos eixos


axis tight Trava no tamanho mnimo, sem encobrir dados
axis equal Define a mesma escala para os eixos
axis image Define a mesma escala e restringe o grfico ao
tamanho da imagem

O trecho de cdigo apresentado a seguir utiliza vrios dos comandos


citados acima para desenhar a posio, velocidade e acelerao de um
pndulo, e um excelente exemplo de aplicao destas propriedades em
situaes prticas.

%------------------------------------------grficos
%abre a janela do grafico
figure(1);

%plotam os graficos da posicao e velocidade angulares em funcao


do tempo
%e definem as propriedades desses grficos
valores=[th,thp,thpp];
plot(t,valores,'linewidth',2);
axis normal;
grid on;

title('Movimento do pndulo em funo do tempo',...


'fontweight','bold','fontname','Monospaced');

xlabel('Tempo
(segundos)','fontname','Monospaced','fontangle','italic');
ylabel('\theta (t), \theta(t) e
\theta(t)','fontname','Monospaced',...
'fontangle','italic');

legend ('Posio, \theta(t), (rad)','Velocidade, \theta(t),


(rad/s)',...
'Acelerao, \theta(t), (rad/s)','location','best');

%===============================================================

131
Mtodos numricos para a engenharia

132
Uma introduo ao MATLAB

13.d) Propriedades de grficos 3D

Estas propriedades e comandos permitem que se desenhe grficos


muito complexos e elaborados de forma simples, com uma apresentao
respeitvel.

Cores (superfcies e slidos 3D)

colormapeditor Editor de cores e mapas de cores, permite que se


altere qualquer parmetro de cor do grfico
colormap tipo Define uma escala de cores padro, como jet ou
cooper

Iluminao

camlight Cria ou move uma fonte de luz dependendo da


posio da cmera.
lightangle Cria ou posiciona uma luz com coordenadas
esfricas.
light Cria uma fonte de luz.
lightining tipo Define o mtodo de iluminao (flat - luz uniforme
/ phong - luz com efeito tridimensional, pesada,
mas tem efeito melhor.).
material tipo Especifica a refletividade das superfcies (o
quanto os objetos iluminados refletem a luz).

133
Mtodos numricos para a engenharia

Transparncia

alpha(valor_entre_0_e_1) Define a transparncia e opacidade do grfico


(zero = transparente, um = totalmente opaco)
alphamap('parmetro') Define a transparncia e opacidade do grfico
variando com o parmetro escolhido

Sombreamento

shading tipo Define o tipo de sombreamento (flat, faceted,


interp)

Estes comandos podem ser ilustrados com o exemplo abaixo, que


desenha o pndulo simples mostrado anteriormente na seo dos grficos
tridimensionais. Note que para um mesmo objeto usado na animao so
usados vrios plots diferentes, e que em cada um deles h vrias outras
funes para definir suas propriedades.

%----------plot do pndulo

%plota a esfera
surf(xx*l/10+rm(i,1),yy*l/10+rm(i,2),zz*l/10)

%mantm todos os 'plots' na tela, at o hold off, desenhando


%todos ao mesmo tempo, deve ser usado aps o primeiro plot
hold on

%plota o suporte
surf(xc*l/12,yc*l/12,zc*l/12-zc*l/24);

%desenha a corda

plot([0,rm(i,1)],[0,rm(i,2)],'linewidth',3,'color',[0.58,0.68,0.
78]);

%define as propriedades do grfico do pndulo(eixos, grade, cor,


%posicao do observador, relexividade, etc.)

axis equal;

134
Uma introduo ao MATLAB

axis ([-l*1.2,+l*1.2,-l*1.2,+l*1.2,-l/5,l/5]);

box on;

camproj perspective;

grid on;

light('Position',[-l*2,l/4,l],'Style','infinite');

colormap (bone);

shading interp;

material metal;

light('Position',[-l/9,-l/9,l/40],'Style','infinite');

view(pos_cam);

%imprime todos os grficos (cilindro, esfera e reta) numa mesma


%figura
hold off;

%===============================================================

De modo simplificado, as funes de cada comando esto indicadas


na figura abaixo:

135
Mtodos numricos para a engenharia

Note que o grfico acima tem muitas propriedades grficas, e usa


artifcios que exigem muito esforo computacional. Num computador sem
uma placa de vdeo adequada ele no ser visualizado do modo correto.
Quando a animao fica to complexa a ponto do computador no ser capaz
de desenh-la na velocidade desejada pode-se salvar as imagens num vdeo,
e aps converter seu formato para um adequado, este pode ser assistido na
velocidade correta.

136
Uma introduo ao MATLAB

14) Animaes

Uma animao um conjunto de plots sucessivos, que quando


desenhados a uma velocidade adequada do a impresso de que o grfico
tem movimento. Para fazer isto, usamos funes de desenho dentro de
estruturas iterativas (loops), ou desenhamos uma sequncia de imagens e as
salvamos num vetor de imagens, ou seja, montamos um filme. A escolha do
mtodo depende da complexidade do grfico a ser animado. Se o problema
for simples, pode-se fazer a animao em tempo real, porm se o grfico
exigir muito esforo computacional deve-se montar uma sequncia de
imagens e salv-las, para que possam ser assistidas posteriormente, na
velocidade adequada.

137
Mtodos numricos para a engenharia

14.a) Criao de loops para animaes

Os dois tipos de estruturas usadas para executar animaes so


loops for e while, que tem funo similar, mas so aplicados em situaes
diferentes, como explicado no captulo sobre operadores. A idia de se
montar uma animao baseia-se no princpio abaixo:

incio do loop
plots
pausa
final do loop

E exatamente isto que feito num exemplo simples, como uma


manivela girando:

%plota a animacao
for k=1:n
for cont=1:length(t)-1
tic

plot(x(cont,:),y(cont,:),xc,yc,x(cont,2),y(cont,2),'o',...
x(cont,3),y(cont,3),'o',0,0,'o',-x(cont,2),-
y(cont,2),'o',...
'linewidth',6)
axis equal
axis ([xmin,xmax,ymin,ymax])
title ('Manivela','fontweight','bold')
grid on
s=toc;
pause (t(cont+1)-t(cont)-s)
end
end

138
Uma introduo ao MATLAB

Porm, se a animao for muito complexa, deve-se montar o filme.


Por exemplo, vamos fazer uma animao do mundo girando (esta funo
exige um processador relativamente rpido, e pode demorar alguns minutos
a cada volta do globo, funciona partir da verso R2008b e necessita de
cerca de 200Mb de memria por volta (nota: no alterar a posio ou o
tamanho da janela do plot durante a montagem do vdeo.):

function O_mundo_gira

voltas=1; %Altere aqui o nmero de voltas do globo


fig=figure; %abre a janela do plot

%Cria o arquivo de vdeo


aviobj=avifile(O mundo gira.avi','compression','Cinepak');
aviobj.quality = 100;
aviobj.fps = 30;

%========================= propriedades do grfico (no alterar)

voltas=voltas-1;
axesm('globe','Grid','off')
set(gca, 'Box','off', 'Projection','perspective')
base = zeros(180,360);
baseref = [1 90 0];
hs = meshm(base,baseref,size(base));
colormap copper
setm(gca, 'Galtitude',0.025);

139
Mtodos numricos para a engenharia

axis vis3d
clmo(hs)
load topo
topo = topo / (almanac('earth','radius')* 20);
hs = meshm(topo,topolegend,size(topo),topo);
demcmap(topo)
set(gcf,'color','black');
axis off; camlight right
lighting phong;
material ([.7, .9, .8])
view(30,23.5);
%========================================= loop para montar o
vdeo
for h=0:voltas
for i=0:1:360
view(i,1);
drawnow

% Salva o frame
print(gcf,'image','-dbmp','-painters','-r300');
aviobj = addframe(aviobj,im2frame(imread('image.bmp')));

end
end
%========================================= fechamento

close(fig) %fecha a janela


aviobj = close(aviobj); %Fecha o arquivo de vdeo

disp('Funcionou!!! Voc fez um filme em Matlab!!!')

E aps executar o programa voc ter um arquivo salvo de uma


animao do globo terrestre girando, salva no formato avi. Esta tcnica
pode ser usada para qualquer tipo de grfico, porm mais recomendada
para grficos muito pesados, ou para quando necessrio transportar uma
animao para outros computadores.

140
Uma introduo ao MATLAB

141
Mtodos numricos para a engenharia

14.b) Gravao de vdeos usando animaes

Na forma convencional so necessrios trs passos para salvar a


animao, eles so:

Abertura do vdeo;
Adio de "frames";
Fechamento do vdeo.

A seguir est um exemplo desta operao para a verso R2010a do


MATLAB:

%% abre vdeo (imediatamente antes do loop da animao)


aviobj=avifile('PZT.avi','compression','Cinepak');
aviobj.quality = 100;
aviobj.fps = 30;

%% salva frame (ltimo processo dentro do loop da animao)


drawnow expose
print(gcf,'image','-dpng','-painters','-r150');
aviobj = addframe(aviobj,im2frame(imread('image.bmp')));

%% fecha video (imediatamente aps o loop da animao)


close(fig)
aviobj = close(aviobj);

142
Uma introduo ao MATLAB

15) SYMs - Variveis Simblicas


Variveis simblicas do MATLAB, para efeitos prticos, funcionam
como as incgnitas que usamos no clculo diferencial e integral. So
especialmente teis quando se tem uma expresso muito complexa para ser
solucionada na mo, mas preciso obter sua expresso analtica. Tambm
podem ser usadas em operaes com matrizes e sistemas lineares muito
complexos, como por exemplo o mtodo de Rayleigh-Ritz para anlise de
vibrao em estruturas. Neste mtodo so usadas funes admissveis (
), que descrevem o movimento da estrutura. Estas funes fazem parte
de somatrios, que sero manipulados matematicamente, gerando respostas
diferentes para cada valor de . A seguir est a expresso analtica de uma
possvel funo admissvel :

Imagine agora o tempo necessrio para solucionar analiticamente


esta funo, para vrios valores de , e fazer as devidas manipulaes para
montar o sistema linear final. Isto tornaria a soluo do sistema algo
impraticvel, forando-nos a mudar a abordagem do problema. Porm, com o
auxlio de variveis simblicas, a soluo desta expresso e a montagem do
sistema levam apenas alguns minutos.

143
Mtodos numricos para a engenharia

15.a) Declarao de variveis simblicas

Inicialmente, deve-se declarar as variveis usadas no problema.


Caso queiramos escrever a seguinte expresso:

Devemos declarar as variveis usadas nela, antes de escrever a


equao:

syms x a b c y

y=a+b*x+c*x.^2

E a resposta escrita na linha de comando ser:

y = c*x^2 + b*x + a

Deste modo, a varivel simblica y recebeu o valor de c*x^2 +


b*x + a, como queramos. Para substituir valores s variveis, podemos
usar o comando subs, como ser mostrado a seguir.

144
Uma introduo ao MATLAB

15.b) Operaes bsicas com syms

Na nossa expresso anterior, para atribuir valor s variveis,


devemos proceder da seguinte maneira, usando o comando subs:

Var = subs (expresso_simblica , velho , novo)

Que no nosso programa fica:

y=subs(y,a,4) %troca "a" por 4

y=subs(y,b,3) %troca "b" por 3

y=subs(y,c,2) %troca "c" por 2

y=subs(y,x,[0:1:5]) %troca "x" por [0 1 2 3 4 5]

E a resposta do MATLAB :

y =
c*x^2 + b*x + a

y =
c*x^2 + b*x + 4

y =
c*x^2 + 3*x + 4

y =
2*x^2 + 3*x + 4

y =
4 9 18 31 48 69

Existem alguns outros comandos muito teis para tratar expresses


complexas ou realizar algum tipo de manipulao matemtica na expresso:

145
Mtodos numricos para a engenharia

Manipulao de expresses

simple(eq) Simplifica a expresso simblica eq de 'todas'


as formas possveis;
pretty(eq) Mostra a expresso escrita na forma
convencional (como escrevemos no caderno, e
no na forma do computador);
expand(eq) Escreve a equao na forma expandida;

Soluo de expresses

solve(eq , var) Resolve a expresso eq para a varivel var;


int(eq , v , a , b) Faz a integral definida de eq, na varivel v, de
a at b;
diff(eq , v , n) Deriva n vezes a expresso eq, na varivel v;
fourier(f) Faz a transformada de Fourier do escalar
simblico f com varivel independente x e
retorna uma funo de w;
laplace(eq) Faz a transformada de Laplace de eq;
ilaplace(eq) Faz a transformada inversa de Laplace de eq;
taylor(eq , n , a) Expande eq at a ordem n em torno de a em
srie de Taylor;
limit(eq , x , a , right ou Calcula o limite de eq, pela direita ou pela
left) esquerda, com x tendendo a a;
limit(eq , x , a) Calcula o limite de eq com x tendendo a a;
dsolve(eq1 , eq2 , ... , Soluciona o sistema de EDOs com as condies
cond1 , cond2 , ... , v) iniciais cond com varivel independente v;

146
Uma introduo ao MATLAB

Todos os comandos mostrados anteriormente se aplicam s variveis


e expresses simblicas, como ser mostrado a seguir.

147
Mtodos numricos para a engenharia

15.c) Clculo diferencial e integral com syms

Os comandos mostrados na seo anterior so especialmente teis


para resolver analiticamente expresses complexas de clculo diferencial e
integral. Por exemplo para realizar as operaes mais comuns (integral,
derivada, soluo de PVIs e EDOs, transformada de Laplace direta e inversa
e expanses em sries) em expresses matemticas complexas ou muito
extensas. Algumas expresses, porm, no possuem soluo analtica, e no
podem ser solucionadas desta forma.
Os cdigos a seguir ilustram de maneira simples como proceder para
realizar as operaes mais simples, mas que podem ser difceis, dependendo
da complexidade das expresses envolvidas.

Integrao simblica

% INTEGRAL simblica

clc;close all;clear all

syms a b c d x y integral L_inf L_sup

y=a*exp(b*x)+c*sin(d*x);

integ=int(y,L_inf,L_sup);

pretty(simple(integ))

c (cos(L_inf d) - cos(L_sup d)) a (exp(L_inf b) - exp(L_sup b))


------------------------------- - -------------------------------
d b

148
Uma introduo ao MATLAB

Derivao simblica

%DERIVADA simblica

clc;close all;clear all

syms a b c d x t dx dx2 dx3

x=a*exp(b*t.^2)+c*sin(d*t.^3);

dx=diff(x,t);
dx2=diff(x,t,2);

pretty(simple(dx))
pretty(simple(dx2))

2 2 3
2 a b t exp(b t ) + 3 c d t cos(d t )

2 2 2 2 2 4 3 3
2 a b exp(b t ) + 4 a b t exp(b t ) - 9 c d t sin(d t ) + 6 c d t cos(d t )

Transformada de Laplace simblica

% LAPLACE simblicas

clc;close all;clear all

syms k m c x y f x_lap t s

dx = sym('diff(x(t),t)'); %escrever as derivadas desta


forma
d2x = sym('diff(x(t),t,2)'); %"derivada 1 ou 2 de x(t) em
t"

x=f/k-m/k*d2x-c*dx;

x_lap=laplace(x,t,s);

pretty(simple(x_lap))

f m laplace(diff(diff(x(t), 2), t), t, s)


c (x(0) - s laplace(x(t),t,s)) + --- - ---------------------------------------
k s k

149
Mtodos numricos para a engenharia

Problema de Valor Inicial simblico

% EDO simblica

clc;close all;clear all

syms x y m c k f

y=dsolve('f*sin(t)=k*x+c*Dx+m*D2x','x(0)=0','Dx(0)=0','t');

y=subs(y,f,5);
y=subs(y,m,2);
y=subs(y,k,10);
y=subs(y,c,1);

pretty(simple(y))

Limite simblico

%LIMITE simblico

clc;close all;clear all

syms a b c d x y

y=a*tan(b*sqrt(x))-c*cos(d*x.^2);

lim_0=limit(y,x,0)
lim_90=limit(y,x,pi/2)

lim_0 =

-c

lim_90 =

a*tan((2^(1/2)*pi^(1/2)*b)/2) - c*cos((pi^2*d)/4)

Agora, para praticar a aplicao de variveis simblicas na soluo


de problemas, vamos tentar resolver um problema simples usando variveis
simblicas.

150
Uma introduo ao MATLAB

Suponha que foi realizado um experimento, onde se mediu um


parmetro em alguns pontos distintos, obtendo-se um vetor de pontos. Este
vetor representa algum parmetro fsico, seja ele posio, intensidade,
tempo, etc, que nos interessa, pois se precisa dele para determinar uma
incgnita do problema. Por exemplo, podemos criar um vetor de pontos semi-
aleatrios para representar nossos pontos experimentais (usando a funo
rand) e trat-los numa expresso simblica. Posteriormente, podem-se
substituir estes valores e outros que j se conhece do problema na expresso
simblica, obtendo a incgnita. O programa a seguir ilustra uma aplicao
bastante simples, onde se tem os valores de uma resistncia eltrica, de uma
capacitncia, da carga inicial do capacitor e deseja-se saber a voltagem no
fio conforme o capacitor se descarrega (vide figura).

function experimento
%programa para clculos de dados em experimentos

%--------------------------------------------- inicializao

clc;close all;clear all

%--------------------------------------------- entrada de dados

%declaro as variveis do problema


syms C R E0 v t

%crio os vetores experimentais correspondentes s variveis


vet_C=1*10e-6;
vet_R=500;
vet_E0=3*10e-6;

151
Mtodos numricos para a engenharia

vet_t=[0:0.001:0.03];

%--------------------------------------------- equacionamento

%escrevo a expresso
v=E0+exp(-t/(R*C));
disp('v');pretty(simple(v))

%escrevo outras expresses necessrias e difceis de calcular


dvdt=diff(v,t);
disp('dvdt');pretty(simple(dvdt))

v_total=int(v,0,60);
disp('v_total');pretty(simple(v_total))

%--------------------------------------------- clculos

%substituo os valores experimentais nas expresses


v=subs(v,R,vet_R);
v=subs(v,E0,vet_E0);
v=subs(v,C,vet_C);
v=subs(v,t,vet_t);
v=double(v);

dvdt=subs(dvdt,R,vet_R);
dvdt=subs(dvdt,E0,vet_E0);
dvdt=subs(dvdt,C,vet_C);
dvdt=subs(dvdt,t,vet_t);
dvdt=double(dvdt);

v_total=subs(v_total,R,vet_R);
v_total=subs(v_total,E0,vet_E0);
v_total=subs(v_total,C,vet_C);
v_total=double(v_total);

%--------------------------------------------- resultados

%ploto as expreses com os valores experimentais


subplot(2,1,1), plot(vet_t,v,'color','b')
grid on
title('v X t')
xlabel('t')
ylabel('v')
legend(strcat('v total at 60 seg:',num2str(v_total)))

subplot(2,1,2), plot(vet_t,dvdt,'color','r')
grid on
title('dvdt X t')
xlabel('t')
ylabel('dvdt')

152
Uma introduo ao MATLAB

E o resultado deste programa :

1
E0 + ----------
/ t \
exp| --- |
\ C R /

dvdt

1
- --------------
/ t \
C R exp| --- |
\ C R /

v_total

/ 1 \
60 E0 - C R | ---------- - 1 |
| / 60 \ |
| exp| --- | |
\ \ C R / /

153
Mtodos numricos para a engenharia

154
Uma introduo ao MATLAB

16) Graphical User Interfaces

Para operaes muito complexas, ou para quando preciso criar um


programa para que outras pessoas utilizem, frequentemente faz-se uso de
interfaces (GUIs). Estes programas so ento formulados em algumas
funes que representem o problema fsico, e para facilitar o manejo e a
interpretao do problema, estas funes de clculo so montadas com uma
interface. Note que tanto a interface como o programa de clculo so
compostos de vrias funes, mas que tambm so interdependentes, pois a
entrada de dados, o pr e ps processamentos e a anlise de resultados so
feitos na interface, mas os clculos so feitos em rotinas de clculo. Quando
se une vrias janelas com um nico propsito principal tem-se efetivamente
um programa de computador.

155
Mtodos numricos para a engenharia

16.a) Criao grfica de guides

Para comearmos nosso estudo, digite na linha de comando do


MATLAB:

>> guide

A seguir selecione a opo Blank GUI (Default) e clique OK. Assim,


surgir a janela a seguir:

156
Uma introduo ao MATLAB

Esta a rea de montagem das interfaces, onde se define quais


GUIs a janela ter e a organizao delas. Para inserir uma GUI na janela,
clique no boto correspondente a ela na barra de ferramentas esquerda da
janela do guide e a seguir posicione-a na grade. Algumas opes esto
mostradas na figura a seguir:

157
Mtodos numricos para a engenharia

As GUIs bsicas e aplicaes principais de cada um dessas funes


esto apresentadas abaixo:

158
Uma introduo ao MATLAB

GUIs

Static Text Texto esttico, pode ser alterado pela funo do


guide
Edit Text Texto editvel, normalmente usado para entrada
de dados pelo usurio
Push Button Boto, um boto simples, como um OK
Toggle Button Boto de ativao, quando clicado permanece
pressionado
Radio Button Boto de seleo, aplicvel quando se tem vrias
opes e somente uma pode ser escolhida
Check Box Boto de seleo, aplicvel quando se tem vrias
opes e vrias podem ser escolhidas
simultaneamente
Panel Painel, usado por questo de organizao e
agrupamento de funes
Button Group Painel, todos os botes dentro dele funcionaro
como Radio Buttons (somente um deles pode
ser selecionado)
Axes Eixos de grfico, servem para receber plots de
grficos ou imagens
Listbox Lista, lista para apresentar vrias opes
Pop-up Menu Menu expansvel, similar Listbox
Slider Barra de rolagem, usada quando se tem uma
janela complexa, que no caberia no monitor
Table Tabela, muito til para apresentar ou receber
dados em grande quantidade, especialmente
quando no se sabe quantas posies ter uma
matriz de dados de entrada

159
Mtodos numricos para a engenharia

Para definir propriedades mais a fundo, clique duas vezes na GUI e


configure o que desejar usando o Property Inspector.

Quando terminar de montar sua interface, clique na seta verde na


parte superior da janela do guide. Isto far o MATLAB compilar sua guide,
criando uma funo associada a ela.

160
Uma introduo ao MATLAB

16.b) Programao de guides no MATLAB

A programao de guides similar programao de funes, se


estudarmos mais a fundo, perceberemos que cada GUI colocado na guide
criada na seo anterior uma pequena funo. A guide um conjunto de
funes menores, operando em conjunto. Assim, vamos criar uma funo
bem simples, que plota funes definidas pelo programador e so somente
selecionadas pelo usurio:

Inicialmente a janela do guide no funcionar, pois precisa ser


programada como uma funo comum (ser feito durante as aulas do curso),

161
Mtodos numricos para a engenharia

e isto se faz alterando e programando o cdigo correspondente guide,


como foi feito neste exemplo:

function varargout = funcoes_trigonometricas(varargin)

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn',
@funcoes_trigonometricas_OpeningFcn, ...
'gui_OutputFcn',
@funcoes_trigonometricas_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before funcoes_trigonometricas is made


visible.
function funcoes_trigonometricas_OpeningFcn(hObject, eventdata,
handles, varargin)

% This function has no output args, see OutputFcn.


% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to funcoes_trigonometricas
(see VARARGIN)

% Choose default command line output for funcoes_trigonometricas


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

162
Uma introduo ao MATLAB

%====================================== trmino da inicializao

% - Outputs from this function are returned to the command line.


function varargout = funcoes_trigonometricas_OutputFcn(hObject,
eventdata, handles)

% varargout cell array for returning output args (see


VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

global t

t=0:0.01:15;

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton1 (see GCBO)


% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

global w posicao t

clear funcao
posicao=get(handles.popupmenu1,'value')

switch posicao
case 1
funcao=sin(w*t);
case 2
funcao=cos(w*t);
case 3
funcao=tan(w*t);
case 4
funcao=cot(w*t);
case 5
funcao=sec(w*t);
case 6
funcao=csc(w*t);
end

set(handles.axes1)

163
Mtodos numricos para a engenharia

plot(t,funcao,'linewidth',2)
grid on;

% --- Executes on selection change in popupmenu1.


function popupmenu1_Callback(hObject, eventdata, handles)

global posicao

posicao=get(hObject,'Value'); %pega o valor do popupmenu1

% --- Executes during object creation, after setting all


properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)

% hObject handle to popupmenu1 (see GCBO)


% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called

% Hint: popupmenu controls usually have a white background on


Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit1_Callback(hObject, eventdata, handles)

% hObject handle to edit1 (see GCBO)


% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
global w

% Hints: get(hObject,'String') returns contents of edit1 as text


w=str2double(get(hObject,'String')); %returns contents of edit1
as a double

% --- Executes during object creation, after setting all


properties.
function edit1_CreateFcn(hObject, eventdata, handles)

% hObject handle to edit1 (see GCBO)

164
Uma introduo ao MATLAB

% eventdata reserved - to be defined in a future version of


MATLAB
% handles empty - handles not created until after all
CreateFcns called

% Hint: edit controls usually have a white background on


Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

Note que alm da edio do cdigo, algumas propriedades j foram


definidas no prprio guide, sem necessidade de escrever um cdigo
especfico, como o tamanho das letras e as funes que aparecem no
popupmenu. Estas propriedades so definidas no Inspector, que aberto
quando se clica duas vezes sobre um guide:

165
Mtodos numricos para a engenharia

Aps modelar a janela e editar o cdigo inerente a ela, o que se


obtm um programa interativo, muito mais compreensvel e fcil do que
um algoritmo, principalmente se o usurio deste software no souber
programar. Executando o cdigo mostrado acima cria-se um guide similar ao
apresentado a seguir:

Seguindo o mesmo modelo de criao de interface e edio das


funes correspondentes s diferentes funcionalidades da interface
possvel construir qualquer tipo de interface. Programas que se tornam muito

166
Uma introduo ao MATLAB

grandes para que um usurio altere seu cdigo diretamente podem ser mais
teis caso tenham uma interface associada, que os torna mais 'amigveis'.

167
Mtodos numricos para a engenharia

16.c) Objetos grficos e seus callbacks especficos

Vamos agora mostrar todos os objetos grficos existentes no


MATLAB e quais so suas funes correspondentes (callback), mostrando
como aparecem no arquivo '.m' da interface.
Vale ressaltar que estes objetos grficos de interfaces so
referenciados no programa por meio de callbacks, que so funes de
chamada para uso pelo programador. Estas permitem receber dados do
usurio e transmitir respostas pr-programadas no programa para ele, de
modo grfico, escrito e interativo.

168
Uma introduo ao MATLAB

Janela de GUI

a prpria janela, isto , o plano de fundo, as margens e suas


propriedades gerais, e tambm a inicializao destes, que gerada
automaticamente pelo programa.

Quando se cria um guide em branco gerado o seguinte callback:

function varargout = branco(varargin)


% BRANCO M-file for branco.fig
% BRANCO, by itself, creates a new BRANCO or raises the
existing
% singleton*.
%
% H = BRANCO returns the handle to a new BRANCO or the
handle to
% the existing singleton*.
%
% BRANCO('CALLBACK',hObject,eventData,handles,...) calls
the local

169
Mtodos numricos para a engenharia

% function named CALLBACK in BRANCO.M with the given input


arguments.
%
% BRANCO('Property','Value',...) creates a new BRANCO or
raises the
% existing singleton*. Starting from the left, property
value pairs are
% applied to the GUI before branco_OpeningFcn gets called.
An
% unrecognized property name or invalid value makes
property application
% stop. All inputs are passed to branco_OpeningFcn via
varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI
allows only one
% instance to run (singleton)".
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help branco


% Last Modified by GUIDE v2.5 31-Oct-2012 14:24:01

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @branco_OpeningFcn, ...
'gui_OutputFcn', @branco_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before branco is made visible.


function branco_OpeningFcn(hObject, eventdata, handles,
varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB

170
Uma introduo ao MATLAB

% handles structure with handles and user data (see GUIDATA)


% varargin command line arguments to branco (see VARARGIN)

% Choose default command line output for branco


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes branco wait for user response (see UIRESUME)


% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command


line.
function varargout = branco_OutputFcn(hObject, eventdata,
handles)
% varargout cell array for returning output args (see
VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

Nestas 3 funes geradas NO se deve alterar a primeira, em


algumas raras excees pode-se alterar a segunda e quase sempre haver
alguma modificao na terceira. Por exemplo, quando se quer colocar um
logotipo na janela ele ser plotado em um eixo ( axis), porm o comando para
plot-lo dado nesta 3 funo de inicializao.

171
Mtodos numricos para a engenharia

Static text

um texto esttico, que no gera nenhum callback, porm pode ser


alterado por outras funes usando o comando:

>> set(handles.text1,'texto_novo')

Assim se substituir o texto pela varivel 'texto_novo'. Via de regra,


textos estticos so usados como textos explicativos e ou "guias" para o uso
da interface, mas seus usos no se limitam a isso. A possibilidade de alterar
o texto esttico por linhas de comando permite que se crie um feedback ativo
para o usurio.
Criar um canal de comunicao com o usurio por meio de textos
estticos til para certas situaes, mas por outro lado limitado, pois s
permite informar o usurio mas no receber inputs dele. Outra grande
vantagem que esta uma funo extremamente leve para o processador
grfico, de forma que estes textos podem ser alterados em tempo real sem
passar a sensao de "bug" ou "lag" na imagem.

172
Uma introduo ao MATLAB

Edit text

um texto editvel pelo usurio, que serve geralmente para que se


entre o valor de alguma constante fsica ou dado de entrada do programa.
Quando se adiciona um destes na interface ser gerado uma funo
de callback semelhante seguinte:

function edit1_Callback(hObject, eventdata, handles)


% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text


% str2double(get(hObject,'String')) returns contents of
edit1 as a double

% --- Executes during object creation, after setting all


properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called

% Hint: edit controls usually have a white background on


Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

173
Mtodos numricos para a engenharia

Note que a primeira de fato o callback do texto editvel, e a


segunda so as propriedades grficas do objeto, que raramente
modificada, pois isto pode ser modificado mais facilmente no prprio guide.
De forma similar ao texto esttico, os textos editveis permitem criar
um canal de comunicao com o usurio. Neste caso entretanto so mais
usados para receber informaes do usurio do que pass-las a ele.
Usualmente tambm estes textos editveis e estticos so usados em
conjunto. Veja o exemplo:

Nesta interface textos estticos e editveis so usados em conjunto


em diversas situaes. No detalhe isto fica mais evidente:

Nestes objetos so usados textos estticos como guias para o


usurio, textos editveis para recebimento de dados e um " pushbutton" como
mecanismo de confirmao de execuo. Este tipo de associao tambm

174
Uma introduo ao MATLAB

bastante usual em situaes onde o mecanismo de confirmao indireto.


Veja a barra lateral:

Nesta barra h somente textos estticos e editveis, cada qual com


suas funes mais usuais, mas no h mecanismo de confirmao de ao
evidente. Isto pode ser feito quando h muitos dados de entrada, necessrios
para uma nica ao, como por exemplo a execuo do programa principal.
Tambm usual deixar uma opo "default" como sendo o valor que
ir aparecer inicialmente para o usurio em textos editveis. Desta forma o
usurio tem liberdade de alterar entradas do programa, mas caso seja leigo
pode simplesmente manter o valor padro.

175
Mtodos numricos para a engenharia

Push Button

um boto que quando pressionado executa uma vez seu callback


correspondente. Por exemplo, ele pode ser um boto para executar uma
anlise, ou ento para par-la. Quando se gera o cdigo correspondente seu
callback deve ser:

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

Seus comandos devem ser escritos logo em seguida de sua


chamada. Estes botes so geralmente usados como confirmadores de ao
ou "triggers" para eventos internos no programa. Na interface acima
exemplificada existem vrios destes, que pode-se usar como exemplo:

Este boto tem como callback a busca de valores dos edit texts
acima dele e atribuio variveis internas do programa, para posterior
execuo do cdigo de clculo em si. Esta estratgia indireta de recebimento
de inputs do usurio mais segura para o programador, pois s busca o
valor dentro dos textos editveis quando a ordem de execuo do programa
j foi dada. Isto permite que o programa acesse todos os textos editveis,
mesmo que eles no tenham sido alterados diretamente pelo usurio. A

176
Uma introduo ao MATLAB

seguir est o callback do boto executvel exemplificado, evidenciando a


tcnica de busca indireta dos valores dos textos editveis.

function pushbutton1_Callback(hObject, eventdata, handles)

% Recebe as opes grficas


pts=get(handles.checkbox1,'value');
flag1=get(handles.checkbox2,'value');
flag2=get(handles.checkbox3,'value');
flag3=get(handles.checkbox4,'value');
flag4=get(handles.checkbox5,'value');
flag5=get(handles.checkbox6,'value');
flag6=get(handles.checkbox7,'value');
flag7=get(handles.checkbox8,'value');
flag8=get(handles.checkbox9,'value');
flag9=get(handles.checkbox10,'value');
LF=get(handles.checkbox11,'value');

% Recebe as opes do cenrio simulado


nex=str2double(get(handles.edit3,'String'));
ney=str2double(get(handles.edit4,'String'));
T=str2double(get(handles.edit5,'String'));
dT=str2double(get(handles.edit6,'String'));
CIM=str2double(get(handles.edit7,'String'));

% Recebe as opes de fenologia


V1Em=str2double(get(handles.edit9,'String'));
V1Ep=str2double(get(handles.edit10,'String'));
V1El=str2double(get(handles.edit11,'String'));
V1Ec=str2double(get(handles.edit12,'String'));

% Recebe as opes de chuvas


V1C=str2double(get(handles.edit17,'String'));
V2C=str2double(get(handles.edit16,'String'));

% Recebe as opes de randomicidade


RorN=get(handles.radiobutton1,'value');

set(findobj(gcf, 'tag','axes1'), 'Visible','on')

CSV_Method (pts,flag1,flag2,flag3,flag4,flag5,flag6,flag7,...
flag8, flag9,LF,nex,ney,T,dT,CIM,V1Em,V1Ep,V1El,V1Ec,...
V1C,V2C,RorN)

177
Mtodos numricos para a engenharia

Toggle Button

um boto que quando clicado torna seu callback ativo. Ideal para
alterar grficos, sendo muito til para algo como 'zoom' ou 'rotacionar grfico'.
Quando se gera a funo correspondente ela semelhante ao push button:

% --- Executes on button press in togglebutton1.


function togglebutton1_Callback(hObject, eventdata, handles)
% hObject handle to togglebutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of


togglebutton1

Seus comandos devem ser escritos logo em seguida de sua


chamada, da mesma forma que um push button. Este boto entretanto no
somente um gatilho, mas fica ativo ou inativo dependendo da escolha do
usurio. Usualmente so aplicados em situaes onde o usurio deve definir
a atividade ou inatividade de algum objeto, que pode ser facilmente efetuado
com este toggle button.

178
Uma introduo ao MATLAB

Checkbox

um objeto que gera um nmero binrio em seu callback, onde


1=ativo e 0=inativo. Seu callback o seguinte:

% --- Executes on button press in checkbox1.


function checkbox1_Callback(hObject, eventdata, handles)
% hObject handle to checkbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox1

Este objeto grfico geralmente usado para definir se uma opo


est ou no ativa, de modo similar um toggle button. Via de regra so
usados em grupos, para definir propriedades quaisquer de um programa ou
cdigo. No exemplo da interface anterior tem-se:

Vale ressaltar que estes checkboxes podem ser tambm habilitados


ou desabilitados, dependendo possivelmente de opes anteriores do
usurio. Neste exemplo, se o usurio selecionar a opo "generate video",
esta se continua habilitada e se torna ativa, e todas as outras opes sero

179
Mtodos numricos para a engenharia

automaticamente desabilitadas e desativadas, para evitar conflitos lgicos


internos no programa. Para habilitar ou desabilitar um checkbox deve-se
fazer o seguinte:

set(handle.checkbox1,'enable','on') - para habilitar

set(handle.checkbox1,'enable','off') - para desabilitar

Um checkbox habilitado apresenta a cor normal, e um desabilitado


ser acinzentado e mais claro.

180
Uma introduo ao MATLAB

Radio Button

um boto geralmente usado num button group, onde h vrios


radio buttons, porm somente um deles pode ser ativado a cada vez.
usado quando h algumas possibilidade mas no se pode selecionar mais
que uma:

Deve-se ter cuidado, pois o panel muito semelhante ao button


group, porm o segundo impe a condio de que somente um dos radio
buttons pode ser selecionado. O callback do radio button o seguinte:

% --- Executes during object creation, after setting all


properties.
function radiobutton1_CreateFcn(hObject, eventdata, handles)
% hObject handle to radiobutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called

181
Mtodos numricos para a engenharia

Axes

Eixo para inserir imagens e grficos. No gera um callback, porm se


necessrio possvel cri-lo atravs do guide. alterado dentro do callback
de outros objetos ou em sub-rotinas do programa.

Sempre que se necessitar de objetos grficos e imagens como


logotipos numa interface, a melhor alternativa o uso de eixos. Estes podem
ser inclusive usados de forma inteligente, fazendo sobreposio de eixos de
forma a tornar alguns eixos momentaneamente invisveis e outros visveis.
Alm deste tipo de estratgia, possvel tambm us-los de forma a criar
logotipos interativos, que alternam entre diversas imagens com intervalos de
tempo predeterminados.
De modo geral, o nico fator limitante para o uso de objetos grficos
estticos ou animados em eixos somente a criatividade do programador.

182
Uma introduo ao MATLAB

Listbox

Uma lista de opes, que mostra vrias strings como opes, e seu
callback qual opo foi selecionada (qual posio a ativa, escalar,
1,2,3,...). Suas funes correspondentes so as seguintes:

% --- Executes on selection change in listbox1.


function listbox1_Callback(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns


listbox1 contents as cell array
% contents{get(hObject,'Value')} returns selected item
from listbox1
% --- Executes during object creation, after setting all
properties.
function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called

% Hint: listbox controls usually have a white background on


Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

183
Mtodos numricos para a engenharia

Sendo a primeira de fato o callback e a segunda suas propriedades


grficas. Vale ressaltar que estes listboxes tem como callback a linha ativa
pelo usurio, ou seja, se a linha ativa for a terceira o callback deste objeto
retornar value = 3.

184
Uma introduo ao MATLAB

Pop-up menu

Similar listbox uma lista de opes e seu callback um escalar


correspondente opo atualmente ativa. Suas funes correspondentes
so as seguintes:

% --- Executes on selection change in popupmenu1.


function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns


popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item
from popupmenu1

% --- Executes during object creation, after setting all


properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called

% Hint: popupmenu controls usually have a white background on


Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

185
Mtodos numricos para a engenharia

Slider

uma barra de rolagem, contendo duas setas (superior e inferior) e


uma barra mvel entre elas. Retorna a posio da seta como callback, dada
por um valor entre os dois valores extremos.

% --- Executes on slider movement.


function slider1_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider


% get(hObject,'Min') and get(hObject,'Max') to determine
range of slider

% --- Executes during object creation, after setting all


properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called

% Hint: slider controls usually have a light gray background.


if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

186
Uma introduo ao MATLAB

Table

A tabela tem muitos usos, e tem inclusive um property inspector


prprio que se chama table property inspector. Ela pode receber matrizes de
dados, porm eles devem ser todos do mesmo formato, ela no recebe por
exemplo uma coluna do tipo vetor numrico e outra do tipo vetor de strings.
Seu callback a matriz de dados representada por ela, e apesar de no
gerar uma funo especfica de callback dentro do cdigo escrito ela pode
ser alterada por outras funes, do mesmo modo que isto feito para
qualquer objeto da gui.

187
Mtodos numricos para a engenharia

16.d) Generalidades sobre guides

A seguir so citadas algumas propriedades gerais, que se aplicam


todos os objetos grficos:

Os callbacks podem ser dados fornecidos pelo usurio e 'pegos' pelo


programa ou tambm o contrrio, onde o programa altera um objeto
grfico e mostra ao usurio alguma resposta. Assim, da mesma
forma que a ativao de um objeto gera um comando ele tambm
pode ser ativado por um comando similar.

Estes comandos so: set(handles.objeto1,'value') para alterar o valor


de um objeto (text1, edit1, popupmenu1,...) e
variavel1=get(handles.objeto1,'value') para atribuir o valor deste
objeto 'variavel1'.

possvel alterar propriedades grficas como cor, ativo/inativo, etc.


de objetos grficos atravs de comandos dentro do cdigo, porm
geralmente mais prtico faz-lo diretamente no 'guide'. Assim as
funes de propriedades grficas que alguns objetos tm so
raramente alteradas no cdigo.

Objetos grficos que no tem sua funo (callback) gerada


automaticamente no podem ser diretamente alterados pelo usurio,
assim no permitem receber ou transmitir dados, portanto no
preciso o callback. Entretanto, possvel que o programa emita
mensagens de aviso (warnings), dizendo que "no existe callback do
objeto1" ou algo similar, que podem ser eliminadas pela criao
'forada' de um callback para este objeto.

188
Uma introduo ao MATLAB

Caso o programa no crie automaticamente um callback para um


objeto, este pode ser criado pelo usurio. Deve-se clicar com o lado
direito do mouse sobre o objeto em questo e selecionar a opo
"generate callback fcn". Feito isto o gerador de cdigos automtico
ir criar uma funo especfica para o objeto desejado.

189
Mtodos numricos para a engenharia

17) Simulink

O Simulink um ambiente de criao e execuo de simulaes


computacionais, suportado pelo MATLAB. Este programa permite criar
cdigos apenas por diagramas de bloco, sem que haja necessidade de
programar um arquivo .m ou implementar mtodos numricos para a
soluo de problemas de engenharia.
Este programa excepcionalmente til quando se trata de sistemas
representados por equaes diferenciais ordinrias, que possam ser
resolvidos pela Transformada de Laplace, como circuitos eltricos, sistemas
massa-mola-amortecedor, sistemas de nvel de lquido entre outros [6]. H
tambm vrias Toolbox para uma ampla gama de aplicaes, que vo
desde anlise de imagem e tratamento de sinal at biomatemtica, lgica
fuzzy e redes neurais. Entretanto, devido durao do curso e a alta
especificidade destes toolbox eles no sero abordados no curso.

190
Uma introduo ao MATLAB

17.a) Criao de diagramas de bloco

Para comearmos, clique no cone do simulink na barra de


ferramentas na parte superior da tela:

Que abrir a seguinte janela:

191
Mtodos numricos para a engenharia

Para comear o trabalho, clique no cone indicado (folha em branco)


para abrir um novo projeto. Uma vez feito isto, pode-se comear a modelar
sistemas fsicos e solucion-los numericamente atravs de diagramas de
bloco.

192
Uma introduo ao MATLAB

17.b) Soluo de problemas envolvendo EDOs

Para comear, vamos modelar um sistema relativamente simples.


Suponha uma mquina que opera em alta rotao (motor, compressor,
bomba, etc.), presa a uma base fixa.

Imagine agora que a base apresenta certa elasticidade, como se v


em mecnica de estruturas, at certo limite podemos considerar a base como
uma mola, apresentando comportamento elstico linear, seguindo a lei de
Hooke. Alm disso, suponha que o material da qual a base feita dissipa
energia mecnica. Aps estas consideraes, o modelo fsico, segundo as
leis de Newton deve ser o seguinte:

C X

193
Mtodos numricos para a engenharia

Este modelo apresenta uma componente de fora externa (devido


vibrao do motor), uma componente na acelerao (massa), uma na
velocidade (amortecimento) e uma na posio (constante elstica). Para
representar a equao no simulink podemos proceder de duas maneiras:
aplicando Laplace e escrevendo a funo de transferncia; montando o
diagrama para a equao na forma diferencial.
Caso queira trabalhar no domnio de Laplace, no preciso montar
um diagrama, basta escrever a expresso num arquivo .m e desenh-la em
alguns pontos. Como desejamos representar o sistema no simulink iremos
montar o sistema da seguinte forma:

O bloco de Sinais soma ou subtrai os termos da expresso de


acordo com o sinal de cada um. Os blocos 1/s representam integrais no
domnio de Laplace, ou seja, se o que entra no bloco 1/s for a acelerao, o
que sai ser a velocidade. J os blocos triangulares so os ganhos

194
Uma introduo ao MATLAB

(coeficientes) de cada termo ( ) da expresso, ou seja,


multiplica a velocidade, multiplica a posio e 1 multiplica a acelerao.
Deste modo, porm, falta acrescentar a fora externa e visualizar o
comportamento do sistema. Para tanto fazemos:

O bloco fora externa um seno multiplicado por uma constante, e


o bloco grficos um scope, ou seja, um bloco que desenha o que
chega at ele. Uma fez montado o diagrama, escreva na linha de comando
os valores das constantes ( ). Para escolher as propriedades da fora
externa e dos grficos d um clique duplo sobre os blocos respectivos e
escolha suas propriedades da maneira adequada. Por exemplo, defina
, e faa a fora externa com
, e defina o tempo de execuo at . Feito isto execute o
sistema e clique no bloco de grfico (aps abrir o grfico clique em

195
Mtodos numricos para a engenharia

autoscale, para visualizar na escala correta). O grfico dever se parecer


com:

Percebe-se que o perodo da fora externa muito menor que a


frequncia natural do sistema (as ondulaes nos primeiros segundos so a
aplicao da fora externa; aps 15 segundos o amortecimento j abafou
essas flutuaes, permanecendo somente sua influncia global no
movimento). Para tornar a simulao mais interessante, vamos aplicar a fora
externa com frequncia igual frequncia natural do sistema.

196
Uma introduo ao MATLAB

Para isto, defina o valor da frequncia da fora externa como


, que a frequncia natural deste sistema, e execute a
simulao at . A resposta ento dever ser a seguinte:

Onde o grfico superior a fora externa aplicada e o inferior a


posio da massa no tempo.

197
Mtodos numricos para a engenharia

17.c) Soluo de problemas envolvendo sistemas de EDOs

Para ilustrar uma classe mais complexa de problemas, iremos


abordar um modelo diferencial que representa a suspenso de um carro
(usa-se estes sistemas mecnicos como exemplo por serem comuns e se
assemelharem a outros sistemas de interpretao mais difcil). No sistema de
suspenso de um veculo h algumas consideraes a serem feitas: a
entrada um deslocamento e no uma fora; h uma elasticidade devido aos
pneus e outra devido mola da suspenso; h amortecimento viscoso devido
ao amortecedor; h uma massa menor do pneu e uma muito maior do carro.
Esquematizando o diagrama de corpo livre do sistema, suas equaes
representativas so dadas por:

Neste sistema, a suspenso de uma roda foi isolada do resto do


carro, considerando-se como da massa do veculo. O contato da roda

198
Uma introduo ao MATLAB

com o solo est indicado pela seta, e considerado perfeito (sem


deslizamento) e desconsideram-se foras horizontais. A elasticidade do pneu
representada pela mola de rigidez e sua massa por . A mola da
suspenso representada por , o amortecedor por e a massa de do
veculo por .
Equacionando o sistema desta maneira, temos duas equaes
diferenciais interdependentes. Para resolver analiticamente, deveramos
substituir uma na outra e isolar o termo desejado, porm com o simulink
possvel solucionar ambas ao mesmo tempo. Para facilitar a montagem,
vamos dividir as equaes pelas massas correspondentes:

Inicialmente vamos montar o lado direito da equao da massa 1 em


diagrama de bloco:

199
Mtodos numricos para a engenharia

Perceba que os termos Gain3 e Gain4 vm da equao da massa


2 e ainda precisamos determin-los. Para tanto, montaremos o diagrama da
equao 2:

200
Uma introduo ao MATLAB

Perceba tambm que os termos Gain6 e Gain7 vm da equao


da massa 1 que j determinamos. Acrescentando agora o termo de
deslocamento de entrada e o scope, o diagrama dever se assemelhar a:

201
Mtodos numricos para a engenharia

Onde o termo de deslocamento externo dado pelo seno


multiplicando a constante. Vamos agora executar o diagrama com os
seguintes valores para as constantes:

. E vamos definir a frequncia do seno como sendo ,e


sua amplitude como . A resposta do sistema dever ser a seguinte:

202
Uma introduo ao MATLAB

203
Mtodos numricos para a engenharia

18) Referncias Bibliogrficas

[1] Castilho, J. E., "Clculo Numrico", Universidade Federal de Uberlndia -


Faculdade de Matemtica, 2003;

[2] Cunha, M. C. C., "Mtodos Numricos", Campinas - SP, Editora Unicamp,


2000;

[3] Konte, J. F. et al, Curso de Matlab 5.1 Introduo soluo de


problemas de engenharia, UERJ Universidade do Estado do Rio de
Janeiro;

[4] The MathWorks, Inc. MATLAB Programming, The MathWorks Inc., 2004;

[5] The MathWorks, Inc. Using MATLAB Graphics, The MathWorks Inc.,
2004;

[6] Ogata, K., Modern Control Engineering, Prentice Hall, 1997;

[7] Dainaila, I. et al, An introduction to scientific computing twelve


computational projects solved with Matlab, ed. Springer, 2007;

[8] MacMahon, D., MATLAB Demystified, ed. McGraw Hill, 2007;

[9] White, R. E., Computational Mathematics Models, Methods and


Analysis with MATLAB and MPI, Chapmann e Hall/CRC, 2000;

204
Uma introduo ao MATLAB

[10] Karris, S. T., Introduction to Simulink with Engineering Aplications,


Orchard Publications, 2006;

[11] Oliveira, E. C. & Tygel, M, "Mtodos Matemticos para Engenharia", 2


edio, ed. Sociedade Brasileira de Matemtica, 2010;

205
Mtodos numricos para a engenharia

206
Uma introduo ao MATLAB

207