Você está na página 1de 96

Curso de programao em MATLAB

META Consultoria

Verglio Torezan Silingardi Del Claro


UFU Universidade Federal de Uberlndia; FEMEC - Faculdade de Engenharia Mecnica, Mecatrnica e Aeronutica; LMEst Laboratrio de Mecnica de Estruturas Prof. Jos Eduardo Tanns Reis;

Maio 2011

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Sumrio

1) Introduo
a. Para que serve o MATLAB?
b. Como iniciar o programa
2) Operaes bsicas com escalares e matrizes
a. Escalares
b. Vetores e matrizes
3) Criao e tratamento de funes
a. Functions - Rotinas
b. Nested functions Sub-rotinas
4) Operadores e estruturas condicionais e iterativas
a. Operadores lgicos
b. Condicionais if, elseif e else
c. Loops for e while, chave switch e comando break
5) Ajuste de curvas, linearizaes e introduo ao tratamento de sinal
a. Interpolao
b. Ajuste de curvas
6) Derivao numrica
a. Derivando vetores
b. Localizando pontos crticos
7) Integrao numrica
a. Regra do trapzio repetida
b. Regra de Simpson
8) Soluo numrica de equaes diferenciais ordinrias
a. Passo constante - Mtodos de Runge-Kutta
b. Passo adaptvel ODEs

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

9) Grficos
a. Grficos bidimensionais
b. Grficos tridimensionais
c. Propriedades de grficos 2D
d. Propriedades de grficos 3D
10) Animaes
a. Loops para animaes
b. Gravando vdeos
11) SYMs Variveis simblicas
a. Declarando variveis simblicas
b. Operaes com syms
c. Clculo diferencial e integral usando o solver
12) GUIs Graphical User Interfaces
a. Criao de guides
b. Programao de guides
13) Simulink
a. Criao de diagramas de blocos
b. Soluo de problemas envolvendo EDOs
c. Soluo de problemas envolvendo sistemas de EDOs
14) Referncias

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Agradecimentos
Agradeo aos professores e alunos da Faculdade de Engenharia Mecnica, Mecatrnica e
Aeronutica da Universidade Federal de Uberlndia por tanto se empenharem em fazer deste um
dos melhores cursos de Engenharia do pas. Agradeo especialmente META consultoria pela
oportunidade de ministrar o curso pela segunda vez.
Agradeo especialmente ao Prof. Dr. Domingos Alves Rade pelo apoio e confiana
constantes e aos colegas de sala e do Laboratrio de Mecnica de Estruturas - LMEst - pela
amizade e auxlio desde quando ingressei na engenharia. E o mais importante, agradeo muito
aos meus pais e irmos pela ajuda e compreenso.
O desenvolvimento desta apostila e do curso de MATLAB uma mostra da capacidade
dos alunos e do empenho de nossos professores em sempre buscar progredir e fazer mais do que
s o necessrio.
Sou muito grato a todos vocs.
Verglio Torezan Silingardi Del Claro

Curso de programao aplicada em linguagem MATLAB META Consultoria

1)

2011

Introduo

Este resumo se baseia em vrias apostilas, livros, cursos sobre MATLAB e programao em
geral e na experincia dos autores, tendo como objetivo auxiliar no uso do programa. O texto foi
escrito para o curso de programao aplicada oferecido pela META empresa jnior do Curso de
Engenharia Mecnica e Mecatrnica da Universidade Federal de Uberlndia e complementado
pelas aulas ministradas durante o curso.
Este texto foi escrito para a verso 7.10.0.499 (R2010a) do Matlab, os dados das apostilas
foram adaptados e os comandos antigos atualizados.
1.a) Para que serve o MATLAB?
O Matlab um programa 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 incrivelmente complexo,
algoritmo gentico, que cria um processo semelhante evoluo de espcies, adaptado a um
problema prtico. 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. 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 esses so muito elaborados, compostos de vrios algoritmos simples interrelacionados. 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 curso pretende ensinar os fundamentos da programao em linguagem MATLAB e suas
funes mais relevantes para estudantes de engenharia, abordando problemas prticos.
-----

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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 deixe de faz-lo. A chance de se esquecer de algum comando ou errar alguma
parte de uma equao grande, mesmo seguindo todos os passos.
Interprete o problema e escreva de modo simples como ir abord-lo.
Resolva o problema (ou parte dele), manualmente (com calculadora ou como preferir),
para ter alguns dados seguros para comparar com os resultados obtidos no Matlab.
Escreva o cdigo e resolva o problema em Matlab.
Compare os dados.
Pode parecer trabalhoso, mas diminui muito a chance de errar. Principalmente em programas
extensos. Existem algumas reas essenciais do programa. Elas esto listadas abaixo:
Command Window - a rea onde se digita os comandos a serem executados pelo
programa, como por exemplo: chamar funes, fazer contas simples, resolver sistemas,
plotar grficos, entre outros;
Editor - rea de criao de funes;
Command History - histrico de tudo o que foi digitado nos ltimos meses;
Current Directory - uma pasta qualquer do computador que fica aberta junto com o
MATLAB, ajuda a organizar o seu trabalho;
Help - por mais que conhea o MATLAB, voc vai precisar. o guia mais til e prtico que
ir encontrar.
-----

