You are on page 1of 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.

Uma introduo ao MATLAB

Agradecimentos
Agradeo aos professores e alunos da Faculdade de Engenharia
Mecnica,

Mecatrnica

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

Mtodos numricos para a engenharia

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

Uma introduo ao MATLAB

Sumrio
1) Introduo

- 11

a. Por que usar o MATLAB?

- 13

b. Como iniciar o programa

- 15

c.

- 17

Principais funcionalidades e aplicaes

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

d. Chave switch e comando break

- 48
- 51

Mtodos numricos para a engenharia


6) Determinando os zeros de funes
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.

- 66

Clculo de matriz inversa

d. Cdigo para soluo de sistemas lineares


8) Ajuste de curvas

- 67
- 70

a. Regresso linear pelo MMQ

- 71

b. Funo polyfit

- 77

c.

Funo polyval

d. Basic fitting
9) Interpolaes

- 78
- 79
- 81

a. Interpolao linear e por spline cbica

- 82

b. Mtodo de Lagrange

- 86

c.

- 89

Mtodos diversos e consideraes

10) Derivao numrica

- 90

a. Derivao vetorial

- 91

b. Localizao dos pontos crticos

- 93

11) Integrao numrica

- 54

- 95

a. Regra do trapzio

- 96

b. Regra de Simpson 1/3

- 97

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.

- 110

Funo ODE45

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

d. Generalidades sobre guides


17) Simulink

- 168
- 188
- 190

a. Criao de diagramas de blocos

- 191

b. Soluo de problemas envolvendo EDOs

- 193

Mtodos numricos para a engenharia


c.

Soluo de problemas envolvendo sistemas de EDOs - 198

18) Referncias
a. Referncias bibliogrficas

10

- 204
- 204

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
>>var2
>>var3
>>resp
>>resp

=
=
=
=

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

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

3
2

>> matriz_b=magic(2)
matriz_b =
1
4

3
2

>> c=matriz_a*matriz_b % multiplicao de matrizes


c =
13
12

9
16

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


c =
1
16

9
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
3

2
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

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
3.000
3.100

2.000
3.200

3.000
3.300

4.000
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:


>>
>>
>>
>>
>>

26

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)

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


Arquivo

Nova
anlise
Sair

Banco de
dados

Modelo
MEF

Mat. Base

Metlico

Mat. PZT

Metlico
com PZT

Elemento
de viga

Metlico
Composto

Elemento
de placa

Menu principal

Metlico
com PZT
Fora
aplicada

Esttica

Anlise

Tenso
aplicada
Fora
aplicada

Modal

Harmnica

Excitao
da base

Simples
Gerao
de energia

Simples
Gerao
de energia

Simples
Ajuda

Sobre o
GetSmart!

Tenso
aplicada

Gerao
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 subrotinas. 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;
L=6;
T=2;
n=30;

%raio da manivela [m]


%comprimento do brao [m]
%perodo [s]
%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

38

animamanivela.m

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

VERDADEIRO / SIM / EXISTE / ATIVO (conveno)

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
elseif condio
grupo de
else
grupo de
end

comandos A
2
comandos C
comandos D

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)
conect

%para i de 1 at o tamanho do vetor

if ele_pzt==i && pzt_sup==1


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

%condio dupla

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);
i=i+1;

%expresso que muda a condio

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),
%'esquerda'
surf((xx+dimX),
%'fundo'
hold off

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

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

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
de dimenses

uma matriz de dimenses

x , e

so vetores

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

0.6557
0.0357
0
0
0

0.7577
0.7431
0.3922
0
0

0.7060
0.0318
0.2769
0.0462
0

0.8235
0.6948
0.3171
0.9502
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
problema particular do tipo

, onde

em um
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

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

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

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)

20

60

68

77

110

83

Mtodos numricos para a engenharia

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


forma matricial da seguinte maneira.
tempo
temperatura

=
=

