Você está na página 1de 42

MATLAB - UMA INTRODUÇÃO

CAPÍTULO 1 - Introdução

Motivação - Este curso tem por objetivo a familiarização com pacote matemático “MATLAB” e “SciLab”. Este último é agora apresentado por ser de domínio público, e portanto, não ter custo associado à aquisição. As operações básicas são mostradas, bem como os comandos de programas, gráficos e “toolboxes”. Alguns exemplos e exercícios são mostrados. Todavia, muito embora o SciLab disponha de pacote equivalente ao “Simulink”, o mesmo não é explorado aqui, sendo mostrado apenas para “Matlab”.

1. Instalação

Para a instalação do Matlab, basta seguir as instruções do CD de instalação, enquanto que o SciLab é obtido diretamente na internet. A instalação de ambos é bastante simples.

CAPÍTULO 2 - Operações Básicas

Os comandos a seguir são válidos para ambos os pacotes computacionais Matlab e SciLab. Quando alguma diferença ocorrer, a mesma será enfatizada.

Números complexos

A representação de um número complexo em MATLAB pode ser feita através de qualquer uma das formas abaixo:

a = 2 + i*6

ou

a = 2 + j*6

Em SciLab a representação é a mesma, muito embora a variável complexa tenha que ser definida:

i ou j = sqrt(-1)

As versões atuais do Matlab trabalham de forma ainda mais simplificada, permitindo escrever:

a = 2 +6i

1

ou

a = 2 + 6j

Se for de interesse trabalhar com a parte real do número “a”, usa-se o comando:

b = real (a)

Com resposta dada pelo programa

Da mesma forma, se a parte imaginária for de interesse, usa-se:

b = 2

c = imag (a)

Com resposta dada por c = 6 Para o número complexo dado acima ser representado na forma polar, usa-se o comando:

d = abs(a)

Com resposta dada por d = 6.3246, que é o mesmo que fase em Matlab será dado por:

e = angle (a)

é o mesmo que fase em Matlab será dado por: e = angle (a) 4 

4 36 . O ângulo de

Com resposta em radianos dada por e = 1.2490, que é o mesmo que atang (6/2). Esta função também existe em Matlab e SciLab.

Notas

1. Note que para cada nova variável de interesse, foi associada uma letra qualquer. Aqui vai a primeira diferença do pacote em relação a FORTRAN, por exemplo. Esta diferença reside no fato de não se precisar declarar variáveis nem obedecer nenhuma hierarquia para tornar uma variável real ou inteira.

2. Da nota acima, segue uma importante observação relativa à representação de números complexos: As variáveis “i” e “j” podem, portanto, assumir qualquer valor. Desta forma, se “i” for especificado como 2, por exemplo, ao se escrever

a = 2 + i*6

teremos como resposta a = 14. Logo, ao se representar números complexos, deve-se ter certeza de que “i” e “j” não estão previamente definidos.

3. Quando escrevemos a = 2 + i*6, obtemos na tela

a =

2.0 + 6.0000i

2

Logo, o programa repete a informação ou processamento executado. Se isto se tornar inconveniente (muita informação na tela durante o processamento), pode se escrever

a = 2 + i*6 ;

O símbolo “;” colocado ao fim da expressão informa ao programa que não é necessário reproduzir tal informação na tela.

Vetores

A representação clássica de vetores (ordem n x 1) é obtida da seguinte maneira:

A = [1

2

3];

» A = [1

2

3]

A =

1

2

3

Note que no caso acima não foi usado o símbolo “;”, e por este motivo o programa devolveu o vetor “A”. Matlab e SciLab permitem criar diretamente um vetor com elementos iguais a um ou zero da seguinte forma:

Com resposta:

Com resposta:

A = ones(3,1)

A =

1

1

1

» A = zeros(3,1)

3

A =

0

0

0

Estes vetores podem se mostrar extremamente úteis em determinadas situações. Operações com vetores serão mostradas adiante.

Matrizes

Matrizes podem ser representadas de duas formas, como mostrado a seguir:

A = [1 2 3; 4 5 6; 7 8 9]

Uma vez que o símbolo “;” não foi usado, o programa responde:

Ou da forma direta:

 

A

=

1

2

3

4

5

6

7

8

9

» A = [1 2 3

4

5 6

7

8 9]

A

=

 

1

2

3

4

5

6

7

8

9

Em ambos os casos, tem-se a mesma matriz.

Operações

Vetor

Assuma os vetores

A = [

B= [

4

3

7

4

5

5 ]

2]

Algumas operações serão mostradas:

Norma

Acha-se a norma de um vetor através do comando

Com resposta dada por

w

w

= norm (A)

=

7.0711

onde w representa a norma euclidiana do vetor A Outros tipos de norma podem ser identificados. De maior importância, destaca-se a norma infinita, dada por