Curso de programao aplicada em linguagem MATLAB META Consultoria

2)

2011

Operaes bsicas com escalares e matrizes

Este captulo demonstra como executar operaes bsicas com escalares e matrizes,
desde uma simples soma algbrica a uma inverso de matrizes.
2.a) Escalares
Comandos com escalares funcionam de modo muito parecido aos de uma calculadora. Os
operadores bsicos so mostrados abaixo.

Soma
>>1+1
>>ans =
2
Subtrao
>>1-1
>>ans =
0
Multiplicao
>>2*2
>>ans =
4.0000
Diviso direta
>>4/2
>>ans =
2
Diviso inversa
>>4\2
>>ans
0.5000

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Exponenciao
>>3^2
>>ans =
9
>>2*10^(-5)
>>ans =
2e-5
>> 5e3
>>ans =
5000
Logaritmo neperiano
>>log(5)
>>ans =
1.6094
Logaritmo na base 10
>>log10(5)
>>ans =
2e-5
Raiz quadrada
>>sqrt(9)
>>ans =
3
Mdulo
>>abs(-2)
>>ans =
2
Exponencial
>>exp(1)
>>ans =
2.7183

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Nmero pi
>>pi
>>ans =
3.1416
Funes trigonomtricas em radianos
>>sin(pi/6) %seno
>>ans =
0.5
>>cos(pi/3) %cosseno
>>ans =
0.5
>>tan(pi) %tangente
>>ans =
Inf
>>asin(0) %arco-seno
>>ans =
0
>>acos(1) %arco-cosseno
>>ans =
0
>>sinh(0) %seno hiperblico
>>ans =
0
Nmeros complexos
>>real (x) %Calcula a parte real do nmero complexo x.
>>imag(x) %Calcula a parte imaginria do nmero complexo x.
>>conj(x) %Calcula o conjugado do nmero complexo x.

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

>>abs(x) %Calcula o mdulo do nmero complexo x.


>>angle(x) %Calcula o ngulo usando o valor de atan2 (imag(x), real(x)), e portanto o ngulo est
entre -p e p.
Uma propriedade bsica, usada quase sempre, a atribuio de valores a variveis. Ao
nomear uma varivel, ou seja, atribuir um valor a ela, toda vez que se usar aquela varivel se
estar usando o ltimo valor que ela recebeu. Por exemplo:
>>var1 = 5;
>>var2 = (3*var1+5)/10;
>>var3 = asin(sqrt(var2)/var2);
>>resp = var3*180/pi
>>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 rpido escrev-la numa linha s. Tambm importante perceber que ao digitar ;
no final da linha de comando, o MATLAB executa o comando mas no mostra o valor da resposta.
----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:
>>a=[1,2;3,4]
>>ans =
1

10

Curso de programao aplicada em linguagem MATLAB META Consultoria


>> a*a

2011

%multiplicao de matrizes

ans =
7

10

15

22

>> a.*a

%multiplicao elemento a elemento

ans =
1

16

Note que para criar a matriz usa-se [1,2;3,4] onde os colchetes definem a matriz, as
vrgulas limitam cada coluna e o ponto-e-vrgula pula para a prxima linha. Perceba tambm que
para escrever comentrios no cdigo basta colocar % e o que se escrever depois dela, na mesma
linha, ser apenas um comentrio que no faz parte do programa.
Existem certos comandos especficos de matrizes, tais como calcular determinantes,
inversas, transpostas, criar matrizes identidade, entre outros. Nas funes abaixo, linhas e
colunas representam o nmero de linhas e colunas da matriz.
Inversa
>>inv(mat)
Transposta (o smbolo da transposta a apstrofe)
>>mat
Determinante
>>det(mat)
Identidade
>>eye(linhas,colunas)
Matriz nula
>>zeros(linhas,colunas)
Matriz de uns
>>ones(linhas,colunas)

11

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Matriz aleatria
>>rand(linhas,colunas)
Matriz quadrada mgica somas de linhas, colunas e diagonais so iguais
>>magic(dimenso)
>>magic(3)
>>ans =
8

2
Remodelar matriz

>>reshape(mat,linhas,colunas)
Rotacionar matriz em 90
>>rot90(mat)
A = [ 2 1 0 ; -2 5 -1 ; 3 4 6 ]
ans

=
2

-2

-1

B = rot90(A)
ans

=
0

-1

-2

C = rot90(A,2)
ans

=
6

-1

-2

12

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Somatrio
>>sum(vetor)
Soma acumulativa
>>cumsum(vetor)
>> x=[0 1 2 3 4 5 6 7 8 9 10];
>> cumsum(x)
ans =
0

10

15

21

28

36

45

55