[0
[0

1
20

2
60

3
68

77

4
5
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 temse:

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

cdigo

matematicamente acima.

88

que

realiza

todo

processo

descrito

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:end2))+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


tangente funo em
valor de

usando uma linha reta que

, como se mostra a figura abaixo. Para calcular o

usamos um tamanho de passo h=(b-a) e um ponto de partida

se usa a equao diferencial para calcular o valor de


determinando o valor de

, podemos estimar o valor de

. Uma vez

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
com condio inicial

no intervalo [0,3],

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

EDO

que

descreve

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

112

obtemos:

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

ajustes

especficos

refletividade, cmera, etc.

116

de

cor,

iluminao,

transparncia,

Uma introduo ao MATLAB

13.a) Grficos bidimensionais


Grficos bidimensionais necessitam de dois vetores de valores para
serem

plotados,

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
contour3
contourslice
ezplot3
waterfall

Plota funes e curvas no espao


Desenha vrias curvas de nvel
sobrepostas
Desenha as curvas de nvel nas paredes
da caixa de plotagem
Verso simplificada do "plot3"
Similar a um grfico de malha, porm s
desenha as linhas das matrizes

Malha de dados

mesh
meshc
meshz

122

Plota uma matriz como uma malha


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

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

patch

Cria polgonos, dadas as coordenadas dos


vrtices

cylinder

Cria um cilindro

ellipsoid

Cria um elipside

sphere

Cria uma esfera

Superfcies

surf

Desenha superfcies

123

Mtodos numricos para a engenharia

surfl

Desenha superfcies com cores baseadas na


iluminao do grfico

surfc

Desenha superfcies e as curvas de nvel

ezsurf

Verso simplificada do "surf"

ezsurfc

Verso simplificada do "surfc"

Movimento

quiver3
comet3
streamslice

Desenha trajetrias no espao, indicando a


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

Fluxo

scatter3
coneplot
streamline

124

Visualiza a distribuio de dados em


matrizes esparsas no espao
Desenha orientao de fluxos com cones
indicando o sentido com cones
Desenha orientao de fluxos com linhas

Uma introduo ao MATLAB

streamribbon
streamtube

Desenha orientao de fluxos com faixas


Desenha

orientao

de

fluxos

com

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

Text(x,y,texto)

especfico das coordenadas (x, y) usando os eixos


dos grficos. Se x e y so vetores o texto escrito
no ponto definido por eles

gtext(texto)
legend(texto)
grid on / off

Este comando escreve um texto nas posies


indicadas na tela do grfico pelo clique mouse
Cria uma caixa com a descrio da curva
Desenha ou apaga a grade do grfico

Grficos mltiplos
subplot(n, p1
,p2),plot(x,y)
figure(n)

Cria vrios grficos numa mesma janela


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

Verde

Azul

Branco

Transparente

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,
ymax,

zmin,

Define os limites dos eixos em X, Y e Z

zmax,

cmin, cmax])
axis auto

130

Ativa a definio automtica das escalas

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

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

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)');
forma
d2x = sym('diff(x(t),t,2)');
t"

%escrever as derivadas desta


%"derivada 1 ou 2 de x(t) em

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 semialeatrios 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 :
v
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

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
VARARGOUT);
% hObject
% eventdata
MATLAB
% handles

cell array for returning output args (see


handle to figure
reserved - to be defined in a future version of
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
% eventdata
MATLAB
% handles

handle to pushbutton1 (see GCBO)


reserved - to be defined in a future version of
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
% eventdata
MATLAB
% handles
global w

handle to edit1 (see GCBO)


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

% 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

164

handle to edit1 (see GCBO)

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
% varargin

structure with handles and user data (see GUIDATA)


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,...)

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:

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 (
multiplica a velocidade,

) da expresso, ou seja,

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

198

como da massa do veculo. O contato da roda

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
suspenso representada por
veculo por

e sua massa por

, o amortecedor por

. A mola da

e a massa de do

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


sua amplitude como

202

. A resposta do sistema dever ser a seguinte:

,e

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