norm(A, inf) = max (abs (A)). norm(A, -inf) = min( abs (A)).

Pode-se também achar a norma de um vetor que seja combinação de dois outros vetores, como por exemplo:

Com resposta

f = norm (A+B)

f = 15.1658

Note que neste caso, MATLAB computou internamente o vetor A+B e forneceu a resposta pedida.

Multiplicação

multiplicação de dois vetores, a menos que se

transponha um deles. Entretanto, MATLAB fornece uma opção de se multiplicar, ou elevar a alguma potência, cada membro de um vetor ou uma matriz, da seguinte forma:

Sabe-se que não é possível a

A multiplicação, elemento por elemento, é dada pelo símbolo “.*”. Desta forma, pode-se ter:

5

Com resposta

C = A .* B

C = [

21

20

10]

Que é igual ao produto de cada elemento do vetor A por cada elemento do vetor B. Da mesma forma, para elevar cada componente do vetor A a uma potência (lembre que não é possível elevar um vetor ao quadrado, por exemplo), usa-se o símbolo “.^”. Desta forma:

Com resposta

D = A .^2

D =[

9

16

25 ]

Uma vez mais, manipulações com vetores poderiam ser incluídas, como mostrado a seguir:

Com resposta

G = (A+B).^2

G = [

100

81

49]

Produtório e somatório dos termos

Obtidos através dos comandos

Com resposta

h = sum (A)

h = 12

6

e

Com resposta

2.3.2 Matrizes

Assuma as matrizes

k = prod (A)

k = 60

A

= [

1

3

5

6

3

8

8

9

2 ]

B

= [

4

9

8

2

3

5

7

0

1]

Diversas operações podem então ser mostradas.

Adição, Subtração e Multiplicação

Como as matrizes têm dimensões coerentes, podem ser somadas, subtraídas ou multiplicadas entre si.

Adição e subtração são comandos bem simples, como mostrado

Com resposta

C = A + B

 

C

= [

5

12

13

8

6

13

15

9

3 ]

» D = A-B

7

Com resposta

D = [

-3

-6

-3

4

0

3

1

9

1]

A multiplicação de matrizes é obtida através do comando “*”. Note que neste caso, tem-se uma operação diferente daquela obtida quando o símbolo “.*” é usado. Portanto:

E = A * B

fornece

 

E

= [

 

45

18

28

86

63

71

64

99

111]

enquanto

 

» F = A .*B

fornece

Norma

 

F= [

4

27

40

12

9

40

56

0

2 ]

Obtida da mesma forma daquela mostrada para vetores

Com resposta

g = norm (A)

g = 15.6614

8

OBS: Manipulações internas são novamente válidas.

Rank

Obtido através de

Com resposta

Autovalores e autovetores

h = rank (A)

h = 3

Em Matlab, dados pelo comando

Com resposta

[ u v] = eig (A)

u = [

-0.3767

-0.7767

-0.3571

-0.6368

0.6064

-0.4574

-0.6727

0.1703

0.8144]

v = [

15.0000

0

0

0

-2.4384

0

0

0

-6.5616]

Das matrizes acima, v representa a matriz de autovalores, enquanto u representa a matriz de autovetores. A mesma resposta acima é obtia em SciLab em resposta ao seguinte comando:

Valores singulares

[ u v] = spec (A)

Obtidos, desta vez pelo mesmo comando para os dois pacotes como:

9

 

l = svd (A)

Com resposta

 

l = [

15.6614

6.4924

2.3604]

Determinante

Obtido através do comando

 

m = det (A)

Com resposta

 

m = 240

Que é igual ao produtório da matriz diagonal v, obtida através do comando

n = prod (diag(v))

Número de condição de uma matriz

Obtido através do comando

o = cond (A)

Com resultado dado por

Inversa de matrizes

o = 6.6351

Assuma o produto p = A*B -1 . A solução, em MATLAB, pode ser obtida através

de

a) P = A*inv(B)

Com solução

-0.0213

P = [

1.0638

10

-0.1489

-0.3617 2.0851 0.4681 1.9787 -2.9362 0.8511 ]

Entretanto, para matrizes de grande porte, achar a inversa de b pode ser computacionalmente ineficiente. Uma alternativa, entre outras, pode ser utilizada.

P = A/B

Com solução idêntica a mostrada acima. Através desta operação, o resultado é obtido diretamente, sem necessidade de inversa. Tem-se, para a solução de um sistema do tipo Ax = b, tomando b como um vetor.

x

= A\b é solução de Ax = b

x

= inv(A)*b

que fornecem a mesma resposta

segunda acha a resposta através da inversa explícita da matriz A.

A primeira opção fatora a matriz A, enquanto que a

Fatoração de matrizes

Obtida através do comando

[l, u] = lu (A)

Obtendo como resultado as matrizes triangular inferior L e superior U