Trocar o lado esquerdo pelo direito


>> fliplr (mat)
Troca a parte de cima com a de baixo
>> flipud (mat)
Diagonalizar
>>diag (mat)
>> a=[1 2 3]
a=
1

>> diag(a)
ans =
1

3
Zera abaixo da diagonal principal

>>triu (mat)
Zera acima da diagonal principal
>>tril (mat)

13

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Dimenso de vetor ou matriz


>>length (mat)
Tamanho de varivel
>>size(var)
Caso precise criar uma matriz com uma estrutura repetitiva, como um vetor de tempos, no
necessrio criar uma estrutura iterativa, basta usar o operador dois-pontos.
>>tempos=[ t_zero : passo : t_final ];
>>tempos=[0:1:15]
>>ans =
0

10

11

12

13

14

15

Ou se precisar 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:15 ; 3:0.1:4.5 ]
>>ans =
Columns 1 through 11
0

1.000

2.000

3.000

4.000

5.000

6.000

7.000

8.000

9.000 10.000

3.000

3.100

3.200

3.300

3.400

3.500

3.600

3.700

3.800

3.900

4.000

Columns 12 through 16
11.000 12.000 13.000 14.000 15.000
4.100

4.200

4.300

4.400

4.500

Caso esteja preenchendo matrizes deste modo e um dos vetores seja maior do que o
outro, o vetor menor ser complementado com zeros at que tenha o mesmo tamanho do vetor
maior. Outro modo til de se criar um vetor usar a funo linspace, pois muitas vezes se sabe
a quantidade de pontos que o vetor dever ter, mas no se sabe o passo. Por exemplo, caso
queira montar um vetor de 20 pontos, de 1.5 a 2.3, como devo proceder?
>>vetor = linspace(t_inicial , t_final , n_pontos)

14

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

>>vetor = linspace(1.5 , 2.3 , 20)


>>ans =
1.500000000000000
1.542105263157895
1.584210526315790
1.626315789473684
1.668421052631579
1.710526315789474
1.752631578947368
1.794736842105263
1.836842105263158
1.878947368421053
1.921052631578947
1.963157894736842
2.005263157894737
2.047368421052632
2.089473684210526
2.131578947368421
2.173684210526316
2.215789473684211
2.257894736842105
2.300000000000000
E num caso onde o problema mais complexo? Tomemos como exemplo uma funo no
espao (Nos prximos captulos estudaremos como plot-la). Para descrev-la numericamente
preciso uma malha, de preferncia bem refinada, 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.
>>[malha_x , malha_y] = meshgrid (vetor_x , vetor_y)
Para compreender melhor do que se trata, execute os comandos abaixo prestando
ateno no que o meshgrid faz (os plots sero estudados mais a frente, isto s um exemplo da
funo meshgrid, que usada para gerar matrizes):

15

Curso de programao aplicada em linguagem MATLAB META Consultoria


>> 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;
>> surf(X,Y,Z)

2011

%calcula Z(X,Y), que uma funo qualquer

%plota a superficie que representa a funo Z(X,Y)

Perceba que a malha gerada bastante refinada, (no caso, como X tem 100 pontos e Y=X,
100*100=10000 pontos) e pode-se observar perfeitamente o comportamento da funo no
intervalo definido. O que a funo meshgrid, e a maioria dos comandos citados, faz no muito
elaborado, porm trabalhoso e demanda muita ateno, que podem ser mais bem aplicada na
soluo do problema de engenharia em si. A grande vantagem do MATLAB sobre outros

softwares a facilidade de programao, o que evita que se desperdice tempo e esforo


realizando tarefas de programao, que no so diretamente relacionadas soluo do problema.
-----

16

Curso de programao aplicada em linguagem MATLAB META Consultoria

3)

2011

Definindo suas prprias funes

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 nested
functions ou sub-rotinas, que so basicamente funes dentro de funes.
3.a) 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 abra o editor do MATLAB e digite:
function [sadas] = nome_da_funcao (entradas)
%comentrios
%comentrios
%comentrios
Comandos
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 no editor:
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 (command window) 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.
-----

17

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

3.b) Nested functions


Nested functions ou sub-rotinas so funes subalternas, frequentemente usadas para
realizar clculos repetitivos e recursivos. Este um tipo de propriedade mais especfico de certos
problemas, e quase sempre usado para resolver numericamente equaes diferenciais. A seguir
apresentado um cdigo que calcula o movimento de uma manivela no tempo e plota a animao
usando uma nested function. Concentre a ateno na sub-rotina e em como us-la, pois isto ser
necessrio mais a frente, e no se preocupe com a animao, ela muito mais simples do que
parece e ser explicada mais adiante.

function [] = animamanivela ()
%
%esta funcao executa a animacao 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
%------------------------------------------------------------------------------function [t,x,y,a,b,h,xc,yc] = geramanivela (T,r,L)
%
%esta funcao calcula os pontos usados na animaao executada pela funcao
%'animamanivela', uma nested function. gera os valores principais da manivela
%(as duas pontas e a articulao)

