Professional Documents
Culture Documents
Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Engenharia Qumica Semana Acadmica de Engenharia Qumica
AULA 1 - CONCEITOS BSICOS 1. 2. 3. 4. 5. 6. O QUE O MATLAB - ESTRUTURA DOS DIRETRIOS COMANDOS DE LINHAS COMANDOS BSICOS SMBOLOS E CONSTANTES TRABALHANDO COM MATRIZES GRFICOS
3 3 3 3 3 3 4 7 7 7 8 9 9 10 11 11 13 13 15 16 18 21 21 25 28
AULA 2 PROGRAMAO 1. 2. 3. 4. 5. 6. ALGORITMOS NOES BSICAS DE PROGRAMAO M-FILES COMANDOS DE FLUXO E OPERADORES LGICOS VETORIZAO UTILIZAO DO DEBUGGER EXCELLINK
AULA 4 SIMULINK 1. 2. 3. 4. IDIA BSICA DO FUNCIONAMENTO DO SIMULINK MSCARAS S-FUNCTIONS TABELAS DE AUXLIO
LISTA DE EXERCCIOS
BIBLIOGRAFIA RECOMENDADA
31
3. Comandos Bsicos
Alguns comandos bsicos que ajudam o usurio na utilizao do software so descritos a seguir:
who: informa as variveis presentes no workspace. O comando whos retorna as variveis e algumas informaes sobre as mesmas clc: limpa a tela which: informa o diretrio de execuo de uma determinada funo
which sin which ode23
diary: salva o texto de uma seo do MATLAB no diretrio corrente laod/save: carrega / salva em disco as variveis do workspace como arquivo de dados (extenso .mat) clear: limpa variveis do workspace
clear a; clear all;
2. Comandos de linhas
Todas as funes do MATLAB so executadas atravs de comandos digitados diretamente na rea de trabalho (workspace) aps o prompt.
5+7 2\3 5*2 2^3 2/3
what: retorna os arquivos relacionados ao MATLAB presentes no diretrio de trabalho dir / ls: retorna todos os arquivos do diretrio de trabalho cd: muda (ou apenas informa) o diretrio corrente
cd .. cd c:\temp cd
4. Smbolos e constantes
Diversos smbolos representam constantes ou limites da mquina. Os principais so:
A resposta destas operaes ser armazenada na varivel ans, cada operao atualizar o seu valor. Para inibir a exibio da resposta na tela, deve-se terminar a expresso com ponto e vrgula (;). Para armezenar valores em uma varivel especfica, deve-se atribuir o nome da varivel:
a=4+2; b=7*3; c=a+b
O MATLAB pode armazenar variveis, diferindo entre maisculas e minsculas, ou seja, case sensitive, deste modo as variveis x e X so diferentes. As funes matemticas mais utilizadas so listadas a seguir:
eps: preciso relativa da mquina realmin/realmax: menor/maior nmero representvel na mquina inf: representao do infinito positivo (-INF representa o infinito negativo) nan: representao de uma indeterminao matemtica (p.ex.: 0/0; Inf/Inf) pi: 3.1415926535897...
funes trigonomtricas: sin; cos; tan; asin; acos; atan logaritmo decimal: log10 logaritmo natural: log exponencial: exp valor absoluto: abs
Entrada de matrizes
Matrizes podem ser geradas de diferentes modos:
Listas contendo funes elementares e especiais podem ser visualizadas executando o comando help seguido das palavras elfun e specfunc.
Para separar elementos de colunas diferentes pode-se usar a vrgula ou o ESPAO. Para separar linhas usase o ponto e vrgula ou o ENTER().
Cada elemento da matriz indexado, sendo possvel extrair-se um elemento indicando sua posio da forma linha-coluna ou da forma seqencial.
a (2) = 3
extrai a diagonal da matriz A gera uma matriz diagonal com os elementos da diagonal iguais a 1 e 2. retorna um vetor com as dimenses da matriz A redimensiona a matriz A segundo o as novas dimenses mxn
a (2,1) = 3
Usando funes de construo Algumas funes do MATLAB auxiliam a montagem de matrizes com caractersticas especficas. Alguns exemplos so a matriz identidade e matrizes com uns ou zeros .
eye(3) ones(3) zeros(3)
size(A)
reshape(A,m,n)
STRINGS
Entende-se por strings o conjunto de caracteres colocados entre aspas simples.
s = Este texto uma string
Uma string entendida pelo MATLAB como um vetor de caracteres, portanto, no exemplo acima, para pegarmos apenas a palavra Este, basta fazer
s(1:4) ans = Este
todas as linhas da coluna 1 todas as colunas da linha 1 todas as colunas das linhas 1 e 3
Como encarada como um vetor, tambm existem formas de manipular-mos strings atravs de indexao de seus elementos ou ento utilizando funes especiais, como por exemplo: eval(S) avalia a string S como uma expresso do MATLAB
As operaes de adio, subtrao, multiplicao e diviso (+ - * / ) seguem as regras de operaes matriciais, enquanto que o operador ponto antecedendo as operaes de multiplicao e diviso, faz com que a mesma seja realizada elemento a elemento.
[2 3; 4 5] .* [1 2; 3 4] ans = [2 6 12 20]
str2num(7) converte a string 7 no nmero 7 num2str(7) strcat(S,T) strcmp(S,T) converte o nmero 7 em string concatena as strings S e T compara as strings S e T
Alm destas operaes bsicas, ainda pode-se aplicar funes trigonomtricas, exponenciais e logartmicas a matrizes, as quais retornaro uma matriz com os elementos da matriz original avaliados pela funo aplicada ponto a ponto. No caso da operao potncia (^), a soluo segue regra da multiplicao matricial, enquanto que a operao ponto antecedendo (.^), elevar elemento a elemento na potncia dada.
[2 3; 4 5] .^2 ans = [4 9 16 25]
6. Grficos
Os grficos so considerados pelo MATLAB como figuras, nas quais pode-se visualizar de vrias formas diferentes um conjunto de dados. Como so figuras, para manipul-los, pode-se utilizar comandos de linha (diretamente atravs da barra de ferramentas da janela criada para o grfico) ou ento utilizando o GUIDE, como ser visto mais adiante. O MATLAB apresenta uma srie de funes prontas para montar grficos 2D, 3D, de barras, de disperso, e outros. Para ver detalhadamente estas funes, basta dar um help graph2d, graph3d ou specgraph, enquanto que os comandos de linha para manipul-los podem ser encontrados no help graphics.
Outras operaes e funes geralmente utilizadas so: : transposta conjugada eig(A) : auto valores/vetores da matriz A norm(A): norma da matriz A det(A) : determinante da matriz A inv(A) : inversa de A
2D PLOTS
Existem vrias formas de fazer grficos 2D no MATLAB, a mais usual utilizando o comando plot. Para tanto, devese especificar os vetores das ordenadas e das abcissas.
x = [1:10] ; y = x; plot(x,y);
Outras funes podem ser encontradas no help matfun. Para manipular matrizes ainda pode-se utilizar funes especficas, como por exemplo:
10 9 8 7 6 5 4 3 2 1
10
Este comando faz o grfico de uma reta y = x. No caso da entrada ser apenas um vetor coluna, o comando plot o considera como ordenada e gera a abcissa automaticamente. As cores da linha, bem como seu estilo, podem ser acrescentados como argumentos desta funo da seguinte forma:
axes: gera eixos axis: controla a escala dos eixos legend: adiciona legenda grid on/off: adiciona/retira as linhas de grade do grfico ginput: permite clicar no grfico para pegar pontos gtext: adiciona textos em qualquer posio especfica na figura.
plot(x, x, r, x, 2 * x, --b');
20 18 16 14 12 10 8 6 4 2
Ainda possvel fazer mais de um grfico na mesma figura com o comando subplot.
subplot(1,2,1);plot(1:10,'*b');subplot(1,2,2);plot(1:10,'--m');
10 9 8 7 6 5 4 10 9 8 7 6 5 4 3 2 1
10
3 2
Este comando gera um grfico com duas retas, y=x e y= 2x, a primeira em linha contnua vermelha e a segunda descontnua azul. As opes que podem ser utilizadas no comando plot so as seguintes:
y m c r g b w k cor amarelo magenta ciano vermelho verde azul branco preto . o x + * s d v marcador ponto crculo x-marca cruz estrela quadrado diamante tringulo : -. -tipo de linha slido ponto trao-ponto tracejada
10
10
Desta forma o grfico da reta com o marcador * ser o primeiro de uma figura que permite apresentar dois grficos, em uma linha e duas colunas: subplot(linha,coluna,posio)
3D PLOTS
Para gerar grficos 3D preciso montar uma malha com os vetores das trs dimenses envolvidas. O comando que gera esta malha com facilidade o mesgrid que toma dois vetores como argumento para gerar uma malha que ser utilizada para o clculo da uma terceira dimenso.
Para mais opes basta ver no help plot. Um outro comando que gera grficos de funes bidimensionais o ezplot, ele tem como argumento uma funo na forma de string e um intervalo de variao. Neste caso no preciso definir os vetores das ordenadas e abcissas.
ezplot(cos(x) , [0,pi]);
Funo co-seno 1
200
150
100
50
0.5
0 10 10 5 8 6 4 2 0 0
Y=cos(X)
-0.5
Para adicionar um ttulo ao grfico utiliza-se o comando title, enquanto que para nomear os eixos, utiliza-se o comando xlabel / ylabel. Para adicionar mais de um grfico na mesma figura, utiliza-se o comando hold. Este comando funciona como uma chave liga-desliga, adicionando outras funes no mesmo grfico enquanto no for executado o hold off.
O comando mesh cria um grfico 3D na forma de uma malha. Outros comandos, como o surf e o surfl criam um grfico com os elementos da malha preenchidos, permitindo ainda a possibilidade de uma representao contnua, atravs do comando shading interp. Para representar linhas e pontos no espao, o comando utilizado o plot3, que toma trs vetores como argumento.
scatter(x,y(:,2));
15
plot3(x , y , z);
10 200
150
100
50
0 10 10 5 4 2 0 0 8 6
10
Para alterar as cores, pode-se utilizar o comando colormap, que toma como argumento um vetor RGB (red green blue), ou ento vetores pr definidos como na tabela a seguir:
hot vga gray jet bone prism copper autumn pink cool white hsv flag winter
Faz um grfico de disperso dos dados. Equivale ao plot(x,y,o). Outros comando de manipulao utilizados em grficos 2D e 3D esto na barra de ferramentas das prprias figuras.
abre uma figura nova abre uma figura salva a figura imprime a figura
x=[1:10];y = [x 1.5*x];
bar(x,y);
15
10
10
Faz um grfico de barras da matriz y mxn com m grupos de n barras verticais enquanto que o vetor x deve ser monotonicamente crescente ou decrescente.
area(x,y);
25
20
15
10
10
pie(x);
4% 2% 5% 7% 18%
9% 16%
11%
13%
15%
Faz um grfico pizza dos valores do vetor x, que normalizado e apresentados como propores. 6
Aula 2 Programao
1. Algoritmos Noes Bsicas de Programao
Um programa nada mais do que uma seqncia de comandos (rotina) estabelecida de acordo com um objetivo pr-estabelecido, ou seja, imprescindvel que, antes de iniciar-se um programa, o usurio esteja completamente ciente do que ele deseja que a rotina realiza. O primeiro passo para o desenvolvimento de uma rotina a construo de um algoritmo para o programa, onde todos os comandos devem ser explicitados. Uma boa maneira para a construo do algoritmo a utilizao de um fluxograma. A partir do fluxograma, o nico trabalho do usurio traduzir o esquema para a linguagem de programao, qualquer que seja esta. Uma simbologia para o desenho do fluxograma apresentada a seguir: Entrada de dados Deciso Exibir valor Processo critrio de convergncia do bloco de deciso interrompa o ciclo. Para implementar esta rotina em qualquer linguagem de programao, basta atribuir os comandos devidos, de forma que o programa execute o algoritmo passo a passo.
2. M-FILES
A linguagem de programao do MATLAB utiliza exatamente os mesmos comandos descritos na aula anterior, do mesmo modo que eles seriam utilizados se digitados no workspace, porm os comandos ficam agrupados e a execuo de todos eles, em seqncia, pode ser realizada digitando-se apenas o nome atribudo seqncia, que pode ser salva em um arquivo de texto com a extenso .m. Os arquivos contendo rotinas de execuo para o MATLAB so denominados m-files. Para inserir comentrios no texto, usa-se o smbolo %. O uso de comentrios permite um melhor entendimento da rotina por qualquer usurio. A ajuda (explicao sobre o funcionamento da rotina) de cada m-file tambm definida utilizando linhas de comentrio. As primeiras linhas do programa, se marcadas com o marcador % so exibidas na tela quando o usurio digira help nomearq, onde 'nomearq' o nome do arquivo de texto. H duas opes de utilizao dos m-files pelo MATLAB: usando os chamados script-files ou usando as functions. Ambas consistem da utilizao das funes bsicas do aplicativo na seqncia desejada, sendo que o que as diferencia so o local onde as variveis so armazenadas durante os clculos e a forma de entrada e sada de dados.
A seguir, utilizando esta notao, mostrado um fluxograma com o algoritmo para clculo da presso de vapor de um lquido para uma dada temperatura utilizando a equao de estado de Peng Robinson.
Tc , Pc e , T, P0
a= 0 ,46 R Tc 1 + m 1 Tr Pc 0 ,078 RTc b= Pc m = 0 ,37 + 1,54 0 ,27 2 A= aP R 2T 2 B= bP RT
2 2
[ (
)]
Resolver A e B
Script-files
)
A utilizao de um script-file funciona exatamente da mesma forma que a execuo direta de comandos no prompt do MATLAB. Quando um script-file dodado, cada comando presente no arquivo de texto executado. Os script-files podem operar com variveis presentes no workspace ou com dados criados durante a execuo. Uma vez que este tipo de m-file no possui argumentos de entrada e sada, as variveis criadas so armazenadas no workspacedo MATLAB. Os script-files podem, inclusive, retornar elementos grficos, usando comandos como plot. A seguir proposto um exemplo de script-file para determinar a frmula molecular de um composto orgnico a partir da sua frmula centesimal e do peso molecular do composto. O m-file pode ser escrito em qualquer editor de texto, sendo armazenado com a extenso .m. Para ser executado, deve-se digitar no prompt do MATLAB o nome do arquivo (sem a extenso), sendo que o arquivo deve estar situado no diretrio de trabalho ou ento estar no caminho (path) do MATLAB. 7
Z 3 + Z 2 ( B 1 ) + Z A 3B 2 2 B + B 3 + B 2 AB = 0 bP ln = ( z 1 ) ln z RT bP z + 1 + 2 RT a ln 2bRT 2 z + 1 2 bP RT f = P
Calcular f V e fL
( (
) )
P=P
f f
f
V
No
fV
1 < tol ?
Sim
Escrever P=Psat
No exemplo, as equaes utilizadas so mostradas ao lado de cada bloco de processo, o que tambm ajuda na implementao. As entradas do processo so constantes do componente (temperatura e presso crtica e fator acntrico), a temperatura desejada e uma estimativa inicial para a presso de vapor. A partir destes dados, utilizando a equao de estado de PengRobinson a rotina resolvida iterativamente at que o
% Programa: % Frmula centesimal --> Frmula molecular % Inicializao clc, clear all , clear global % Pesos moleculares dos elementos pm=[ 12.01 1.01 16 14.01 ]; % Entrada de dados comp=input('Entre com o vetor de composies percentuais (C,H,O,N) '); pmc=input('Entre com o peso molecular do composto ); ' % Execuo prorp=pmc*comp/100; formula=round(prorp./pm)
no
script-file
!
so
'
)
Para utilizar esta varivel em um f-workspace o mesmo comando deve ser dado na function que o utiliza.
"
"
Functions
As rotinas escritas como functions so tambm executadas a partir do prompt do MATLAB, e ento criam um workspace (a partir de agora denominado f-workspace) prprio, onde apenas algumas (ou mesmo nenhuma) variveis do workspace do MATLAB entram, onde todas as variveis geradas so armazenadas e de onde apenas as variveis desejadas retornam. A forma de execuo das functions segue a seguinte sintaxe:
[sadas] = funcao(entradas)
Deste modo, apenas as variveis descritas no grupo entradas entram no f-workspace e apenas as descritas em sadas retornam ao workspace do MATLAB. funcao o nome do m-file que contm a rotina que determina sadas a partir de entradas. Tanto um grupo quanto o outro podem ser qualquer tipo de varivel do MATLAB (escalares, vetores, matrizes, estruturas, strings, cell arrays, ...). A utilizao de functions bastante til por permitir a execuo da mesma rotina para vrios conjuntos de entrada sem a necessidade de alterar o arquivo de texto e por no poluir o workspace do MATLAB com as variveis utilizadas em clculos intermedirios da rotina. A seguiu um exemplo de function, utilizando o mesmo algoritmo do exemplo anterior:
function [formula] = analise_f(comp,pmc) % [formula] = analise_f(comp,pmc) % Frmula centesimal --> Frmula molecular % Esta function determina a formula centesimal % de um composto orgnico a partir do vetor de % composies percentuais comp=[C,H,O,N] e do % peso molecular do composto (pmc) % Pesos moleculares dos elementos pm=[ 12.01 1.01 16 14.01 ]; % Execuo prorp=pmc*comp/100; formula=round(prorp./pm);
Lao FOR
O lao for executa uma seqncia de operaes por um determinado nmero de vezes. O comando for define o incio do lao, determinando o intervalo em que uma varivel vai ser avaliada. Esta varivel pode ser usada em uma seqncia de operaes, definidas pelas linhas de comando do m-file que ficam entre os comandos inicial e final do lao (end). Para quebrar o lao em determinado ponto pode-se utilizar o comando break (normalmente utilizado aps um operador lgico). A seguir um exemplo que demostra a utilizao do comando for:
for i=1:4; A(i,1)=i; A(i,2)=i^2; end
1 4 9 16
determina-se qual seqncia de comandos deve ser seguida, sendo esta terminada com um novo case, com um otherwise (equivalente ao comando else do operador if) ou ainda com o terminador da operao de avaliao lgica end. A seguir um exemplo, utilizando o resultado do anterior.
for i=1:3; for j=1:3; switch B(i,j) case 0 C{i,j}='zero'; case {1,-1} C(i,j)={'nonzero'}; end end end C C= 'zero' 'nonzero' 'nonzero'
Operador lgico IF
O operador if funciona como um condicional, avaliando uma operao relacional* e determinando uma seqncia de comandos a ser seguida, definida a partir do ponto onde a expresso avaliada pela operao relacional se torna verdadeira. Vrias expresses podem ser avaliadas para a definio da seqncia de comandos a ser seguida, para isso se utilizam os operadores elseif ou else. O comando elseif determina uma nova condio a ser avaliada, enquanto o comando else determina a seqncia de operaes caso nenhuma das condies anteriores tenha sido satisfeita. Para indicar o trmino de uma operao lgica if devese inserir o comando end rotina. A seguir um exemplo ilustrativo da utilizao dos comandos if, elseif, else.
for i=1:3; for j=1:3; if i == j B(i,j)=0; elseif i>j B(i,j)=-1; else B(i,j)=1; end end end B B= 0 1 1 -1 0 1 -1 -1 0
4. Vetorizao
O MATLAB um software desenvolvido para trabalhar com matrizes. Quando se est construindo uma rotina de clculo e se deseja utilizar uma ferramenta de loop, onde o objetivo calcular uma expresso diversas vezes, muito mais eficiente trabalhar utilizando o conceito de operaes matriciais ou vetoriais. Para demonstrar o que queremos dizer, vamos apresentar uma rotina simples, implementada de dois modos, onde se evidencia a diferena de eficincia entre uma implementao utilizando loops sua verso vetorial.
8 9 @ 8 9 @ A B C D A B C P W C I P I C D
H T
Operador while
8
c C
Em suma, o operador define um lao de modo que a seqncia de operaes compreendida entre o incio e o final do intervalo (determinada pelo end) seja realizada at que uma determinada condio seja satisfeita.
e
Utilizando a forma vetorizada, para este exemplo, tem-se uma reduo de 70 % no tempo computacional.
5. Utilizao do DEBUGGER
O MATLAB possui um editor de textos que est configurado para trabalhar com sua linguagem de programao, o DEBUGGER. Para rodar o editor, digite edit na linha de comando, um documento em branco ser aberto. Case se deseje rodar o editor e abrir um documento de texto, basta digitar edit seguido do nome do arquivo. As principais vantagens da utilizao deste editor so a visualizao grfica dos textos digitados e a possibilidade de se trabalhar simultaneamente com o MATLAB e o editor.
As possveis operaes relacionais so mostradas digitando-se help relop na linha de comando do MATLAB 9
Os recursos de visualizao identificam cada tipo de funo do MATLAB com uma cor diferente, alm de possuir recursos (fracos) de auto-tabulao. O estilo dos textos gerados o mesmo mostrado nos exemplos deste captulo. A possibilidade de utilizao simultnea do editor com o MATLAB auxilia na procura de eventuais erros de sintaxe no programa, uma vez que permite a execuo de rotinas linha a linha, colocao de pontos de quebra e execuo de intervalos do programa entre outros. So disponveis ainda uma srie de comandos de edio comuns, como localizar, voltar, copiar, ...
6. ExcelLink
Para facilitar o trabalho de fluxo de dados entre o MATLAB e programas do MS-Office, foi criado o ExcelLink, uma macro desenvolvida para o MS-Excel que permite o envio e recebimento de dados do MATLAB. Executando o arquivo excllink.xla* o MS-Excel executado, surgindo um conjunto de botes aparece na barra de ferramentas. O MATLAB deve ser executado a partir do Excel para ativar o link. Pode-se enviar dados para o MATLAB selecionando uma ou vrias clulas e usando o boto putmatrix, ento aparecer uma janela pedindo o nome da varivel a ser armazenada com estes dados. Para receber dados deve-se utilizar o boto getmatrix e informar a varivel onde esto armazenados os dados que quer-se buscar. possvel ainda utilizar funes do MATLAB no Excel. Para tanto, usa-se o boto evalstring. As variveis de sada devem ser armazenadas no workspace do MATLAB, ento deve-se atribuir um nome varivel para depois import-la para o Excel.
As macros desenvolvidas utilizam o MS Windows 95 ou MS Windows NT 4.0; MS Excel 97; e MATLAB 5.1 superior. 10
CELL ARRAYS
As listas (ou disposio em clulas) so uma classe especial de matrizes, cujos elementos, ou clulas, contm matrizes do MATLAB, permitindo que matrizes de diferentes dimenses possam ser armazenadas em uma nica varivel. A sintaxe para criar uma lista (Cell Array) a seguinte: z = { A B C ... } onde A, B,C,etc., podem ser matrizes, outras listas, uma estrutura ou um string, por exemplo.
a=1:3; b=[5 6;7 8]; c={a b}; d.a=a; d.b=b; z={a b c d}; a a= 1 2 3 b b= 5 6 7 8 c c= [1x3 double] [2x2 double] d d= a: [1 2 3] b: [2x2 double] z z= [1x3 double] [2x2 double] {1x2 cell} [1x1 struct]
MULTIDIMENSIONAL ARRAYS
Matrizes multidimensionais so uma extenso do conceito de matrizes bidimensionais, que so acessadas utilizando apenas dois ndices (linha, coluna); para o caso de uma matriz tridimensional, o nmero de ndices necessrios para localizar um elemento especfico na matriz passa a ser igual a trs. Desta forma, para uma matriz com dimenso igual a n, um elemento especfico estar definido por n ndices. A figura a seguir apresenta uma forma visual de interpretar matrizes multidimensionais.
Neste caso que foi apresentado, a e b so matrizes, c uma lista com duas matrizes, d uma estrutura com dois campos, um contendo a matriz a e outro a matriz b; enquanto que z tambm ser uma lista, porm contendo duas matrizes, uma lista e uma estrutura. Este tipo de matriz pode ser construda com os mesmos comando utilizados para matrizes bidimensionais, como ones, rand, e outros, porm agora com mais de dois argumentos que especificam as dimenses.
rand(2,2,3) ans(:,:,1) = 0.5466 0.6946 0.4449 0.6213 ans(:,:,2) = 0.7948 0.5226 0.9568 0.8801 ans(:,:,3) = 0.1730 0.2714 0.9797 0.2523
Para manipulao dos elementos de uma lista tambm se utiliza as chaves, que serve para indicar em que clula se encontra determinado objeto.
z{2} ans = 5 6 7 8
Desta forma, pode-se capturar a matriz b que est armazenada na lista z, mas se queremos capturar um elemento da matriz (p.ex.: o nmero 6), uma das possibilidades a seguinte:
z{2}(1,2) ans = 6
Uma matriz tridimensional, por exemplo, pode representar a temperatura em pontos de uma malha retangular em um espao tridimensional. A maneira pela qual as matrizes multidimensionais so manipuladas equivalente s matrizes bidimensionais, porm agora deve-se utilizar um nmero de ndices compatvel com o nmero de dimenses para referenciar as posies desejadas na matriz.
Ou seja, vai especificando cada vez mais para poder capturar o elemento desejado, sempre seguindo a sintaxe referente objeto que se est trabalhando, por exemplo:
z{3}{2}(1,2) ans = 6
Este comando tambm retorna o nmero 6 da matriz b porm neste caso a matriz b est dentro da lista c na 11
posio dois, que por sua vez ocupa a posio trs da lista z. Para criar uma lista de matrizes vazias pode-se utilizar o comando cell, que tem como argumento as dimenses desejadas para a lista.
STRUCTURES
As estruturas so uma classe de matrizes do MATLAB que permitem armazenar dados de naturezas diferentes em um mesmo lugar. As estruturas diferem das Listas por possurem nomes que identificam seus campos. Uma forma de criar uma estrutura a seguinte:
dados.nome='fulano'; dados.idade=25; dados.fones={[316 33 33] [316 44 44]}; dados dados = nome: 'fulano' idade: 25 fones: {[316 33 33] [316 44 44]}
Como as estruturas so uma classe de matrizes, ainda pode-se adicionar elementos a uma mesma estrutura. Para tanto, deve-se proceder da seguinte maneira:
dados(2).nome='ciclano'; dados(2).idade=23; dados(2).fones={[999 88 88] [777 66 55]}; dados dados = 1x2 struct array with fields: nome idade fones dados(1) ans = nome: 'fulano' idade: 25 fones: {[316 33 33] [316 44 44]} dados(2) ans = nome: 'ciclano' idade: 23 fones: {[999 88 88] [777 66 55]}
Ou ainda,
b(1,1).a=[35 36]; b(1,2).a=[37 38]; b(2,1).a=[39 40]; b(2,2).a=[41 42]; b b= 2x2 struct array with fields: a b(1:2,1).a ans = 35 36 ans = 39 40
Uma outra forma de criar uma estrutura utilizando o comando struct, que toma como argumentos os nomes dos campos seguidos dos seus respectivos valores.
12
Aula 4 Simulink
1. Idia Bsica do funcionamento do Simulink
O subsistema
i ! # ! &
4
&
&
'
SIMULINK uma ferramenta interativa, baseada em estrutura de diagrama de blocos, voltada para a modelagem, anlise e controle de sistemas. A interface grfica do aplicativo permite que sejam criados modelos a patir de um conjunto de blocos j existente (blocklibrary) ou ento criar blocos que executam funes editadas pelo usurio.
'
'
'
"
'
"
'
&
! 4
3 %
"
'
&
No MATLAB, em todos os pontos, existem exemplos demonstrativos (demos) que mostram exemplos de utilizao de cada tpico. Um destes demos, referente ao SIMULINK, a simulao de um modelo termodinmico de uma casa. O exemplo pode ser explorado digitando-se thermo no prompt do MATLAB. O diagrama de blocos do exemplo ser mostrado na tela.
f
'
&
g
&
&
i 3
i 4
h &
"
"
h #
i 4
O exemplo modela a termodinmica de uma casa utilizando um equacionamento simples. Para rodar a simulao, clique em janela do SIMULINK.
h
'
'
na barra de ferramentas da
O termostato controla o funcionamento do aquecedor, que procura manter a temperatura da casa em 70 F (setpoint). A temperatura externa mdia de 50 F, tendo variao modelada como um seno de amplitude 15 F e perodo de 24 horas. O exemplo utiliza subsistemas para simplificar o modelo. Um subsistema um bloco que representa um conjunto de blocos. Este exemplo contm cinco subsistemas, um representando o termostato (
4 v 4 ( 6 # ! # ! ! i p q r s t u % w 3 ( ! # x " # ! # ! ! ! ! # # 6 t u q ! y # y ! " ! " ! # % v 1 4 4 p r q p q t
! 3
4 (
O subsistema House utiliza as temperaturas externa e interna com ao do aquecedor para atualizar a temperatura interna da casa. Um duplo clique no cone revela a modelagem, mostrando os bolcos que compem o subsistema.
13
quer. Na parte inferior da janela aparece o cone do bloco marcado e breves informaes sobre o mesmo (as mesmas informaes so mostradas com um duplo clique no bloco quando este est na janela de trabalho). Depois de encontrado o bloco, pode-se arrast-lo para a janela de trabalho ou ento utilizar o 'Ctrl+C / Ctrl+V'. Voltando ao nosso objetivo, a criao do modelo, devemos escolher os blocos a serem utilizados. Existem vrias maneiras de implementar um mesmo modelo, de forma que o roteiro aqui sugerido no nico. Queremos construir uma funo polinomial, sua primeira derivada e sua integral, simulando-as e imprimindo seu resultado. Um modo simples para isto utilizando o bloco MATLAB Fcn para a equao polinomial, os blocos Derivative e Integrative para calcular a derivada e a integral e o bloco Slope para plotar os grficos. Para controlar o incremento na funo pode-se usar o bloco Ramp. Todos os blocos podem ser encontrados com a ferramenta de procura, e ento devem ser arrastados para a janela de trabalho. Uma vez que quer-se plotar 3 grficos, pode-se copiar mais duas vezes o bloco Slope na janela de trabalho (usando 'Ctrl+C / Ctrl+V') ou ento alterando as propriedades do bloco. Para tanto clique duas vezes no bloco e ento selecione na barra de ferramentas. Uma janela, intitulada 'Scope' properties aparecer, e ento o nmero de eixos pode ser modificado em Number of axes. O bloco MATLAB Fcn deve ser editado colocando-se no campo MATLAB function a funo que se deseja utilizar. No caso quer-se calcular o quadrado do valor de entrada (u), ento pode-se colocar no campo a expresso u^2. Para conectar dois blocos, deve-se arrastar a sada do primeiro at a entrada do segundo. As entradas e sadas tm a forma de setas (>). Pode-se ainda utilizar uma mesma linha (que carrega consigo um vetor ou um escalar) como entrada para outros blocos, para tanto deve-se, pressionando Ctrl, clicar na linha e ento arrastar at o ponto desejado. Pode-se nomear linhas ou ento inserir comentrios na janela de trabalho, bastando para tanto um duplo clique sobre a linha ou em qualquer espao no ocupado. Com isso, acreditamos que o leitor ser capaz de montar o modelo desejado, como mostrado a seguir.
Para iniciar um novo modelo, deve-se clicar no cone do library browser. Ento deve surgir um documento em branco do SIMULINK, intitulado Untitled. Agora o usurio deve buscar no library browser os blocos que deseja utilizar em seu modelo. Os blocos so agrupados de acordo com o toolbox ao qual esto vinculados (Simulink, Comunications Blockset, ...) e ento divididos por tipos.
possvel procurar-se por um bloco informando o nome deste ao lado do cone de procura (binculo) e clicando nele. Outra forma expandir os grupos com um duplo clique no item desejado (Sources ou Simulink, por exemplo) at encontrar o bloco que se 14
Pode-se agora testar o modelo rodando a simulao e alterando parmetros como o polinmio, as funes de trabalho, o intervalo de simulao. Para salvar o modelo, clicar em Salvar como e escolher o diretrio. Os arquivos SIMULINK tm a extenso .mdl.
onde <model name> o nome do modelo do SIMULINK. Para alterar a malha, digitar:
set_param('<model name>','gridspacing',<number of pixels>)
- Criando subsistemas A criao de subsistemas objetiva despoluir modelos que possuem um grande nmero de blocos. Em um subgrupo, como visto no exemplo da termodinmica de uma casa, pode possuir vrias entradas e sadas, de acordo com as entradas e sadas do subsistema. Pode-se adicionar um subsistema colocando-se o bloco Sub System na janela de trabalho ou selecionando-se um conjunto de blocos e, ento, agrupando-os usando o comando Create Subsystem no menu Edit ou usando o atalho Ctrl+G.
- Duplicando blocos em um modelo: Para duplicar um bloco, selecione o bloco com o mouse e, pressionando Ctrl, leve a cpia do bloco at o local desejado. - Mudando a orientao de blocos: Para rodar um bloco no SIMULINK pode-se usar os comandos do menu Format: Rotate block (roda 90 ) ou Flip block (roda 180 ). As teclas de atalho Ctrl+R e Ctrl+F tambm podem ser usadas. Para blocos com mais de uma entrada ou sada, a ordem destas segue o exemplo da figura a seguir.
2. Mscaras
O uso de mscaras permite a criao de caixas de dilogo e cones especficos para subsistemas. Algumas vantagens do uso de mscara so listados a seguir.
Simplificao na utilizao do modelo pela simplificao na entrada de parmetro, uma vez que em um subsistema mascarado o usurio pode inserir todos os parmetros de um conjunto de blocos em uma nica caixa de dilogo. Permite a construo de uma interface prpria para com o usurio, definindo-se a descrio, texto de ajuda e cone do bloco. Previne a modificao acidental de subsistemas, uma vez que estes ficam protegidos atrs de uma interface.
- Propagao de um sinal e nomes de correntes Um sinal pode ser levado de um ponto a outro da janela de trabalho usando os blocos Goto e From. O nome de uma corrente tambm pode ser levada, evitando confuses, para tanto deve-se digitar o sinal 15
Posteriormente deve-se criar um subsistema para este modelo, selecionando todos os blocos e clicando em Create Subsystem no menu Edit (ou utilizando o atalho Ctrl+G). O modelo ser substitudo por um nico bloco. A
figura abaixo mostra o bloco gerado e o modelo, que pode ser visualizado com um duplo clique no primeiro.
Os blocos In1 e Out1 representam a entrada e a sada do modelo, que coincidem com a entrada e a sada do bloco Subsystem. Agora possvel mascarar o subsistema, para isso clique em Mask Subsystem no menu Edit (Ctrl+M). Abrir ento a janela de edio de mscaras, que permite a criao do cone e da caixa de dilogo para o subsistema, podendo ser aberta usando novamente o atalho Ctrl+M com o sistema selecionado. A primeira pasta do editor contm as opes de edio do cone. No campo Mask type pode-se entrar uma expresso referente ao subsistema, como o nome. No campo Drawing commands define-se a aparncia do bloco. Pode-se utilizar comandos grficos (line, plot, ...) ou ento texto (disp, text). Ainda se encontra nesta pasta opes de aparncia do bloco, que podem ser configuradas de acordo com a aplicao. A seguir mostrada uma sugesto de configurao para o subsistema estudado.
A ltima pasta contm informaes sobre o documento. No campo Block description deve ser inserido um texto comentrio que explica ao usurio o que o bloco faz e no campo Block help pode ser inserido um texto de ajuda, com informaes mais detalhadas, uma vez que estas s sero exibidas a pedido do usurio. A figura abaixo mostra o resultado obtido seguindo as instrues acima:
3. S-functions
As chamadas S-functions (System Functions) so descries de sistemas dinmicos, escritas em uma linguagem de programao prpria (ou em C e compiladas como MEX-files), que interage com os solvers do SIMULINK. Seu uso mais comum est vinculado ao seguintes pontos:
A segunda pasta contm os parmetros de inicializao da mscara, onde a caixa de dilogo definida. Para inserir um campo da caixa de dilogo, clicar em Add, ento um novo campo ser adicionado lista. Este campo deve ser definido, escolhendo-se o tipo (editvel, caixa de checagem ou lista de opes) em Control type, o nome e o smbolo da varivel associada ao campo (Prompt e Variable) e a ao a ser tomada para o valor do campo (Evaluate calcula a varivel e Literal a mantm como string). Para o exemplo y = m.x + b uma sugesto de janela, demonstrando o uso do menu popup mostrado a seguir.
Criao de novos blocos para o SIMULINK Incorporao de cdigos em C a uma simulao Descrio de um sistema como uma seqncia de equaes matemticas ao invs de utilizar a lgebra de blocos Utilizao de animaes grficas (ver penddemo). Todos blocos do SIMULINK trabalham com entradas (u), sadas (y) e elementos internos, ou estados (x). O esquema a seguir demonstra cada elemento do bloco:
= t
x = g( t, x, u )
ou seja, os estados nada mais so do que as variveis do modelo que so derivadas no tempo. Nos arquivos de S-functions os vetores de estado so divididos em duas partes, uma primeira que contm apenas estados contnuos e uma segunda que contm estados discretos. O SIMULINK faz vrias chamadas de cada bloco do modelo durante fases especficas de simulao, executando tarefas como clculo das sadas, atualizao de estados, ou determinao de derivadas. Chamadas adicionais so feitas no princpio e trmino de uma simulao para executar a inicializao e a terminao. A figura a seguir ilustra como o SIMULINK executa uma simulao. Primeiro, o realizada a inicializao de cada bloco, inclusive das Sfunctions. Ento o SIMULINK entra no loop de simulao, onde cada passagem pelo loop chamado um passo de simulao. Durante cada passo da simulao, o SIMULINK executa seu bloco S-function. Isto continua at o simulao esteja completa.
Determina condies iniciais Calcula tamanho do prximo passo (apenas para blocos com passo varivel) Passo de simulao Calcula sadas Atualiza estados discretos Recalcula sadas Calculata derivadas Terminao, executa qualquertarefa exigida Integrao
sys = ['n de estados contnuos, n de estados discretos', 'n de sadas', 'n de entradas', 'flag para utilizao da entrada para determinao do prximo passo', 'nmero de tempos de amostragem'] Normalmente, para sistemas contnuos, se utilizam apenas as posies 1, 3 e 4 da matriz. As demais posies so substitudas por zero. Quando flag vale um devem ser informadas as equaes diferenciais do modelo e quando flag vale 4 devem ser informadas as equaes de sada da S-function. Para melhor compreender o funcionamento das S-functions vamos utilizar dois exemplos simples.
x = x
y = x = x
=u t dt = u dt
% Condies iniciais % Definio do % tamanho dos vetores % dx/dt = u % y = x % No utilizar % demais flags
O SIMULINK informa s S-functions o estgio atual da simulao, ou seja, qual parte da rotina deve ser executada, atravs das flags. Deste modo cada parte da rotina deve ser iniciada com um controlador de fluxo (if, case) A tabela a seguir mostra cada estgio da
simulao, a respectiva rotina na S-function e o valor da flag. Estgio da simulao Inicializao Rotina da S-Function Flag mdlInitializeSizes flag = 0 flag = 4 flag = 3 flag = 2 flag = 1 flag = 9
Para testar a rotina implementada, montar o seguinte modelo no SIMULINK. No campo S-function name, do bloco S-function, entre o nome do arquivo .m (sfint). O resultado obtido tambm mostrado abaixo:
Clculo do prximo passo mdlGetTimeOfNext (opcional) VarHit Clculo das sadas Atualizao dos estados discretos Clculo das derivadas Trmino da simulao mdlOutputs mdlUpdate mdlDerivatives mdlTerminate
Deste modo, quando a flag vale zero vai ser realizada a inicializao das variveis. Neste ponto, a S-function deve retornar o tamanho dos vetores de entrada, sada e estados. Para isso deve conter a expresso 17
if ~exist('par') par = [1 1 .2 100]; % Valores default end K = par(1); ro = par(2); A = par(3); h0 = par(4); %kg m^-0,5 s^-1 %kg/m^3 %m^2 %m
switch flag case 0 x0 = h0; % Condies iniciais sys = [1 0 2 1 0 0]'; % Tamanho dos vetores case 1 sys = (u-K*sqrt(x))/(ro*A); % EDO do sist. case 3 sys(1) = x; % h (nvel do tanque) sys(2) = K*sqrt(x); % Fo (vazo de sada) case {1, 2, 4, 9} sys = []; % No utilizar flags end
A implementao sugerida utiliza os parmetros (constantes) informados no prprio bloco da S-function ou ento os valores padro. Diferena entre este exemplo e o anterior a utilizao do controlador de fluxo switch/case para a atualizao das flags.
Para testar a S-function criada, sugerimos a construo de um modelo do SIMULINK como o mostrado na figura a seguir, que possibilita a verificao do comportamento dinmico do sistema frente a perturbaes na alimentao.
V h
Ab
FO
Considerando que o lquido possui massa especfica constante, que o tanque isotrmico e de mistura perfeita, o balano mssico do tanque pode ser descrito por FO FI = dV dt
Com o modelo construdo pode-se simular o comportamento de um ou mais tanques com diferentes dimenses, condies iniciais e disposio (em srie ou em paralelo). Pode-se ainda criar uma mscara para o bloco, construindo um cone prprio e uma caixa de dilogo para a entrada dos parmetros.
Modelando a hidrulica do sistema por F O = K h e sabendo que V = A b h , e equao diferencial do sistema pode ser reescrita como dh FI K h = dt A b h (t 0 ) = h 0 Agora podemos implementar este modelo como S-function. Um modo de implementao apresentado a seguir:
function [sys, x0] = sftank(t,x,u,flag,par)
4. Tabelas de auxlio
Nesta seo so mostrados os nomes e funes de alguns blocos do SIMULINK. Table 1: Sources Library Blocks
Band Limited W hite Noise Chirp Signal Clock Constant Introduce white noise into a continuous system. Generate a sine wave with increasing frequency. Display and provide the simulation time. Generate a constant value.
h ( t , FI )
18
Digital Clock Digital Pulse Generator From File FromWorkspa ce Pulse Generator Ramp Random Number Repeating Sequence Signal Generator Sine Wave Step Uniform Random Number
Generate simulation time at the specified sampling interval. Generate pulses at regular intervals. Read data from a file. Read datafrom amatrixdefined in the workspace. Generate pulses at regular intervals. Generate a constantly increasing or decreasing signal. Generate normally distributed random numbers. Generate a repeatable arbitrary signal. Generate various waveforms. Generate a sine wave. Generate a step function. Generate uniformly distributed random numbers.
Abs Algebraic Constraint Combinatorial Logic Complex to MagnitudeAngle Complex to Real-Imag Derivative Dot Product Gain Logical Operator MagnitudeAngle to Complex Math Function Matrix Gain MinMax Product Real-Imag to Complex Relational Operator Rounding Function Sign Slider Gain Sum Trigonometric Function
Output the absolute value of the input. Constrain the input signal to zero. Implement a truth table. Output the phase and magnitude of a complex input signal. Output the real and imaginary parts of a complex input signal. Output the time derivative of the input. Generate the dot product. Multiply block input. Perform the specified logical operation on the input. Output a complex signal from magnitude and phase inputs. Perform a mathematical function. Multiply the input by a matrix. Output the minimum or maximum input value. Generate the product or quotient of block inputs. Output a complex signal from real and imaginary inputs. Perform the specified relational operation on the input. Perform a rounding function. Indicate the sign of the input. Vary a scalar gain using a slider. Generate the sum of inputs. Perform a trigonometric function.
Table 2: Sinks Library Blocks Display Show the value of the input. Scope Display signals generated during a simulation. Stop Stop the simulation when the input is Simulation nonzero. To File Write data to a file. To Workspace Write data to a matrix in the workspace. XY Graph Display an XY plot of signals using a MATLAB figure window. Table 3: Discrete Library Blocks Discrete Filter Implement IIR and FIR filters. Discrete Implement a discrete state-space State-Space system. Discrete-Time Perform discrete-time integration of Integrator asignal. Discrete Implement a discrete transfer function. Transfer Fcn Discrete Zero- Implement a discrete transfer Pole functionspecified in terms of poles and zeros. First-Order Implement a first-order sample-andHold hold. Unit Delay Delay a signal one sample period. Zero-Order Implement zero-order hold of one Hold sampleperiod. Table 4: Continuous Library Blocks Derivative Output the time derivative of the input. Integrator Integrate a signal. Memory Output the block input from the previous time step. State-Space Implement a linear state-space system. Transfer Fcn Implement a linear transfer function. Transport Delay the input by a given amount of Delay time. Variable Delay the input by a variable amount Transport of time. Delay Zero-Pole Implement a transfer function specified in terms of poles and zeros. Table 5: Math Library Blocks
Table 6: Functions & Tables Library Blocks Fcn Apply a specified expression to the input. Look-Up Perform piecewise linear mapping of Table the input. Look-Up Perform piecewise linear mapping of Table (2-D) two inputs. MATLAB Apply a MATLAB function or Fcn expression to the input. S-Function Access an S-function. Table 7: Nonlinear Library Blocks Backlash Model the behavior of a system with play. Coulomb & Model discontinuity at zero, with linear Viscous gain elsewhere. Friction Dead Zone Provide a region of zero output. Manual Switch between two inputs. Switch Multiport Choose between block inputs. Switch Quantizer Discretize input at a specified interval. Rate Limiter Limit the rate of change of a signal. Relay Switch output between two constants. Saturation Limit the range of a signal. Switch Switch between two inputs. Table 8: Signals & Systems Library Blocks Bus Selector Output selected input signals. Configurable Represent any block selected from a
19
Subsystem Data Store Memory Data Store Read Data Store Write Data Type Conversion Demux Enable From Goto Goto Tag Visibility Ground Hit Crossing IC Inport Merge Model Info Mux Outport Probe Subsystem Terminator Trigger Width
specified library. Define a shared data store. Read data from a shared data store. Write data to ashareddatastore. Convert a signal to another data type. Separate a vector signal into output signals. Add an enabling port to a subsystem. Accept input from a Goto block. Pass block input to From blocks. Define the scope of a Goto block tag. Ground an unconnected input port. Detect crossing point. Set the initial value of a signal. Create an input port for a subsystem or an external input. Combine several input lines into a scalar line. Display revision control information in a model. Combine several input lines into a vector line. Create an output port for a subsystem or na external output. Output an input signals width, sample time, and/or signal type. Represent a system within another system. Terminate an unconnected output port. Add a trigger port to a subsystem. Output the width of the input vector.
20
Symbolic Math
Este toolbox permite trabalhar com funes na forma simblica, retornando uma soluo analtica para os problemas. De um modo geral, existem duas formas de se trabalhar com expresses simblicas; a primeira utilizando strings enquanto que a outra utilizando objetos simblicos. Os objetos simblicos so uma classe definida pelo MATLAB que permite sua manipulao atravs de funes especficas do symbolic toolbox. A seguir so apresentadas algumas das funes mais utilizadas neste toolbox. Para mais detalhes sobre estas funes ou para procurar outras funes existentes, pode-se utilizar o help on line do MATLAB procurando por symbolic. diff Esta funo calcula a derivada simblica de uma funo que est na forma de string.
diff('sin(a)','a') ans = cos(a)
solve Resolve simbolicamente equaes algbricas. As equaes e as variveis desconhecidas devero ser expresses simblicas ou strings. solve('p * sin(x) = r','x') ans = asin(r/p)
[x,y] = solve('x^2 + x * y + y = 3','x^2 - 4*x + 3 = 0') x= [ 1] [ 3] y= [ 1] [ -3/2]
dsolve Calcula a soluo simblica de equaes diferenciais ordinrias. As equaes devem estar na forma de strings e a varivel a ser diferenciada em relao a varivel independente antecedida pela letra D. No caso da ordem ser maior que um, utiliza-se a notao: D2, D3, etc. Por definio, a varivel independente t, mas pode ser alterada na chamada da funo colocando a nova varivel na ltima posio da chamada da funo. As condies iniciais so especificados por equaes do tipo: y(a)=b ou Dy(a)=b , onde y uma das variveis dependentes enquanto a e b so constantes. Se o nmero de condies iniciais for menor que o de variveis dependentes, sero colocadas constantes arbitrrias (C1, C2,...) na soluo final.
dsolve('Dx = - a * x') ans = C1*exp(- a * t) x = dsolve('Dx = - a * x', 'x(0) = 1','s') x= exp(- a * s) y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0') y= [ sin(t)] [ - sin(t)]
o
No caso do argumento desta funo ser um vetor, ela retornar a diferena entre os elementos i+1 e i. E no caso de matrizes, pode-se definir a ordem (o) da diferena em se ela ser aplicada sobre as linhas (1) ou colunas(2). A sintaxe neste caso a seguinte:
diff (X, o, 1 ou 2);
int Calcula a integral de uma funo. Esta funo pode fazer diferentes tipos de clculos de acordo com os argumentos de entrada: int(S) calcula a integral definida de S em relao varivel definida pela funo findsym. S uma string ou uma varivel sym. int (S,v) calcula a integral indefinida de S e, relao a string v. int (S,a,b) calcula a integral definida de S em relao a sua varivel simblica para o intervalo [a b]. int (S,v,a,b) calcula a integral definida de S em relao v para o intervalo [a b]. 21
A lista de todas as opes disponveis pode ser encontrada no help on line procurando por optimset. fzero Este comando calcula os zeros de uma funo escalar. Tem como argumentos bsicos a funo que se deseja determinar os zeros e um vetor com os intervalos da regio onde ser feita a busca (sign(f(x1)) sign(f(x2))). Geralmente a funo um M-file criado especificamente para este problema, que deve pegar valores reais como argumento e retornar valores reais. Outra opo utilizando o comando inline, que cria uma funo objeto para ser utilizada pelo comando fzero.
f=inline('x^2-6*x+5'); fzero(f,[0 2]) Zero found in the interval: [0, 2]. ans = 1 fzero(f,7) Zero found in the interval: [4.76, 8.5839]. ans = 5
laplace Calcula a transformada de Laplace de uma funo em relao a varivel t (padro). Se a funo for dada em termos de s, ento laplace retorna a sua inversa em t. As variveis utilizadas nesta funo devem ser objetos simblicos, portanto sempre devem ser declaras antes atravs do comando syms.
syms a s t w x laplace(t^5) ans = 120/s^6 laplace(exp(a * s)) ans = 1/(t - a) laplace(sin(w * x),t) ans = w/(t^2+w^2) laplace(diff(sym('F(t)'))) ans = s * laplace(F(t), t, s)-F(0)
fsolve Resolve equaes no lineares do tipo: F(X) = 0, utilizando o mtodo dos mnimos quadrados, onde F e X podem ser vetores ou matrizes. A funo F deve ser implementada na forma de um M-file. A sintaxe deste comando a seguinte: X = fsolve(funo.m, X0, opes, P1, P2, ...); onde X0 a matriz com os valores para inicializar o problema, opes o conjunto de opes definidas com o optimset e P1, P2,... so os parmetros que so passados para a funo. fminbnd Resolve o problema de minimizao de uma funo escalar no linear com restrio. A sua sintaxe geral a seguinte:: X = fminbnd(FUN, x1, x2, opes, P1, P2, ..) onde X o valor do mnimo local pertencente ao intervalo (x1 , x2) da funo FUN que em geral um M-file. A outra forma de resolver utilizando o comando inline.
f =inline('(x-2)^3+5*(x-2)^2+13'); x = fminbnd(f,0,6) Optimization terminated successfully: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004 x= 2.0000
Optimization Toolbox
Neste toolbox encontram-se funes para clculos de otimizao, ou seja, problemas minimizao com ou sem restries, minimizao de funes multiobjetivos, mtodo dos mnimos quadrados linear e no linear, clculo de zeros, etc. Todos estes algoritmos possuem opes especficas inerentes aos mtodos utilizados, a tolerncia permitida, dentre outras. Para definir quais sero estas opes, o MATLAB utiliza uma estrutura que guarda todas as informaes necessrias que sero utilizadas por uma funo especfica. Esta estrutura pode ser definida utilizando o comando optimset, que apresentado em seguida. Maiores detalhes sobre algumas das funes apresentadas ou para procurar outras funes, pode-se utilizar o help on line do MATLAB procurando por optim. optimset Cria uma estrutura com as opes que sero utilizadas pelas funes do Optimization Toolbox. A sua sintaxe a seguinte: options = optimset(par1,valor1,par2,valor2,...) Outra forma de definir os parmetros utilizar os parmetros padres utilizados pela funo que se deseja utilizar. Para isso, deve-se entrar uma string com o nome da funo como argumento para optimset.
optimset ( fzero );
lsqnonlin Resolve problemas no lineares de mnimos quadrados com a seguinte forma: min{sum[FUN(X).^2]} onde X e os valores retornados pela funo FUN podem ser vetores ou matrizes. A sintaxe geral a seguinte: X = lsqnonlin(FUN, X0,LB,UB, opes, P1, P2, ..)
Para fazer uma cpia das opes antigas e alterando apenas algumas, deve-se proceder da seguinte maneira:
new_opts = optimset(old_optos, par1,valor1);
22
onde X0 a matriz de inicializao, enquanto que LB e UB so os limites inferiores e superiores, respectivamente, das variveis desejadas. A funo FUN que em geral um M-file, deve retornar um vetor com as funes objetivos. A outra forma de resolver utilizando o comando inline.
x = lsqnonlin(inline('sin(x . * x)'),0.3,-0.5, 0.5) Optimization terminated successfully: Relative function value changing by less than OPTIONS.TolFun x= 0.0139
y sada y(t)
A seguir sero apresentadas algumas funes do control toolbox que permitem uma anlise rpida e clara das caractersticas principais de um sistema qualquer. A seqncia na qual elas so apresentadas, segue aproximadamente a ordem de uma anlise real. Para maiores detalhes sobre algumas das funes apresentadas ou para procurar outras funes, pode-se utilizar o help on line do MATLAB procurando por control. tf Gera um objeto do modelo LTI que possui como uma das suas informaes a funo de transferncia, tendo como argumentos os coeficientes do numerador e o denominador. Um objeto LTI uma das formas de representao para modelos lineares invariantes no tempo, que pode ser manipulado pelas diversas ferramentas disponveis no control toolbox. A sintaxe geral a seguinte: G = tf(NUM,DEN); No caso de haver uma entrada e uma nica sada (SISO), NUM e DEN so vetores com os coeficientes do polinmio do numerador e do denominador, respectivamente. Para o caso de mais de uma entrada e mais de uma sada (MIMO), NUM e DEN devem ser colocados em uma lista (cell array) em posies especficas determinadas pelas entradas e sadas que a funo relaciona.
num=[1 1];den=[1 1 1]; G = tf(num, den) Transfer function: s+1 --------------s^2 + s + 1
step Esta funo aplica um sinal degrau na entrada do sistema, que representado por uma funo de transferncia, por exemplo, e ento avalia a sada apresentando o resultado graficamente. Para sistemas MIMO, esta funo mantm aplica a funo degrau em uma das entradas mantendo constante as demais, avaliando seu efeito nas sadas. Existem inmeras opes que esta funo permite utilizar, portanto conveniente dar uma olhada no help on line do MATLAB, procurando por step. Se fizermos:
step(G);
K ( o S + 1) 2 1 2 S + 1 + (1 + 2 )S + 1
ou
step(num,den);
Os polinmios so colocados desta forma pois pode-se identificar mais facilmente as constantes de tempo bem como as razes do denominador e do numerador (plos e zeros, respectivamente). Em malha aberta, ou seja, sem estar controlando o sistema, a representao em diagrama de blocos a seguinte: 23
Step Response
From: U(1) 1.4
pade Faz a aproximao de Pad, muito utilizada para representar o tempo morto. Tem como argumento o valor do tempo morto e a ordem da aproximao, retornando uma funo do tipo NUM/DEN. Quando executado sem os argumentos de retorno da esquerda, este comando compara a aproximao feita com a resposta exata do tempo morto de um sinal degrau e da defasagem. Para um tempo morto igual a 4, fazendo a aproximao de Pad de ordem 8, o resultado o seguinte:
q
1.2
Amplitude
To: Y(1)
0.8
0.6
0.4
0.2
0 0 2 4 6 8 10 12
Time (sec.)
zpkdata Este comando pega de um objeto LTI e retorna os valores dos zeros, plos e ganho do sistema, que so informaes teis na anlise de estabilidade do modelo e posterior construo do controlador.
[z,p,k] = zpkdata(G) z= [-1] p= [2x1 double] k= 1
p
pade(4,8);
Step response of 8th-order Pade approximation 1.5 1 Amplitude 0.5 0 -0.5
10 Frequency (rad/s)
10
bode Apresenta o diagrama de Bode. Tem como argumento o objeto criado do modelo LTI. Neste grfico possvel se obter muitas informaes sobre o sistema referentes a sua estabilidade.
r
pole Retorna os valores dos plos do sistema. Toma como argumento um objeto LTI. Este comando eqivale a calcular os autovalores da matriz A na representao no espao de estado utilizando o comando eig.
p
bode(G)
Bode Diagrams
From: U(1) 5 0 -5
-10 -15 -20 0 -20 To: Y(1) -40 -60 -80 -100 10-1 100 101
zero Retorna o valor do zero de um modelo LTI. Ainda pode retornar o valor do ganho se no vetor de sada tiver mais de duas variveis.
[Z,K] = zero(G) Z= -1 K= 1
Frequency (rad/sec)
nyquist Faz o grfico de Nyquist tomando como argumento o objeto criado do modelo LTI. A anlise deste grfico permite fazer inferncias sobre a estabilidade do modelo em malha fechada a partir da observao da sua resposta em malha aberta.
q
nyquist(G);
Nyquist Diagrams
From: U(1) 1.5
pzmap Apresenta graficamente a localizao dos zeros e dos plos, permitindo uma anlise visual sobre a estabilidade de um sistema, por exemplo. Este comando usa como argumento um objeto do modelo LTI.
q
0.5
Imaginary Axis
To: Y(1)
-0.5
-1
-1.5 -1
-0.5
0.5
1.5
Real Axis
pzmap(G);
margin Este comando retorna a margem de ganho e a margem de fase de um sistema tendo como entrada o objeto gerado para o modelo LTI. Quando executados sem os argumentos de retorno dos valores esquerda, ele apresenta graficamente como estes valores so obtidos atravs do diagrama de Bode.
0.2 0.4 0.6 0.8 1
Imag Axis
-0.8
-0.6
-0.4
-0.2
Real Axis
24
forma amigvel, ou seja, utilizando uma interface grfica, o Graphical User Interface (GUI), para criar outras.
Conceitos Bsicos
O Handle Graphics uma estrutura orientada para objeto que permite a criao e manipulao de grficos e imagens. Os Object Handles podem ser considerados como indicadores nicos atribudos pelo MATLAB para cada objeto, permitindo desta maneira referenciar estes objetos para manipul-los. Existem 3 formas de se obter um handle:
101
100
Frequency (rad/sec)
a)
na criao do objeto
rlocus Retorna os valores e faz um grfico com o lugar das razes para um modelo SISO, tendo como argumento um objeto do modelo LTI. O grfico dos lugares das razes utilizado para analisar o sistema em malha fechada, apresentando tambm as trajetrias dos plos em malha fechada quando o ganho varia de zero a infinito.
s
Para o caso de se desejar obter o handle do objeto na sua criao (a), basta armazen-lo um uma varivel, pois os handles so retornados automaticamente pelas suas funes de criao.
s
p = plot([1:10],sin(2*[1:10]));
rlocus(G);
1 0.8 0.6 0.4 0.2 Imag Axis 0 -0.2 -0.4 -0.6 -0.8 -1 -3
Neste caso o handle do grfico da funo seno ficar armazenado na varivel p, portanto se desejar-mos fazer qualquer modificao no grfico utilizando seu handle, basta utilizar p. A segunda forma de se obter um handle via comandos utilitrios (b): b.1) gcf
-2.5 -2 -1.5 -1 Real Axis -0.5 0 0.5 1
retorna o handle da figura corrente retorna o handle dos eixos correntes retorna o handle do objeto corrente obtm handle para CallBack Figure obtm handle para CallBack Object
ltiview Abre o LTI viewer, o qual permite estudar as diversas anlises apresentadas anteriormente em uma nica janela. Ele utiliza como argumentos um modelo LTI criado previamente e o tipo de anlise que se deseja realizar.
ltiview('step',G);
Step Response
From: U(1) 1.4
A terceira forma atravs do comando findobj (c), que procura na figura o objeto atravs de propriedades especficas do objeto de interesse (como o TAG do objeto, por exemplo) e retorna o seu handle. Este comando ir procurar atravs de toda a hierarquia de objetos na figura at encontrar o objeto que possua as propriedades especificadas, porm, esta busca pode ser mais rpida se tambm for informado o objeto a partir do qual se deve iniciar a busca. A sua sintaxe a seguinte:
1.2
Amplitude
To: Y(1)
0.8
0.6
0.4
0.2
0 0 1 2 3 4 5 6 7
Time (sec.)
Este grfico foi obtido selecionand o estudo da resposta do sistema quando sugeito a uma entrada degrau, que pode ser selecionada clicando com o boto direito do mouse sobre a figura e escolhendo o tipo de grfico (plot type). Pode-se ainda obter caractersticas do sistema, como tmpo de subida, estado estacionrio, tempo de assentamento, etc. de forma interativa utilizando o mouse.
Neste exemplo, o handle da linha do grfico identificado pela sua cor azul e armazenado em h, e em seguida, atribuda a cor vermelha para a mesma. Como visto no exemplo, uma das formas de manipularmos objetos grficos atravs do comando set, enquanto que para pegarmos valores especficos de uma propriedade de um objeto, utiliza-se o comando get, em ambos os casos o handle funciona como endereo onde ser feita a ao. 25
2. GUIDE
Esta uma mais uma das ferramentas poderosas do MATLAB, que permite a construo de uma interface amigvel para o usurio e o que melhor, de uma
Uma maneira mais simples de trabalhar com os objetos grficos atravs do Graphical User Interface que executado atravs do comando guide.
f)
Ainda com o boto da figura selecionado, clique no boto Callback Editor do GCP e uma janela para edio de funes ser aberta. Na sua poro editvel, escreva o seguinte comando: set(gcbo,String,datestr(now,14)); Este comando far com que toda vez que o boto da figura for pressionado, a hora atual seja apresentada no prprio boto, pois a sua propriedade String est agora recebendo o valor da hora atual.
Para entender melhor o seu funcionamento so apresentados alguns exemplos prticos para implementao de uma interface amigvel.
g) Aps concludas estas operaes, salva-se a figura e no GCP torna a figura ativada da mesma maneira que ela foi tornada controlada anteriormente. h) Para execut-la no MATLAB, basta digitar o seu nome no workspace.
guide
Exemplo 2: Criar uma interface grfica na qual pode-se entrar uma funo e os limites da varivel independente para gerar seu grfico, permitindo a opo de apresentar ou no as linhas de grade. a) Abrir uma figura e acrescentar um, um eixo para apresentao de um grfico, duas caixa de texto, outras duas caixas editveis e um check box.
b) Este comando j cria abre uma figura automaticamente caso no haja nenhuma figura aberta. No caso de j haver, gere uma nova figura, para tanto, basta digitar figure no whorkspace que uma figura nova se abrir. c) Se a figura ainda no estiver marcada como controlada pelo GCP, ento selecione a figura desejada e pressione o boto Apply no GCP. Neste momento, a figura apresentada com algumas marcas diferentes, permitindo a sua edio direta com o mouse adicionando, apagando, redimensionando e editando objetos.
d) Pressione o boto push no GCP e o coloque na figura clicando e dimensionando com o mouse. b) Colocar os nomes de acordo com o esquema apresentado. Para tanto, basta selecionar o objeto, abrir o Property Editor e na propriedade String escrever os nomes correpondentes.
e)
D um duplo clic neste boto adicionado que se abrir automaticamente a janela do Property Editor, que permite que voc edite todas as propriedades de um objeto selecionado de uma dada figura. Procure pela propriedade String e a selecione. Depois de selecion-la, escreva o texto que desejas que aparea no boto quando da execuo do mesmo. Lembrando que o texto dever estar entre aspas simples.
c)
Abra o Callback Editor com o boto plot selecionado e digite as seguintes linhas de comando:
26
f=findobj(gcf,'style','edit','Tag','func'); xl=findobj(gcf,'style','edit','Tag','xlim'); xl =eval(get(xl,'String')); f = get(f,'String'); fplot(f,xl); d) A primeira linha de comando ir pegar o handle na caixa de texto editvel que possui o Tag func, enquanto que a segunda ir atribuir a xl o handle da caixa de texto editvel que possui o Tag xlim. Na linha seguinte, o valor que foi digitado nesta caixa, e que est armazenado na propriedade String pego pelo comando get e em seguida convertido em um valor e armazenado em xl. A Quarta linha pega o valor da propriedade String da caixa de textos da funo, que neste momento possui o identificador (handle) f, e armazena este valor na prpria varivel f. A ltima linha utiliza o comando fplot que faz um grfico de uma funo apenas tomando como argumento uma string da funo e um vetor com os limites da varivel independente. e) Selecione o check box e no Callback Editor digite as seguintes linhas: Hgrid=findobj(gcbf,'Tag','gridflag'); if get(Hgrid,'Value') grid on; else grid off; end f) A primeira linha armazena em Hgrid o handle do objeto que possui como Tag o nome gridflag. Na Segunda linha, avaliado se existe algum valor na propriedade deste objeto agora identificado por Hgrid, no caso afirmativo, grid on executado, caso contrrio executado o grid off.
CommandString = get(gcbo,'String'); EditHandle = findobj(gcbf,'Tag','EditText1'); ZString = get(EditHandle,'String'); eval(ZString); eval(CommandString); A primeira linha pega a o que est na propriedade String do objeto corrente, enquanto que a Segunda linha armazena o handle do objeto que possui o Tag EditText1. A terceira linha pega o que est no campo String do objeto identificado na linha anterior e armazena em ZString, que executado na linha seguinte e por fim, executa o comando que foi pego na primeira linha. c) Para colocar elementos um abaixo do outro no List box, deve-se entrar no workspace um cell array com as opes desejadas. Neste caso, pode-se fazer o seguinte:
u
Com esta lista armazenada no workspace, seleciona-se o List box na figura e no Property Editor e no campo String, digita-se cmaps sem as aspas simples. Desta maneira, o cell array com as opes armazenado em string para ser utilizado. d) Ainda com o List box selecionado, escreva no Callback Editor as seguintes linhas de comando: Value = get(gcbo,'Value'); String = get(gcbo,'String'); colormap(String{Value}); A primeira linha armazena em Value a posio referente s opes da lista, enquanto que na segunda linha armazenado em String o cell array que est no campo String do objeto corrente. Na terceira linha executado o comando colormap com a opo escolhida e) Salvar a figura e torn-la ativa.
g) Salvar esta figura com um nome e ativ-la da mesma forma que no exemplo anterior.
Exemplo 3: Criar uma interface grfica que permita o usurio entrar uma funo pr construda de trs variveis e esta seja apresentada de uma das diversas formas existente no MATLAB para grficos 3D, e ainda com a opo de alterar suas cores. a) Montar uma figura que tenha a seguinte estrutura bsica:
Lista de Exerccios
1. AULA 1 Comandos no Workspace
Arquivo: a1_ew 1. Criar uma matriz A 20x2 com os elementos da primeira coluna variando de 1 a 20, com um intervalo unitrio, e dados aleatrios para os elementos da segunda coluna. 2. Atribuir ao vetor X os valores da primeira coluna da matriz A at a linha 15. Fazer o mesmo para a Segunda coluna, armazenando os dados no vetor Y. 3. Fazer um grfico com os vetores (X,Y). Colocar um ttulo e nomear os eixos. 4. Sobre o mesmo grfico anterior, apresentar uma parbola (x2 - 15x + 60) com linha tracejada vermelha.
f (x 0 ) = 0
28
MATLAB Ferramenta matemtica para Engenharia xi a (2) xs b (3) O primeiro passo do algoritmo determinar o ponto mdio do intervalo de busca [xi,xs] : xi + xs xm = (4) 2 So formados ento dois intervalos [xi,xm] e [xm,xs]. No prximo passo deve-se comparar os sinais dos valores da funo nos extremos destes intervalos. Esta comparao permitir indicar em qual dos intervalos est a raiz desejada. Em funo do resultado desta comparao, o algoritmo pode seguir duas alternativas possveis: Alternativa 1: f(xi) e f(xm) possuem o mesmo sinal e f(xm) e f(xs) possuem sinais contrrios. Isto significa que a raiz est no intervalo [xm,xs]. O intervalo de busca ento estreitado da seguinte forma, xi xm (5) Alternativa 2: f(xi) e f(xm) possuem sinais contrrios e f(xm) e f(xs) possuem o mesmo sinal. Isto significa que a raiz est no intervalo [xi,xm]. O intervalo de busca ento estreitado da seguinte forma, xs xm (6) A motivao dos procedimentos associados s duas alternativas pode ser melhor compreendida atravs da visualizao do grfico da prxima figura: Observao: claro que se durante o algoritmo f(xm) = 0, o procedimento imediatamente interrompido pois a raiz o prprio valor de xm. Tarefas: a) Descrever o algoritmo do Mtodo da Bisseco passo a passo, montando o fluxograma. b) Criar uma rotina computacional para a aplicao do mtodo. c) Um trocador de calor um equipamento destinado a permitir a transferncia de calor entre dois fluidos. Em um determinado modelo de trocador de calor, gua deve ser aquecida utilizando-se para isto uma corrente de leo. A equao abaixo relaciona a carga trmica (taxa de transferncia de calor entre os fluidos) com as temperaturas de entrada e sada do leo e da gua no equipamento: ( Toleo 1 Tagua 1 ) ( Toleo 2 Tagua 2) =0 Q UA Toleo 1 Tagua 1 ln( ) Toleo 2 Tagua 2 onde, Q - Carga trmica do trocador, 160.103 W U - Coeficiente global de transferncia de calor, 320 W/m2K A - rea do trocador de calor, 16 m2 Toleo1 - Temperatura de entrada do leo no trocador, 110 C Toleo2 - Temperatura de sada do leo no trocador, 80 C Tagua1 - Temperatura de entrada da gua no trocador, 35 C Tagua2 - Temperatura de sada da gua no trocador c.1) Fazer o grfico do valor numrico da equao em relao a temperatura de sada da gua (Tagua2). O grfico deve conter o ttulo e as identificaes dos eixos. Verifique atravs do grfico, se o Mtodo da Bisseco pode ser aplicado para a resoluo da equao. c.2) Determinar a temperatura de sada da gua do equipamento (Tagua2), utilizando como regio de busca inicial o intervalo 35,1 C at 79,9 C e tolerncia de 0,1 C.
xi
xm
xs
Observando o grfico, torna-se bvio que a raiz est no intervalo [xm,xs]. Neste intervalo a funo corta o eixo y = 0, ou seja, neste intervalo a funo muda de sinal e conseqentemente f(xm) e f(xs) apresentam sinais contrrios. O procedimento deve ento seguir a alternativa 1, com a eliminao do intervalo [xi,xm], onde j se sabe, a raiz no est presente. Aps a eliminao do intervalo, segundo a alternativa 1 ou 2, o algoritmo deve recalcular o ponto mdio e repetir a seqncia de procedimentos. importante observar que medida que o processo avana, o intervalo de busca vai se fechando em torno da raiz. Quando este intervalo torna-se menor que a tolerncia desejada, o processo interrompido e a soluo o ponto mdio do ltimo intervalo. 29
(d) Na existncia da presa, o predador tem o suprimento de alimento que lhe permite sobreviver e reproduzir a uma taxa especfica proporcional a quantidade de presa, isto : 1 dN 2 = + N 1 N 2 dt Deste modo o modelo matemtico deste problema descrito pelas equaes diferenciais ordinrias: dN 1 dt = N 1 N 1 N 2 dN 1 = N 2 + N 1 N 2 dt Alm do conhecimento dos valores numricos dos parmetros do modelo (os valores de , , e ), para se resolver este sistema de equaes diferenciais ordinrias deve-se conhecer os valores de N1 e N2 em um determinado tempo (estas so as condies iniciais do problema). Tarefa: Construir no SIMULINK (S-function) para o modelo de Lotka-Volterra e rodar simulaes para vrias condies iniciais utilizando os parmetros: = 0,3/ano = 1/90 [1/(ano)/(nmero de espcies do predador];= 0,2106/ano = 0,00026325[1/(ano)/(nmero de espcies de presa];
Bibliografia recomendada
Manuais do MATLAB (podem ser encontrados na rede interna do DEQUI, no diretrio: p:\winapps\matlab2\hel\pdfdocs)
http://www.mathworks.com/ http://www.rpi.edu/~bequeb/Process_Dynamics/MATLA B/MATLAB_index.html http://www.owlnet.rice.edu/~ceng303/Matlab/MatCont.h tml http://www.indiana.edu/~statmath/smdoc/Matlab.html http://www.math.utah.edu/lab/ms/matlab/matlab.html http://www.math.ttu.edu/~gilliam/m5399-matlab.html http://www.geodyn.psu.edu/GEOSC203/tutorial.html http://www.math.ufl.edu/help/matlab-tutorial/ http://www.owlnet.rice.edu/~ceng301/toc.html
31