Mudando a dimensão de uma matriz

Assuma que se queira mudar a dimensão da matriz a de 3x3 para 1x9. Isto pode ser feito através do comando:

Obtendo:

Q = 1

Q = reshape(A,[1 9])

6

8

3

3

9

5

8

2

Este comando não existe em SciLab.

Transposta de uma matriz

Obtido através do símbolo “’”. Assim, para se achar a transposta de a, usa-se:

Y = A

11

Obtendo:

 

Y = [

1

6

8

3

3

9

5

8

2]

Manipulações com matrizes

Uma importante característica de MATLAB refere-se a facilidade com que se pode manusear matrizes. Alguns exemplos serão dados. Um elemento qualquer de uma

matriz a pode ser identificado como A(i, j), onde i e j são os componentes que identificam

Para se referir a todas as linhas ou colunas

de uma matriz usa-se o símbolo “:’. Desta forma, alguns exemplos podem ser mostrados,

tomando novamente as matrizes A e B . Se for de interesse formar um vetor com a segunda coluna matriz A, usa-se:

a linha e a coluna associadas ao componente

Obtendo:

r = A (: , 2)

r = [

3

3

9]

Da mesma forma, se fosse de interesse formar um vetor transposto a partir da segunda linha da matriz A:

Com o resultado

s = A (2, : )

 

s

= [

6

3

8]

É possível também criar um vetor com alguns elementos da matriz. Por exemplo, pode-se criar um vetor com alguns componentes de linha ou coluna, como por exemplo, criar um vetor com os dois primeiros componentes de segunda coluna de ª

Obtendo:

t = A (1:2 , 2)

12

t = [

3

3]

Estas propriedades são muito importantes, uma vez que possibilitam a manipulação de matrizes nas mais variadas formas. Pode-se também criar uma nova matriz a partir de uma já existente. Assuma que se queira criar uma matriz x a partir da matriz ª Entretanto, as linhas e colunas 2 e 3 da matriz x correspondem às linhas e colunas 3 e 2 da matriz a . Desta forma:

x = A;

Cria uma matriz x idêntica a a . Note o símbolo “;”, indicando que a matriz x não deve aparecer na tela.

x([2 3],:)=A([3 2],:)

x = [

1 3

5

8

9

2

6

3

8]

A operação acima trocou as segunda e terceira linhas, mas manteve as colunas idênticas às colunas da matriz A Para esta última operação, tem-se:

x(:,[2 3])=A(:,[3 2])

x = [

1 5

3

8

8

3

6

2

9]

Finalmente a matriz desejada é obtida. Poderia-se também acrescentar novos elementos à matriz A, através de operações ou simples inserção de componentes:

Exemplo de inserção simples:

A(4,2)=1

A = [

1

3

5

6

3

8

8

9

2

0

1

0]

13

A inserção do elemento criou uma nova linha com elementos nulos, exceto o componente 1 relativo à posição (4, 2).

Exemplo de inserção através de operação:

A (4,2) = A (1,1) + A (3,3)

A

= [

1

3

5

6

3

8

8

9

2

0

3

0]

Desta vez

um novo elemento, função de outros elementos da matriz, foi

acrescentado, alterando a dimensão da matriz.

Matrizes Esparsas

MATLAB trabalha com matrizes esparsas. Uma matriz pode ser armazenada na forma esparsa, na forma (i,j)=comp, onde i e j são as colunas do elemento comp, ou podem ser transformadas em esparsas a partir de uma matriz previamente fornecida na forma densa. Cada um dos casos é mostrado abaixo:

Montando uma matriz genérica:

Gerando:

A(1,1)=2;

» A(2,3)=4;

» A(3,2)=8;

A

=[

2

0

0

0

0

4

0

8

0]

que é uma matriz na forma densa. Portanto, para criar uma matriz esparsa, usa-se o comando:

e a matriz acima se tornaria

A = sparse (A)

14

A =

(1,1)

(3,2)

(2,3)

2

8

4

Onde apenas os elementos diferentes de zero aparecem. Portanto, para gerar a matriz acima na forma esparsa, usa-se os comandos:

A = sparse(A)

a =

All zero sparse: 0-by-0

» A(1,1)=2;

» A(2,3)=4;

» A(3,2)=8;

 

»

A

Obtendo:

 

A

=

(1,1)

2

(3,2)

8

(2,3)

4

Matrizes Aleatórias

Para gerar matrizes aleatórias, basta dar o comando

A = rand(3,3)

que MATLAB automaticamente cria uma matriz de valores aleatórios de dimensão 3x3. No caso deste exemplo, o programa devolveu:

 

A =[

0.6539

0.9103

0.0475

0.4160

0.7622

0.7361

0.7012 0.2625

0.3282]

15

Exercício