18

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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*19s(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:

19

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Para salvar sua funo clique na opo save e salve-a com o mesmo nome que deu a ela
no editor de funes, caso isto no seja obedecido o programa no reconhecer sua funo.
conveniente tambm colocar a extenso .m, pois algumas verses antigas no fazem isto
automaticamente. Quando forem salvas, o programa deve gerar um arquivo para a funo, similar
aos apresentados abaixo.

animamanivela.m

areacirc.m

-----

20

Curso de programao aplicada em linguagem MATLAB META Consultoria

4)

2011

Operadores e estruturas condicionais e iterativas

Este captulo mostra a sintaxe e o funcionamento bsico dos operadores lgicos do


MATLAB e ensina como montar estruturas condicionais e iterativas bsicas.
4.a) Operadores
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.
=

Varivel da esquerda recebe valor da direita ( var = 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)

&&

Operador e (dependendo do tipo de dado simples ou duplo)

||

Operador ou (dependendo do tipo de dado simples ou duplo)

Negao

VERDADEIRO / SIM (conveno)

FALSO / NO (conveno)
-----

21

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

4.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
equivalente ao "se", 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 comparao do valor de uma varivel:
if ang==0
plot([0,0],'color','k')
axis off
end

22

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Operadores ELSE e ELSEIF


if condio
comandos 1
elseif condio
comandos 2
else
comandos 3
end
Perceba que o elseif funciona como um if aps o if inicial, pois precisa de uma
condio, porm o else no precisa de condies, sendo que sempre ser executado se a
condio anterior a ele falhar. O else sempre a ltima opo, ele s ser executado se
nenhuma condio anterior a ele for satisfeita.
if condio 1
grupo de comandos A
elseif condio 2
grupo de comandos B
elseif condio 3
grupo de comandos C
else
grupo de comandos D
end
Um exemplo de aplicao uma estrutura condicional de um programa que faz anlise de
reaes esforos:
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

23

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Operadores FOR e WHILE


for varivel = valor_inicial : passo : valor_final
comandos
end
while condio
comandos
(DEVE conter um comando que altere a condio, seno entrar em loop infinito)
end
A sequncia de raciocnio bem prxima do C++, para um loop for tem-se um nmero
definido de iteraes, e usado para se realizar processos onde se sabe as dimenses do que se
est calculando. Por exemplo:
for i=1:length(conect)

%para i variando de 1 at o tamanho do vetor conect

if ele_pzt==i && pzt_sup==1


mat_ele_no(i,2)=1;
end

%condio dupla, as duas devem ser satisfeitas

if ele_pzt==i && pzt_inf==1


mat_ele_no(i,3)=1;
end
end

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

24

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Operador SWITCH
Este comando cria uma chave, composta de vrias opes, que orienta o cdigo para uma
delas dependendo de alguma condio externa. bastante usado em menus e cdigos que tm
que responder de formas diversas a uma mesma situao. Ele recebe uma varivel e em cada
caso testa seu valor. Se o valor da varivel do switch for igual ao valor do case, ento este
caso ser executado.
switch varivel
case 1
comandos
case dois
comandos
default
comandos
end
Por exemplo, um programa que plota vrios tipos de grficos em uma anlise de placas:
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'
surf((dimX*xx), (yy+dimY), (dimZ*10*zz)-(dimZ*5)) %'esquerda'
surf((xx+dimX), dimY*yy, (dimZ*10*zz)-(dimZ*5)) %'fundo'
hold off
case 'malha'
%plota somente a malha
x=linspace(0,dimX,nelx+1); %vetor de x
y=linspace(0,dimY,nely+1); %vetor de y
[x,y]=meshgrid(x,y); %gera os elementos
z=(x*0)+dimZ+(dimZ/100); %eleva na altura certa
surf(x,y,z);
axis equal
camproj ('orthographic')
tam_el_x=(max(x)/(nelx+1));
tam_el_y=(max(y)/(nely+1));
case 'elemento'
%plota somente um elemento genrico

25

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.

Operador BREAK
Este comando tem a funo de sair de um loop, e usado frequentemente dentro de uma
condio, por exemplo:
for k=1:length(xmax)
if xmax(k)<=xalvo
fprintf('\n%f\n',teta);
break
end
end

Este programa calcula a posio de uma esfera lanada obliquamente, a condio para o
break que a posio no vetor seja maior ou igual que a posio-alvo. Devido ao passo ser
relativamente pequeno, pode-se usar <=, pois quando a iterao passar do ponto o erro ter no
mximo o tamanho de um passo, que teoricamente tende zero.
-----

26

Curso de programao aplicada em linguagem MATLAB META Consultoria

5)

2011

Ajustes de curvas e linearizaes

Neste captulo so apresentadas funes e mtodos de interpolao e ajuste de curvas,


exemplificando como manipular dados de forma prtica.
5.a) Interpolao
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.

27

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

Para manipularmos essas informaes, vamos armazen-los na forma matricial da


seguinte maneira.
tempo

= [0 1

5 ];

temperatura

= [0 20 60 68 77 110];

Podemos 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.

28

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

29

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.
----5.b) Ajuste de curvas
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.

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)

30

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Para medir o erro da estimativa linear utilizamos a distncia entre os pontos e a reta
elevada ao quadrado.

Esse 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.

31

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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)

32

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.

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

33

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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:

34

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

35

Curso de programao aplicada em linguagem MATLAB META Consultoria

6)

2011

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.
6.a) Derivando vetores
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 o dt do clculo, podemos fazer a derivao usando a idia
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:
>>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 deve-se fazer uma aproximao na
ltima posio do vetor derivada:

36

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

>>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 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.
----6.b) Localizando 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;

37

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

38

Curso de programao aplicada em linguagem MATLAB META Consultoria

7)

2011

Integrao Numrica

Existem vrios mtodos de integrao numrica, dentre eles estudaremos o modelo mais
simples, que a regra do trapzio e um modelo mais elaborado, que a regra de Simpson.
7.a) Regra do trapzio repetida
Uma integral a rea abaixo de um grfico, ento, se dividirmos o grfico em uma
quantidade imensa de parcelas, pode-se aproximar a rea dessas parcelas por reas de
trapzios. Somando-se a rea de todas as parcelas se obtm uma integral aproximada da funo,
com um erro relativamente pequeno. A regra do trapzio dado 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.
----7.b) Regra de Simpson
Um outro algoritmo que realiza uma operao similar o 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.

39

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

function [] = trapezio_x_simpson ()
%este algoritmo compara a integraao numrica pela regra do trapzio com a
%integrao pela regra de simpson.
x=[0:0.1:10];
y=sin(x.^3)+x;
figure (1)
plot(x,y,'red')
simpson_do_grafico_experimental=INTEGRA_SIMPSON(x,y)
trapz_do_grafico_experimental =trapz(x,y)
%===============================================================================

Onde o algoritmo da funo integra_simpson, que funciona de modo similar, mas no


igual funo quad, dado abaixo.
function [integ] = INTEGRA_SIMPSON (x,y)
n=201;
k=x;
xx=linspace(k(1),k(end),n);
f=interp1(k,y,xx,'spline');
dx=(k(end)-k(1))/(3*n);
integ=(dx*(sum(4*f(2:2:end-1))+sum(2*f(3:2:end-2))+f(1)+f(end)));
%===============================================================================

40

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

zoom de uma regio

41

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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
Perceba que o mtodo se mostra eficiente, pois os resultados obtidos para os dados sem
tratamento e para a funo interpolada so muito prximos.
-----

42

Curso de programao aplicada em linguagem MATLAB META Consultoria

8)

2011

Equaes Diferenciais Ordinrias

Equaes diferenciais de primeira ordem (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.
8.a) Mtodos de Runge-Kutta
So os mtodos mais populares para resoluo de ODEs. O mtodo Runge-Kutta de
primeira ordem utiliza expanso de Taylor de primeira ordem, o mtodo de Runge - Kutta de
segunda ordem 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


em

usando uma linha reta que tangente funo

, como se mostra a figura abaixo. Para calcular o valor de

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


vez determinando o valor de

usamos um tamanho de passo

; se usa a equao diferencial para calcular o valor de


, podemos estimar o valor de

. Uma

43

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

----8.b) 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. Podese 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
[0,3], com condio inicial

no intervalo

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);
%arquivo solveode.m
[x,y_num]=ode45('g5',0,3,3);

44

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

45

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Por exemplo, plote os grficos deslocamento pelo tempo e velocidade pelo tempo, para
m=2, k=1, b=0.15, F(t)=0 e condies iniciais x(0)=5 e x(0)=0.
Para resolvermos o problema necessrio primeiro fazer a modelagem matemtica para
encontrar a EDO que descreve o comportamento do sistema. Atravs da anlise do DCL do
corpo, chegamos seguinte equao:

Onde F(t) a fora aplicada no bloco.


Para resolver uma EDO de segunda ordem utilizando ode45, precisamos reduzir a ordem
da equao, reescrevendo na forma de um sistema.

Isolando

obtemos:

Montando o sistema:

Agora criamos uma funo para implementar o sistema:

46

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

% arquivo eqx2.m
function xdot = eqx2(t,x);
m=2; %declarao dos dados do exerccio
k=1;
b=0.15;
xdot = zeros(2,1);
xdot(1) = x(2);
xdot(2) = (1/m)*(-b*x(2)-k*x(1));
%arquivo massamola.m
[t,x] = ode45('eqx2',[0 100],[5,0]); %tempo de 0 a 100
plot(t,x(:,1),t,x(:,2))
grid on

-----

47

Curso de programao aplicada em linguagem MATLAB META Consultoria

9)

2011

Grficos