Criar duas matrizes aleatórias A(4,3) e B(3,4). Achar C=A*B. Achar rank, norma, autovalores e determinante de C. Achar sua transposta. Criar um vetor aleatório e(4,1) e resolver

C x = e

C T x

= e Resolver através da inversa, fatoração LU e sinais lógicos \ e /.

16

CAPÍTULO 3 - Gráficos em duas e três dimensões

Gráfico em Duas Dimensões

Assuma os dois vetores x e y relacionados entre si.

x = [1 2 3 4 5] T

y = [2 4 6 8 10] T

Quer-se representar a relação entre ambos através de um gráfico. comando:

plot(x,y)

Para isto usa-se o

No comando acima x e y são os vetores a serem plotados. O seguinte gráfico é obtido

os vetores a serem plotados. O seguinte gráfico é obtido Note entretanto que a figura está

Note entretanto que a figura está sem título, legenda no eixos x e y e anotações referentes à curva. Estes podem ser diretamente obtidos através da edição da figura, disponível em ambos os pacotes. Todavia, pode-se fazer as modificações no console, conforme mostrado a seguir:

title('gráfico exemplo para turma CESE') xlabel('eixo x') ylabel('eixo y')

17

Portanto, title é o comando que dá título à curva, enquanto xlabel e ylabel definem as legendas dos eixos x e y, respectivamente. Para inserir anotação dentro do gráfico, usa-se, somente em Matlab

gtext('grafico x-y')

E o novo gráfico é mostrado:

gtext('grafico x-y') E o novo gráfico é mostrado: Se ao invés da linha cheia obtida no

Se ao invés da linha cheia obtida no gráfico, fosse preferível outro tipo de linha, como asteriscos, por exemplo, usaria-se:

Obtendo:

plot (x, y, ‘*’)

18

Outros tipos e cores de linhas podem ser obtidos. Abaixo são mostrados os possíveis: Cores

Outros

tipos e cores de linhas podem ser obtidos. Abaixo são mostrados os

possíveis:

Cores

y

amarelo

r

vermelho

g

verde

b

azul

w

branco

m

lilás

c

azul claro

Linha

.

ponto

o

círculo

x

x

+

+

*

asterisco

:

dois pontos

-.

Ponto com traço tracejada

19

Note que o gráfico gerado em MATLAB foi importado por um editor de textos (word) diretamente. Para que isto ocorra é necessário que se exporteo gráfico obtido através do comando print. Algumas opções são mostradas abaixo:

dps

- PostScript for black and white printers

-dpsc

- PostScript for color printers

-

-deps

- Encapsulated PostScript (EPSF)

-depsc - Encapsulated Color PostScript (EPSF)

-dpcx16

- Older color PCX file format (EGA/VGA, 16-color)

-dpcx256

- Newer color PCX file format (256-color)

-dbitmap - Send figure to clipboard in bitmap format

Gráfico em 3 dimensões

Assuma que em adição aos vetores x e y, tenha-se o vetor z:

z=[3 5 7 8 2] T

Para obter um gráfico que relacione x, y e z, usa-se , em Matlab, o comando:

plot3 (x, y, z)

O equivalente em SciLab é dado por:

Obtendo:

Plot3d (x,y,z)

20

Note que das opções mostradas para o caso de duas dimensões, somente o comando gtext

Note que das opções mostradas para o caso de duas dimensões, somente o comando gtext não foi utilizado, uma vez que este só funciona para sistemas em duas dimensões.

21

CAPÍTULO 4 - Comandos de arquivos

Introdução

Todos os comandos mostrados nas seções anteriores foram desenvolvidos na tela dentro do ambiente MATLAB e SciLab. É possível, entretanto, chamar um arquivo previamente desenvolvido que contenha informações ou comandos para serem inseridos no ambiente MATLAB e Scilab. Tais arquivos podem ter qualquer nome, desde que tenham extensão “m”, para MATLAB e “sce” para SciLab. Assim, em MATLAB, para se carregar tal arquivo, basta digitar seu nome, não sendo necessário digitar a extensão “m”, automaticamente assumida pelo programa. Por exemplo, assuma que a matriz a mostrada anteriormente esteja armazenada em um programa chamado “caso1.m”. Assuma também que o símbolo “;” não seja colocado ao fim da matriz. Portanto, uma vez dentro do ambiente MATLAB, basta digitar caso1, e a matriz A aparecerá na tela. Em SciLab, o arquivo é executado através da bara de ferramentas, que tem a opção de executar o programa de extensão “sce”. Caso o símbolo “;” seja colocado ao fim da matriz, após digitar caso1, a matriz A não será mostrada, muito embora esteja armazenada. De forma a checar as variáveis armazenadas, usa-se o comando “who”. O exemplo abaixo ilustra o uso deste comando após a matriz a ter sido armazenada. Digita-se who Obtendo a resposta:

Your variables are:

A