Talvez uma das melhores qualidades do MATLAB sejam a facilidade que o programa
proporciona para plotar grficos, animaes e superfcies. Este captulo tem como objetivo ilustrar
as funes de desenho mais teis do programa, por meio de exemplos e dicas de aplicaes.
9.a) Grficos bidimensionais
Grficos bidimensionais necessitam de dois vetores de valores para serem plotados, e
podem ser modificados de vrias maneiras, normalmente, quando se trata de uma funo,
plotamos a varivel independente em X e a dependente em Y. H muitos tipos de grficos
diferentes, e os principais esto listados abaixo com uma breve descrio. Os mais usados sero
exemplificados e detalhados aps a apresentao geral.

Linhas
plot

grficos de funes y=f(x)

plotyy

grfico com dois vetores de valores em Y

loglog

escala logartmica para os dois eixos

semilogx

escala logartmica para o eixo X

semilogy

escala logartmica para o eixo Y

stairs

grfico para dados medidos digitalmente no tempo

contour

grfico til para vista superior de curvas de nvel

ezplot

o mesmo que o plot, porm ele cria o vetor X automaticamente

ezcontour

grfico til para vista superior de curvas de nvel

48

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Barras
Bar

grouped/stacked grfico de barras vertical

barh

grouped/stacked grfico de barras horizontal

hist

histograma

pareto

plota os valores de Y em barras descendentes

errorbar

plota curvas com barras de erro

stem

plota dados discretos

rea
area

grfico de rea

pie

grfico de pizza ou disco, para valores em porcentagens

fill

desenha figura com interior preenchido

contourf

plota vista superior de curvas de nvel

image

desenha imagem

pcolor

plota vista superior de curvas de nvel com a malha usada

ezcontourf

plota vista superior de curvas de nvel

49

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Direo
feather

plota orientao do campo vetorial sobre uma curva

quiver

plota orientao do campo vetorial numa regio do plano

comet

plot no tempo, em movimento

Coordenadas polares
polar

plot em coordenadas polares

rose

grfico para dados discretos, em coordenadas polares

compass

grfico para vetores, em coordenadas polares

ezpolar

plot que gera automaticamente o vetor de , em coordenadas polares

Disperso
scatter

grfico de disperso

spy

grfico usado para visualizar o padro de disperso de matrizes esparsas

plotmatrix

plota matriz de plots

50

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Uma vez exemplificados, vamos entender como usar os principais tipos de funes
grficas fornecidas pelo MATLAB. A funo mais usada sem dvida o plot, para us-la
precisamos de dois vetores, um em X e um em Y. Por exemplo:
function plota_funcao
%esta funo plota funes do tipo y=f(x) e dados em vetores X e Y
x=[-1:0.0001:2.5];
y=0.5*x.^3-x.^2;
plot(x,y)

%vetor x
%vetor y

Outras funes bastante teis so a contourf e a pcolor, que podem, por exemplo,
representar distribuies de temperatura numa superficie:
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)');
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;

51

Curso de programao aplicada em linguagem MATLAB META Consultoria

contourf

2011

pcolor

Grficos como o feather podem ser usados para representar, numa aplicao prtica, a
distribuio de presso sobre o perfil da asa de uma avio:

----9.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:

52

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Linha
plot3

plota funes e curvas no espao

contour3

desenha vrias curvas de nvel sobrepostas

contourslice

desenha as curvas de nvel nas paredes da caixa de plotagem

ezplot3

similar ao plot

waterfall

similar a um grfico de malha, porm s desenha as linhas das matrizes

Malhas de dados
mesh

plota uma matriz como uma malha

meshc

plota uma matriz como uma malha e desenha algumas curvas de nvel

meshz

plota uma matriz como uma malha, similar ao mesh

ezmesh

plota uma matriz como uma malha, similar ao mesh

stem3

plota dados discretos no espao

bar2

grfico 3D de barras verticais

bar3h

grfico 3D de barras horizontais

53

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Slidos
pie3

grfico 3D de porcentagens

fill3

superfcie preenchida no espao

patch

cria polgonos a partir das coordenadas dos vrtices

cylinder

cria um cilindro

ellipsoid

cria um elipside

sphere

cria uma esfera

Superfcies
surf

desenha superfcies

surfl

desenha superfcies com cores baseadas na iluminao do grfico

surfc

desenha superfcies e as curvas de nvel

ezsurf

desenha superfcies

ezsurfc

desenha superfcies e as curvas de nvel

54

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Movimento
quiver3

desenha trajetrias no espao, indicando a intensidade de um parmetro

comet3

desenha trajetrias no espao, em movimento

streamslice

desenha o campo vetorial de um campo para uma varivel constante

Fluxo
scatter3

visualiza a distribuio de dados em matrizes esparsas no espao

coneplot

desenha orientao de fluxos com cones indicando o sentido

streamline

desenha orientao de fluxos com linhas

streamribbon

desenha orientao de fluxos com faixas

streamtube

desenha orientao de fluxos com slidos no espao