Uma vez carregada a matriz, qualquer das funções mostradas previamente pode ser utilizada. Note também que uma vez que o arquivo de extensão “m” pode conter comandos do programa, o operador pode criar um arquivo “.m” que funcione como um programa . O exemplo abaixo ilustra o arquivo caso1.m contendo a matriz A e os comandos que pedem seu determinante, autovalores, norma e rank. Note que o símbolo “;” é colocado ao fim de cada comando.

A = [

1

4

7

8

2

5

3

6

9] ;

% os comandos estão abaixo det1=det(A) ; aut=eig(A) ; norm1=norm(A) ; rank1=rank(A) ;

22

O símbolo “%” utilizado no arquivo representa comentários, e não são considerados pelo programa. Em “SciLab” os comentários são dados pelo comando //. A exclusão deste símbolo antes da sentença “os comandos estão abaixo” produziria uma mensagem de erro. Digitando caso1 na tela, esta permanecerá limpa após a execução do programa, uma vez que o símbolo “;” foi utilizado.

» caso1

O comando “who” indica as variáveis processadas:

» who

Your variables are:

A

aut

det1

norm1

rank1

Portanto, todas as variáveis estão reconhecidas pelo programa. Para saber o valor destas variáveis, basta digitar a variável de interesse. Por exemplo, para saber a norma de

a, digita-se

» norm1

que é a variável associada a norma no programa caso1.m. A resposta do programa é dada por

norm1 =

16.8481

Qualquer outra variável pode ser obtida desta forma. Uma outra possibilidade refere-se ao armazenamento dos resultados obtidos. Para este fim o comando “diary” pode ser utilizado.

Armazenando resultados

Assuma que as operações executadas acima devam ser armazenadas em um outro arquivo. Para isso, abre-se um arquivo usando o comando “diary nome”, onde “nome” é um nome qualquer escolhido. Anota-se as variáveis de interesse, e quando o processo se encerrar, fecha-se o arquivo com o comando “diary off”. O exemplo abaixo é feito a partir do arquivo caso1.m.

caso1

» diary resul » aut

aut =

23

16.1168

O arquivo resul fornece

-1.1168

0.0000

» det1

det1 =

0

» norm1

norm1 =

16.8481

» rank1

rank1 =

2

» diary off

caso1

» diary resul » aut

aut =

16.1168

-1.1168

0.0000

» det1

det1 =

0

» norm1

norm1 =

16.8481

» rank1

rank1 =

2

» diary off

Idêntico, portanto, aos comandos dados na tela.

Comando clear

Foi mostrado que o comando “who” mostra as variáveis armazenadas pelo programa. Pode ser de interesse do operador, por uma razão qualquer, excluir uma variável durante o processamento. Para isso usa-se o comando “clear”, que pode ser utilizado para limpar quantas variáveis se queira. Voltando ao exemplo do arquivo caso1.m, tem-se as variáveis:

Your variables are:

a

aut

det1

norm1

rank1

Assuma que seja de interesse excluir a variável aut. Executa-se o comando

clear aut

Digitando o comando “who” novamente fornece

Your variables are:

a

det1

norm1

rank1

E a variável não está mais armazenada. Se todas as variáveis devem ser excluídas, usa-se o comando

clear

Digitando “who” mais uma vez, obtém-se:

Your variables are:

Indicando que nenhuma variável encontra-se armazenada. O conjunto de comandos mostrados até então, permite que se programe em MATLAB. Para isto, faz-se uso dos comandos mostrados na próxima seção.

Comando size

25

Devolve a dimensão do elemento especificado. Por exemplo, size(A) forneceria

Exercícios

ans =

3

3

1- Criar um arquivo de extensão “m”, que contenha uma matriz A de dimensão 4x4.

Achar B=A*A, C=B*A; D=C*A, E=D*A, F=E*A Achar o menor autovalor de cada matriz e plotar, para cada matriz o maior valor singular em função do maior autovalor (módulo). Salvar o gráfico em extensão “bmp” ou

“pcx” e importar em um documento do word.

2- Criar uma matriz aleatória de dimensão 5x5. Criar uma outra matriz, obtida a

partir da multiplicação de um escalar por uma das linhas da matriz original. Varie este

escalar a partir de 1 até 0. Para cada matriz obtida, anotar o menor autovalor e o determinante. Plotarestes valores em função da constante de multiplicação.

26

CAPÍTULO 5 - Comandos de Programa

Introdução

Um programa para ser executado em MATLAB precisa ser montado em um arquivo de extensão “m”. A exemplo de outras linguagens de programação, existem alguns comandos lógicos inerentes ao programa, além das funções definidas anteriormente. Por outro lado, o programa não requer declaração nem dimensionamento das variáveis. A seguir, algumas funções são mostradas.

For