Os grficos tridimensionais so uma das funes mais teis do programa, e diferentemente


do que muitos pensam, 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:

55

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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)

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:

56

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.

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

57

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

Text(x,y,texto)

Escreve um texto na tela do grfico no ponto 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)

Este comando escreve um texto nas posies indicadas na tela do grfico


pelo clique mouse.

legend(texto)

Cria uma caixa com a descrio da curva

grid on / off

Desenha ou apaga a grade do grfico

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

Cria vrios grficos numa mesma janela, o primeiro dgito o nmero


de grficos a serem plotados, o segundo e terceiros so as posies
deles na tela, como numa matriz.

figure(n)

Abre uma nova janela

58

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Estilo de linha
usado dentro das funes de desenho, por exemplo:
Plot(x,y,linestyle,smbolo do tipo de linha)
-

Trao contnuo

Pontos nos pontos

--

Tracejada

Cruz nos pontos

Pontos

Estrela nos pontos

Trao-ponto

Crculos

Crculos nos pontos

Marcas em x nos pontos

Cores
usada dentro das funes de desenho, por exemplo:
Plot(x,y,color,cor)
r

Vermelho

Verde

59

Curso de programao aplicada em linguagem MATLAB META Consultoria


b

Azul

Branco

Transparente

[r,g,b]

Matriz em RGB que representa uma cor definida pelo usurio

2011

Escala
Altera a apresentao da escala do grfico. So comandos distintos dos plots, e devem ser
escritos aps eles.
axis([xmin, xmax, ymin, ymax])

Define os limites dos eixos em X e Y

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

Ativa a definio automtica das escalas dos eixos

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

axis square

Trava o grfico como um quadrado ou cubo

axis vis3d

Ativa a visualizao em 3D

axis normal

Define as propriedades defaults dos eixos

axis off

Desliga os eixos

axis on

Liga os eixos

60

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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');
%===============================================================================

-----

61

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

Transparncia
alpha(valor_entre_0_e_1)

Define a transparncia e opacidade do grfico (zero = transparente,


um = totalmente opaco) uniformemente

alphamap('parmetro')

Define a transparncia e opacidade do grfico variando com o


parmetro escolhido

62

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Sombreamento
shading tipo

Define o tipo de sombreamento da superfcie (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;
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;
%===============================================================================

63

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

De modo simplificado, as funes de cada comando esto indicadas na figura abaixo:

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

64

Curso de programao aplicada em linguagem MATLAB META Consultoria

10)

2011

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.
10.a) 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

65

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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 na verso R2008b ou mais recentes
e necessita de cerca de 200Mb de memria por volta. No altere a posio ou o tamanho da
janela do plot durante a montagem do vdeo.):

function O_mundo_gira
%
%como o ribeiro diz... o mundo gira
voltas=1; %Altere aqui o nmero de voltas do globo
fig=figure; %abre a janela do plot
aviobj=avifile('O mundo gira!.avi'); %Cria o arquivo de vdeo
%===================================== 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);
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;

66

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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
F = getframe(fig); %Captura a imagem
aviobj = addframe(aviobj,F); %Acrescenta a imagem ao arquivo de vdeo
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.

-----

67

Curso de programao aplicada em linguagem MATLAB META Consultoria

11)

2011

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.
11.a) Declarando 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

68

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.
----11.b) Operaes 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

69

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Existem alguns outros comandos muito teis para tratar expresses complexas ou realizar
algum tipo de manipulao matemtica na expresso:

Manipulao de Expresses
simple(eq)

Simplifica a expresso simblica eq de todas as formas possveis;

pretty(eq)

Mostra a expresso escrita na forma convencional (como escrevemos no


caderno, e no na forma do computador);

expand(eq)

Escreve a equao na forma expandida;

Soluo de Expresses
solve(eq , var)

Resolve a expresso eq para a varivel var;

int(eq)

Faz a integral indefinida da expresso;

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

Calcula o limite de eq, pela direita ou pela esquerda, com x


tendendo a a;

limit(eq , x , a)

Calcula o limite de eq com x tendendo a a;

70

Curso de programao aplicada em linguagem MATLAB META Consultoria


dsolve(eq1 , eq2 , ... , cond1 , cond2 , ... , v)

Soluciona
condies

sistema

iniciais

de

cond

EDOs

2011
com

com

as

varivel

independente v;
Todos os comandos mostrados anteriormente se aplicam s variveis e expresses
simblicas, como ser mostrado a seguir.
----11.c) Clculo diferencial e integral usando o solver
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

71

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

%escrever as derivadas desta forma


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

x=f/k-m/k*d2x-c*dx;
x_lap=laplace(x,t,s);
pretty(simple(x_lap))

f
m laplace(diff(diff(x(t), 2), t), t, s)
c (x(0) - s laplace(x(t),t,s)) + --- - --------------------------------------k s
k