Comando utilizado para gerar um loop. Semelhante ao DO utilizado em FORTRAN. O processo se repete até que o limite superior (ou inferior) seja atingido. Exemplo:

2

4

6

» for ti=1:10

j(ti)=2*ti;

end

» tj

8

tj =

10

12

14

16

18

20

No exemplo acima, tï” varia de 1 a 10 com passo 1. Para cada valor de ti, uma variável tj é criada. Passos diferentes de 1 também podem ser considerados, como mostrado abaixo:

k=1;

» for ti=1:2:11 tj(k)=ti;

k=k+1;

end

 

»

tj

1

3

5

7

9

11

No exemplo acima, ti varia de 1 a 11 com passo de 2. A variável tj é criada dentro do loop com índice k atualizado a cada atualização de ti. O exemplo acima serve para números negativos também. Por exemplo,

27

for t1=1:-0.1:0

varia ti de 1 a 0 com passo de -0.1.

If-Then-Else

Comando

lógico

condicional.

Se

uma

determinada

condição

for

satisfeita,

executa-se algo, caso contrário, executa-se outra instrução, ou nenhuma. Exemplo:

for ti=1:10 if ti <= 5 tj(ti)=ti; else tj(ti)=-ti; end

 

end

» tj

tj =

1

2

3

4

5

-6

-7

-8

-9

-10

No exemplo acima, ti varia de 1 a 10. É dada então a seguinte instrução: Se ti for menor ou igual a 5, a variável j assume valor igual a ti. Caso contrário (maior que 5) j assume o valor negativo de ti. A inserção do símbolo “<=” estimula o usuário a conhecer os comandos lógicos disponíveis. Uma lista é dada abaixo:

<=

Menor ou igual

>=

Maior ou igual

<

Menor

>

Maior

==

Igual

~=

Diferente

Com os comandos acima, qualquer instrução pode ser dada dentro do comando IF. Note que o comando if foi dado dentro do comando FOR, o que já estrutura a formação de um programa.

BREAK

Utilizado para encerrar uma execução, desde que alguma exigência seja satisfeita. Exemplo:

for ti=1:10 if ti == 7

28

tj(ti)=ti;

break

break

 

end

end

tj =

0

0

0

0

0

0

7

No exemplo acima, ti varia de 1 a 10. Quando ti for igual a 7, a variável tj assume o mesmo valor, e o operador quer interromper a operação. Isto é feito através do comando break. O primeiro break interrompe o comando if, enquanto o segundo interrompe o comando for.

While

É também um operador condicional. Manda executar determinadas instruções enquanto uma condição for respeitada. Exemplo:

ti=0;

» while ti <= 6

ti=ti+1;

tj(ti)=ti;

 

end

» tj

tj =

1

2

3

4

5

6

7

No exemplo acima, enquanto ti for menor ou igual a 6, tj assume o mesmo valor.

Max, Min e Abs

As funções acima fornecem os valores máximo, mínimo e absoluto de um vetor. A função abs pode ser combinada com as funções máximo e mínimo. Como exemplo, assuma o vetor

Com as operações

A = [

3

-9

-4]

29

max(A)

ans =

3

» min(A)

ans =

-9

Portanto, as funções max e min consideram o valor real de uma variável. Se o valor máximo ou mínimo for desejado em módulo, obtem-se:

max(abs(A))

ans =

9

» min(abs(A))

ans =

3

Neste caso, a consideração é modular, e o valor -9, considerado mínimo no primeiro caso, torna-se máximo no segundo.

Sort

Assuma o mesmo vetor a considerado acima. Se for do interesse do usuário ordenar o vetor a de forma crescente, usa-se o comando

b = sort (A)

Obtendo como resposta:

b =

-9

-4

3

Uma vez mais, se os valores em módulo são desejados, usa-se:

c = sort ( abs (A))

30

Obtendo:

c =

3

4

9

Uma terceira alternativa refere-se à possibilidade de escalonamento em ordem

modular decrescente. Para isso, usa-se:

Obtendo:

d = sort(-abs ( A))

d =

-9

-4

-3

Note neste caso que os valores de d são negativos, mas isto é irrelevante se o valor modular for de interesse.

Find

Utilizado para encontrar uma variável de interesse dentro de um conjunto de dados. A resposta é a posição da variável dentro do conjunto de dados. Por exemplo

Com resposta:

fprintf

e = find(A == -9)

e =

2

Utilizado para fornecer alguma informação relevante na tela. Esta informação pode vir associada a um comentário.

fprintf('Representando %g%% do sistema\n\n',nfgh);

A frase 'Representando enquanto nfgh é a informação.

%g%% do sistema\n\n'

31

é

o comentário,

Input

Utilizada para fornecer um dado a ser utilizado pelo programa. Neste caso, a informação é digitada pelo usuário na tela.

dc=input('forneça o valor desejado = > ')

E o valor digitado na tela será automaticamente considerado igual a dc.