72

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.
Suponha que foi realizado um experimento, onde se mediu um parmetro em alguns
pontos distintos, obtendo-se um vetor de pontos. Este vetor representa algum parmetro fsico,
seja ele posio, intensidade, tempo, etc, que nos interessa, pois se precisa dele para determinar
uma incgnita do problema. Por exemplo, podemos criar um vetor de pontos semi-aleatrios para

73

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

74

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

%--------------------------------------------- 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')

E o resultado deste programa :

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

75

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

-----

76

Curso de programao aplicada em linguagem MATLAB META Consultoria

12)

2011

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.
12.a) Criando 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:

77

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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:

78

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

As GUIs bsicas e aplicaes principais de cada um dessas funes esto apresentadas


abaixo:

GUIs
Static Text

Texto esttico, pode ser alterado pela funo do guide

Edit Text

Texto editvel, normalmente usado para entrada de dados pelo usurio

Push Button

Boto, um boto simples, como um OK

Toggle Button

Boto de ativao, quando clicado permanece pressionado

Radio Button

Boto de seleo, aplicvel quando se tem vrias opes e somente uma


pode ser escolhida

Check Box

Boto de seleo, aplicvel quando se tem vrias opes e vrias podem


ser escolhidas simultaneamente

Panel

Painel, usado por questo de organizao e agrupamento de funes

79

Curso de programao aplicada em linguagem MATLAB META Consultoria


Button Group

2011

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

80

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

12.b) Programando guides


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), e isto se faz alterando e programando o
cdigo correspondente guide, como foi feito neste exemplo:

81

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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

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

% --- Outputs from this function are returned to the command line.
function varargout = funcoes_trigonometricas_OutputFcn(hObject, eventdata,
handles)
%
%
%
%

varargout
hObject
eventdata
handles

cell array for returning output args (see VARARGOUT);


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

82

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject
% eventdata
% handles

handle to pushbutton1 (see GCBO)


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

global w posicao t
clear funcao
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)
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
% eventdata
% handles

handle to popupmenu1 (see GCBO)


reserved - to be defined in a future version of MATLAB
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

83

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

function edit1_Callback(hObject, eventdata, handles)


% hObject
% eventdata
% handles
global w

handle to edit1 (see GCBO)


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

handle to edit1 (see GCBO)


reserved - to be defined in a future version of MATLAB
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:

84

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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:

-----

85

Curso de programao aplicada em linguagem MATLAB META Consultoria

13)

2011

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, fuzzy e redes neurais. Entretanto, devido
durao do curso e a alta especificidade destes toolbox eles no sero abordados no curso.
13.a) Criando diagramas de bloco
Para comearmos, clique no cone do simulink na barra de ferramentas na parte superior
da tela:

Que abrir a seguinte janela:

86

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.
----13.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.

87

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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


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

C
X

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:

88

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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
(coeficientes) de cada termo (
velocidade,

) da expresso, ou seja,

multiplica a

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
externa com

, e faa a fora

, e defina o tempo de execuo at

. Feito

isto execute o sistema e clique no bloco de grfico (aps abrir o grfico clique em autoscale,
para visualizar na escala correta). O grfico dever se parecer com:

89

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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.

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


frequncia natural deste sistema, e execute a simulao at

, que a

. A resposta ento dever

ser:

90

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Onde o grfico superior a fora externa aplicada e o inferior a posio da massa no


tempo.
----13.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:

91

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

Neste sistema, a suspenso de uma roda foi isolada do resto do carro, considerando-se
como da massa do veculo. O contato da roda 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
representada por

, o amortecedor por

Equacionando

sistema

e sua massa por

. A mola da suspenso

e a massa de do veculo por

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:

92

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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:

93

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

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:

Onde o termo de deslocamento externo dado pelo seno multiplicando a constante.


Vamos agora executar o diagrama com os seguintes valores para as constantes:
. E vamos definir a
frequncia do seno como sendo

, e sua amplitude como

. A resposta do sistema

dever ser a seguinte:

94

Curso de programao aplicada em linguagem MATLAB META Consultoria

2011

-----

95

Curso de programao aplicada em linguagem MATLAB META Consultoria

14)

2011

Referncias

[1] Dainaila, I. et al, An introduction to scientific computing twelve computational projects solved
with Matlab, ed. Springer, 2007
[2] The MathWorks, Inc. MATLAB Programming, The MathWorks Inc., 2004;
[3] The MathWorks, Inc. Using MATLAB Graphics, The MathWorks Inc., 2004;
[4] MacMahon, D., MATLAB Demystified, ed. McGraw Hill, 2007;
[5] Konte, J. F. et al, Curso de Matlab 5.1 Introduo soluo de problemas de engenharia,
UERJ Universidade do Estado do Rio de Janeiro;
[6] Ogata, K., Modern Control Engineering, Prentice Hall, 1997;
[7] White, R. E., Computational Mathematics Models, Methods and Analysis with MATLAB and
MPI, Chapmann e Hall/CRC, 2000;
[8] Karris, S. T., Introduction to Simulink with Engineering Aplications, Orchard Publications,
2006;

96