pause

Utilizado

para

parar

provisoriamente

o

processamento.

Após

digitar

enter

novamente, o programa volta a ser executado.

Save

Utilizado para salvar em formato binário algumas variáveis de interesse.

Save arq X

Salva no arquivo arq.mat a variável X. Para carregar a variável X, basta digitar load arq, e automaticamente esta varável estará na área de trabalho.

Exercício

1- Criar uma matriz aleatória de dimensão 8x8 em um arquivo de extensão “m”.

Achar norma, rank, autivalores e determinante desta matriz. Multiplica a matriz de 1 a 10. Calcule todos ítens acima para cada fator e plote tudo em função do fator.

2-

Automatizar exercícios do capítulo anterior.

3-

Resolver a equação f(x)=x 2 +2x + 1 por Newton Raphson.

Código:

x=0;

erro=10;

while (erro>0.001)

dy=2*x+2;

delta=-(1/dy)*erro;

x=x+delta;

erro=x^2+2*x+1;

end

32

Capítulo 6 - . Simulink

Introdução

Simulink é uma opção em MATLAB para simulação de sistemas dinâmicos. Estes sistemas poderiam ser implementados computacionalmente em MATLAB, mas podem ser resolvidos de forma mais simples através desta opção. A seguir, será mostrado como montar um diagrama de blocos em um arquivo de extensão “m”. Dentro do ambiente MATLAB, digite “simulink”. A seguinte tela será obtida:

MATLAB, digite “simulink”. A seguinte tela será obtida: S o u r c e s Sinks

Sources

Sinks

Discrete

Linear

tela será obtida: S o u r c e s Sinks Discrete Linear Nonlinear Connections Extras

Nonlinear

Connections

Extras

SIMULINK Block Library (Version 1.3c)

Cada um dos ítens acima

constitui diversas opções de bloco. Por exemplo,

clicando duas vezes sobre o símbolo sources, obtem-se:

clicando duas vezes sobre o símbolo sources, obtem-se: Signal Source Library 12:34 Clock Digital Clock Repeating

Signal Source Library

12:34 Clock Digital Clock Repeating Sequence Constant Signal Generator Pulse Generator Sine Wave Step Input
12:34
Clock
Digital Clock
Repeating
Sequence
Constant
Signal
Generator
Pulse
Generator
Sine Wave
Step Input
[T,U]
From
From File
Chirp Signal
Workspace
Random
Band-Limited
Number
White Noise

34

Clicando sobre “linear”, obteria-se:

Linear Library . + + Sum Inner Product du/dt 1/s Integrator Derivative 1 K 1.317
Linear Library
.
+
+
Sum
Inner
Product
du/dt
1/s
Integrator
Derivative
1
K
1.317
Gain
Matrix
Slider
Gain
Gain
1
(s-1)
s(s+1)
s+1
Transfer Fcn
Zero-Pole
Gain Gain 1 (s-1) s(s+1) s+1 Transfer Fcn Zero-Pole State-Space Obtendo, portanto, diversos possíveis

State-Space

Obtendo, portanto, diversos possíveis componentes.

Montagem de um arquivo de blocos

Para se criar um arquivo de extensão “m”, clica-se em “file” no menu disponível da caixa “simulink”, escolhendo a opção “new”. Portanto, passa-se a ter duas janelas, uma com as opções “simulink”, e outra referente ao arquivo de extensão “m”. Para criar um diagrama de blocos neste arquivo, pressiona-se o botão esquerdo do “mouse” sobre o elemento de interesse e arrasta-se para a janela do arquivo “m”. O exemplo abaixo mostra quando a caixa geradora de onda senoidal é arrastada para a janela do arquivo de extensão “m”. Esta operação copia esta caixa na janela, i.e., a operação original continua disponível na janela “simulink”.

35

Obtendo na janela

Obtendo na janela Signal Source Library 12:34 Clock Digital Clock Repeating Sequence Constant Signal Generator

Signal Source Library

12:34 Clock Digital Clock Repeating Sequence Constant Signal Generator Pulse Generator Sine Wave Step Input
12:34
Clock
Digital Clock
Repeating
Sequence
Constant
Signal
Generator
Pulse
Generator
Sine Wave
Step Input
[T,U]
From
From File
Chirp Signal
Workspace
Random
Band-Limited
Number
White Noise

Sine Wave

Um sinal integrador deve ser adicionado. Clicando sobre a opção linear, obtêm-se tal comando. Arrastando para a janela do arquivo de extensão “m”, obtem-se:

36

1/s
1/s

Sine Wave

Integrator

A conexão entre ambos é feita clicando o botão esquerdo do mouse sobre a seta do sinal de onda senoidal, arrastando esta em seguida até o integrador, obtendo:

1/s Sine Wave Integrator
1/s
Sine Wave
Integrator

Desta forma, um simples diagrama de bloco foi montado. Assuma então que os parâmetros da sinal de onda senoidal devam ser ajustados. Neste caso, basta clicar duas vezes o botão esquerdo sobre este bloco no arquivo de extensão “m”. Um quadro a respeito deste operador aparecerá, onde amplitude, frequência e ângulo podem ser ajustados. Tal operação é possível para qualquer operador. Este arquivo, se pronto, deve ser salvo. Tal comando é feito através do menu “file” disponível na barra do arquivo onde o diagrama de blocos foi gerado. Note que este arquivo deve ter extensão “m”. Assuma que uma vez que este arquivo esteja gravado, deseja sair do programa. Basta fechar o arquivo através do menu “file” e dar o comando “quit” no prompt do MATLAB. Para carregar o arquivo novamente, uma vez estando dentro do MATLAB, basta digitar “simulink”, clicar sobre a opção “file”, “open” e clicar sobre o nome do arquivo. Se por exemplo, for de interesse do operador inserir um bloco de somatório na saída, procede-se da seguinte forma:

37

Apaga-se a linha que liga os dois primeiros blocos:

Apaga-se a linha que liga os dois primeiros blocos: Sine Wave 1/s Integrator Insere-se o bloco

Sine Wave

1/s Integrator
1/s
Integrator

Insere-se o bloco somatório entre os dois blocos existentes:

+ + 1/s Sine Wave Sum Integrator
+
+
1/s
Sine Wave
Sum
Integrator

Finalmente, faz-se as conexões:

38

+ 1/s + Sum Integrator
+
1/s
+
Sum
Integrator

Sine Wave

E o novo diagrama está pronto. Deve-se salvar o novo arquivo e proceder com a simulação.

Simulando um arquivo de extensão “m

Üma vez criado o arquivo de extensão “m”, deve-se escolher que método de integração utilizar. Simulink oferece as seguintes possibilidades:

linsim

Método que subtrai as equações dinâmicas

rk23

Runge-Kutta de terceira ordem

rk45

Runge-Kutta de quinta ordem

gear

Método previsor-corretor de Gear para sistemas stiff.

adams

Método previsor-corretor de Adams

euler

Método de Euler

linsim é usado para modelos de sistemas lineares. Rk23 e rk45 são utilizados para sistemas altamente não lineares. Gear é usado quando o sistema é não linear, mas bem comportado. Não funciona bem para perturbações bruscas na entrada ou quando há singularidade. Adams é usado quando o sistema é não linear e bem comportado, mas com poucas constantes de tempo variáveis. Euler é usado somente para testar resultados.

Comando de Execução

Asumindo que o linsim seja escolhido (todos os outros têm procedimento idêntico), digita-se:

[a b]=linsim(“file”,tmax,xo,options)

onde

39

a,b são os vetores de saída

file é o arquivo de extensão “m” onde o diagrama de blocos está contido. Tmax é o tempo máximo de processamento.

xo é o vetor de condições iniciais

options contém a tolerância, passo máximo e mínimo.

Um gráfico que mostre o comportamento de a em função de b pode ser obtido como mostrado anteriormente na seção de gráficos. O exemplo abaixo mostra a simulação do diagrama de blocos genérico mostrado no arquivo sim1.m :

2 + 1 + s+1 Sum Signal Gain Transfer Fcn Generator
2
+
1
+
s+1
Sum
Signal
Gain
Transfer Fcn
Generator

O sinal gerador é de uma onda senoidal de amplitude 1. O seguinte comando é

dado para executar a simulação:

options=[0.001,0.00001,10];

[tl,xl]=linsim('sim1',10,1,options);

Com o comando de gráfico

Obtendo o seguinte gráfico:

plot(tl,xl,’w’)

40

Se uma das variáveis for alterada, por exemplo, a função de transferência tiver o numerador

Se uma das variáveis for alterada, por exemplo, a função de transferência tiver o numerador igual a 2, obtêm-se:

de transferência tiver o numerador igual a 2, obtêm-se: Portanto, qualquer mudança pode ser feita para

Portanto, qualquer mudança pode ser feita para se testar o efeito nas variáveis de

estado.

41

Exercício

Simular o sistema abaixo, onde R=2, L=1

Exercício Simular o sistema abaixo, onde R=2, L=1 Incluir um capacitor de C=1 em série e
Exercício Simular o sistema abaixo, onde R=2, L=1 Incluir um capacitor de C=1 em série e
Exercício Simular o sistema abaixo, onde R=2, L=1 Incluir um capacitor de C=1 em série e
Exercício Simular o sistema abaixo, onde R=2, L=1 Incluir um capacitor de C=1 em série e

Incluir um capacitor de C=1 em série e simular novamente. Simular utilizando função de transferência (bloco “transfer function”) e por variáveis de estado (bloco “state space”)

42