Escolar Documentos
Profissional Documentos
Cultura Documentos
Cursos Extra Dinâmicos
Cursos Extra Dinâmicos
DE
MATLAB 6.5
Janeiro/2003
Universidade Presbiteriana Mackenzie – Escola de Engenharia
Sumário
1. Introdução
1.1 História do MATLAB
1.2 Toolboxes
1.3 Aprendendo a Utilizar o MATLAB
1.4 MATLAB no Ambiente Windows
1.5 Comandos Básicos e Declarações de Variáveis
1.6 Números e Expressões Aritméticas
1.7 Formato de Saída
1.8 Matrizes Simples
1.9 Elementos das Matrizes
1.10 Indexação de Elementos de Matrizes
1.11 Dimensão de Vetores e Matrizes
1.12 Matrizes Especiais
1.13 Números e Matrizes Complexas
1.14 Funções Matemáticas Elementares
1.15 Facilidades do Help
4. Controle de Fluxo
4.1 Laço For
4.2 Laço While
4.3 Estrutura If-Else-End
4.4 Estrutura Switch-Case
5. Arquivos M de Funções
5.1 Porque usar funções?
5.2 Diferença entre Arquivo M de Funções e Arquivo M de Comandos
5.3 Como escrever uma Função
5.4 Regras e Propriedades
6. Análise Numérica
6.1 Otimização
6.2 Integração Numérica
6.3 Solução de Equações Diferenciais
7. Polinômios
7.1 Raízes
7.2 Multiplicação
7.3 Adição
7.4 Divisão
7.5 Cálculo de Polinômios
7.6 Derivada de Polinômios
8. Gráficos
8.1 Gráficos Bidimensionais
8.2 Estilos de Linhas e Símbolos
8.3 Números Complexos
8.4 Escala Logarítmica, Coordenada Polar e Gráfico de Barras
8.5 Gráficos Tridimensionais
8.6 Anotações no Gráfico
9. Simulink
9.1 Introdução ao Simulink
9.2 Exemplos
11. Anexos
1 INTRODUÇÃO
- Atualmente esse software está tão desenvolvido que sua capacidade se estende muito além do
"Laboratório de Matrizes" – tradução para a palavra MATLAB;
- A forma de expressar a solução de problemas no MATLAB é quase a mesma na qual eles são
escritos matematicamente;
Alguns exemplos das muitas áreas onde o MATLAB tem sido utilizado:
- Já existem mais de 500.000 usuários ao redor do mundo, no Brasil o MATLAB tem estado
presente nas Universidades e Faculdades de primeira linha bem como nos departamentos de
engenharia e desenvolvimento das principais empresas e instituições do país: Companhia Vale do
Rio Doce, Embraer, Renault do Brasil, Motorola do Brasil, Petrobrás, BankBoston, Banco do
Brasil, Banco Central do Brasil e outros.
1.2. TOOLBOXES
• É possível uma integração direta e perfeita com o Simulink e quaisquer outras toolboxes
que se tenha disponível;
• Como todas as toolboxes estão escritas em linguagem MATLAB, pode-se tirar proveito
da característica de sistema aberto do MATLAB e também examinar os arquivos M, editá-los ou
utilizá-los como modelos de referência quando estiver criando suas próprias funções;
• Toda toolbox é disponível para qualquer tipo de sistema que execute o MATLAB;
- Toolbox de Otimização
- Toolbox de Estatística
Uma maneira fácil de visualizar o MATLAB é pensar (imaginar) que se está trabalhando com
uma calculadora científica. Lembrando que nessa calculadora além das operações elementares
como: adição, subtração, multiplicação e divisão ela também opera com números complexos,
raízes quadradas, potenciações, logaritmos e simulações complexas de sistemas lineares e não
lineares entre outras aplicações. Uma grande vantagem do MATLAB é a facilidade em
programar na sua própria linguagem e com isso armazenar e recuperar dados, criar, executar e
armazenar seqüências de comandos para automatizar os cálculos. Também é possível plotar
Na realidade, o MATLAB oferece muitas outras características e é muito mais versátil do que
qualquer calculadora:
• É uma ferramenta para fazer cálculos matemáticos;
• É uma linguagem de programação com características mais avançadas;
• Fácil de aplicar quando comparado às linguagens de programação como: BASIC, Pascal
ou C/C++.
Esse software apresenta um ambiente rico para a visualização de dados graças à sua poderosa
capacidade gráfica. É uma plataforma de desenvolvimento de aplicações, na qual conjuntos de
ferramentas inteligentes para solução de problemas em aplicações específicas, podem ser
desenvolvidos de forma relativamente fácil.
Ou menu: iniciar/programas/Matlab6.5/Matlab6.5
1. Comand Window:
2. Workspace:
• É a área na qual são exibidas todas as variáveis definidas na área de trabalho;
• Essa janela possui quatro colunas indicando o nome, dimensão, número de bytes e
a classe de cada variável;
• As variáveis podem ser editadas e visualizadas nessa própria janela, basta dar um
click-duplo para editá-las;
• Há um menu flutuante que é possível:
3. Current Directory
Área onde é exibida uma lista dos arquivos contidos no diretório corrente;
4. Command History
5. Menus pop-up
Para iniciar o nosso trabalho no MATLAB é necessário aprender alguns comandos essenciais da
janela de trabalho (command window) e na seqüência vamos aplicá-los.
Assim como qualquer outra linguagem de programação, o MATLAB tem regras a respeito do
nome de variáveis. Os nomes devem ser palavras únicas, sem inclusão de espaços e não devem
conter caracteres acentuados.
Além dessas regras de nomes de variáveis, o MATLAB possui algumas variáveis especiais:
Variável Valor
ans Variável-padrão usada para resultados
pi 3.14159265358979...
inf Infinito ex:1/0
NaN (ou) nan Não Numérico ex: 0/0
i (e) j i=j=sqrt(-1) raiz imaginária
realmin Menor número real utilizável (2.2251e-308)
realmax Maior número real utilizável (1.7977e+308)
>>A=5
>>borrachas=7
>>blocos=6;
Há uma diferença na execução dessas três variáveis, está relacionada com o ponto e vírgula “;”
no final da atribuição. Se o último caractere da declaração é um ponto e vírgula ";" a impressão
na tela é suprimida, mas a tarefa é realizada. Esse procedimento é usado em arquivos com
extensão ".m" e em situações onde o resultado é uma matriz de grandes dimensões e há interesse
em apenas alguns dos seus elementos.
Se acaso não for declarado o nome de uma variável o MATLAB tem como padrão uma variável
chamada ans (answer). Exemplo:
>>borrachas+blocos
ans=
13
Isso só ocorre porque não foi atribuído o resultado da soma a uma variável específica.
>>s=borrachas+2*blocos
s=
19
>> who
A blocos borrachas s
» whos
Name Size Bytes Class
Obs.: Não há solicitação de confirmação, todas as variáveis serão apagadas e não poderão ser
recuperadas.
>>borrachas=5;
>>canetas=8;
>>lapiseiras=3;
>>r=borrachas+canetas+lapiseiras
>>clear
3 -99 0.00001
9.637458638 1.602E-20 6.06375e23
1 + Adição
2 - Subtração
3 * Multiplicação
4 / Divisão
5 ^ Potenciação
Exemplos:
>> a=6;
>>b=8;
>>c=a-b
-2
>>d=a-2*b
-10
>>e=2*a-2^b
-244
>>resp=2*(a-3*b)^1/2-5*(2*a-sqrt(b))
-63.858
O formato numérico exibido na tela pode ser modificado utilizando-se o comando format, que
afeta somente o modo como as matrizes são mostradas, e não como elas são computadas ou
salvas.
Se todos os elementos das matrizes são inteiros exatos, a matriz é mostrada em um formato sem
qualquer ponto decimal. Por exemplo,
>> x = [-1 0 1]
resulta em:
x=
-1 0 1
Se pelo menos um dos elementos da matriz não é inteiro exato, existem várias possibilidades de
formatar a saída. O formato "default", chamado de formato short, mostra aproximadamente 4
dígitos decimais ou usam notação científica. Por exemplo, a matriz:
Exemplo:
a=
++-
+-
++
+--
Exercícios Numéricos:
2) Vc decidiu comprar um carro novo por R$18500.00. O vendedor está oferecendo duas opções
de financiamento:
a) Uma taxa mensal de juros de 0.99% paga durante 4 anos;
b) Uma taxa mensal de juros de 1.30% paga durante 4 anos e um desconto de fábrica de
R$1800.00.
Pergunta-se: Qual das duas opções é o melhor negócio? E qual é a economia?
R (1 + R ) M
P = A
(1 + R ) − 1
M
T=P.M
P=pagamento mensal
R=taxa de juros
M=número de meses
T=total a ser pago
O método mais fácil de entrar com pequenas matrizes no MATLAB é usando uma lista explícita.
Os elementos de cada linha da matriz são separados por espaços em branco ou vírgulas e as
colunas separadas por ponto e vírgula, colocando-se colchetes em volta do grupo de elementos
que formam a matriz. Por exemplo, entre com a expressão:
A=
1 2 3
4 5 6
7 8 9
As matrizes podem, também, ser introduzidas linha a linha, o que é indicado para matrizes de
grande dimensão. Por exemplo:
>>A = [1 2 3
456
7 8 9]
Com o comando load pode-se ler matrizes geradas pelo MATLAB, armazenadas em arquivos
binários ou matrizes geradas por outros programas armazenadas em arquivos ASCII.
Nos exemplos anteriores, os valores dos elementos de um vetor são digitados um a um, isto só é
fácil quando se têm poucos elementos, e o que se faz para inúmeros elementos?
>> x=[0:0.1:1]*pi
x=
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416
>> x=linspace(0,pi,11)
x=
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416
No segundo exemplo é utilizada a função linspace, primeiramente o valor inicial, depois o valor
final e por último o número de pontos que se deseja desse vetor.
Os elementos das matrizes podem ser qualquer expressão do MATLAB, por exemplo:
resultando em :
x=
Um elemento individual da matriz pode ser reverenciado com índice entre parênteses.
Continuando o exemplo,
o que produz:
x=
Note que a dimensão do vetor x é aumentada automaticamente para acomodar o novo elemento e
que os elementos do intervalo indefinido são estabelecidos como zero.
Grandes matrizes podem ser construídas a partir de pequenas matrizes. Por exemplo, pode-se
anexar outra linha na matriz A usando:
>> r= [ 10 11 12];
>> A= [A;r]
A=
1 2 3
4 5 6
7 8 9
10 11 13
Note que o vetor r não foi listado porque ao seu final foi acrescentado ";".
Pequenas, matrizes podem ser extraídas de grandes matrizes usando ":". Por exemplo,
>> A = A(1:3,:);
seleciona as três primeiras linhas e todas as colunas da matriz A atual, modificando-a para sua
forma original.
Exemplo:
1 2 3 4 5
A = 6 7 8 9 10
11 12 13 14 15
ans= 9
ans= 9
>>c=A(:,3) % gera uma matriz c utilizando todas as linhas de A e somente a terceira coluna
c=
3
8
13
Por exemplo:
>> A=[1 2 3; 4 5 6; 7 8 9]'
A=
1 4 7
2 5 8
3 6 9
>> B=[ -1 4 -7
2 -5 8
-3 6 -9]
B=
-1 4 -7
2 -5 8
-3 6 -9]
>> C=1:9
C=
1 2 3 4 5 6 7 8 9
>> B=[B; 1 1 1]
B=
-1 4 -7
2 -5 8
3 6 9
1 1 1
1 1 1
>> size(B)
ans =
5 3
>> length(B)
ans =
O MATLAB dispõe de algumas matrizes especiais, onde algumas delas são de uso geral,
enquanto outras são matrizes voltadas para aplicações especializadas. As matrizes de uso geral
incluem:
Find => retorna os índices de uma matriz, por exemplo, dos elementos não nulos.
>> B=[B; 1 1 1; 1 2 3]
B=
-1 4 -7
2 -5 8
3 6 9
1 1 1
1 2 3
>> c=find(B<0)
c=
1
7
11
zeros => retorna uma matriz nula na ordem que o usuário especificar:
>> zeros(2,3)
ans =
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
>> ones(3,1)
ans =
1
1
1
>> ones(4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
rand => retorna uma matriz de números aleatórios uniformemente distribuídos entre 0 e 1.
>> rand(3)
ans =
>> rand(2,3)
ans =
randn => retorna uma matriz de números aleatórios que seguem a distribuição normal, com
média zero e variância igual a 1.
>> randn(3,4)
ans =
>> eye(5)
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> eye(3,4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
Funções Sintaxe
Det – determinante de uma matriz det(A)
Diag – diagonal de uma matriz ou matriz diagonal a partir de um vetor diag(A)
Inv – retorna a inversa da matriz inv(A)
Reshape – reformata as dimensões de uma matriz, mantendo o número original de elementos reshape(A, m,n)
Numel – Retorna o número de elementos de uma matriz numel(A)
Ndims – retorna o número de dimensões da matriz ndims(A)
Tril – retorna a matriz triangular inferior da matriz dada tril(A)
Triu – retorna a matriz triangular superior da matriz dada triu(A)
>> z= 3 + 4*i
ou
>> z= 3 +4*j
· Matemática elementar;
· Funções especiais;
· Matrizes elementares;
· Matrizes especiais;
· Decomposição de matrizes;
· Polinômios;
· Solução de equações diferenciais;
· Equações não-lineares e otimização;
· Integração numérica;
Alguns exemplos:
>>x=0.5
>>sin(x)
>>cos(x)
>>sqrt(x)
>>exp(x)
O MATLAB possui um comando de ajuda (help) que fornece informações sobre a maior parte
dos tópicos.
Digitando:
>> help
Para obter informações sobre um tópico específico, digite help tópico. Por exemplo:
que fornece uma lista de todos os comandos relacionados com gráficos bidimensionais:
Various line types, plot symbols and colors may be obtained with
PLOT(X,Y,S) where S is a character string made from one element
from any or all the following 3 columns:
See also SEMILOGX, SEMILOGY, LOGLOG, PLOTYY, GRID, CLF, CLC, TITLE,
XLABEL, YLABEL, AXIS, AXES, HOLD, COLORDEF, LEGEND, SUBPLOT, STEM.
Overloaded methods
help cfit/plot.m
help cgrules/Plot.m
help xregtwostage/plot.m
help xregtransient/plot.m
help xregmodel/plot.m
help localmod/plot.m
help sweepset/plot.m
help mdevtestplan/plot.m
help cgdatasetnode/plot.m
help cgdatadisplay/plot.m
help idmodel/plot.m
help iddata/plot.m
help ntree/plot.m
help dtree/plot.m
help wvtree/plot.m
help rwvtree/plot.m
help edwttree/plot.m
Finalmente, para obter informações sobre um comando específico, por exemplo title, digite:
TITLE('text','Property1',PropertyValue1,'Property2',PropertyValue2,...)
sets the values of the specified properties of the title.
H = TITLE(...) returns the handle to the text object used as the title.
Note que no exemplo mostrado para adicionar o título em um gráfico, TITLE (‘text’) está escrito
em letras maiúsculas somente para destacar. Deve-se lembrar que todos os comandos do
MATLAB devem ser escritos em letras minúsculas, portanto, para adicionar o texto "Título do
Gráfico" em um gráfico, digite:
· Adição;
· Subtração;
· Multiplicação;
· Divisão à direita;
· Divisão à esquerda;
· Potenciação;
· Transposta;
2.1 TRANSPOSTA
O caracter apóstrofo, " ' " , indica a transposta de uma matriz. A declaração de:
>> A = [1 2 3; 4 5 6; 7 8 0]
>> B = A'
A= 1 2 3
4 5 6
7 8 0
B= 1 4 7
2 5 8
3 6 0
produz|:
x=
-1
0
2
Se Z é uma matriz complexa, Z’ será o conjugado complexo composto. Para obter simplesmente
a transposta de Z deve-se usar Z.’, como mostra o exemplo:
>> Z = [1 2; 3 4] + [5 6; 7 8]*i
>> Z1 = Z’
>> Z2 = Z.’
Z=
1.0000 + 5.0000i 2.0000 + 6.0000i
6.0000 + 7.0000i 4.0000 + 8.0000i
Z1 =
1.0000 - 5.0000i 3.0000 - 7.0000i
2.0000 - 6.0000i 4.0000 - 8.0000i
A adição e subtração de matrizes são indicadas, respectivamente, por "+" e "-". As operações são
definidas somente se as matrizes têm as mesmas dimensões. Por exemplo, a soma com as
matrizes mostradas acima, A + x, não é correta porque A é 3x3 e x é 3x1. Porém,
>> C = A + B
C=
2 6 10
6 10 14
10 14 0
A adição e subtração também são definidas se um dos operadores é um escalar, ou seja, uma
matriz l x l. Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro
operador. Por exemplo:
>> y = x - 1
resulta em:
y=
-2
-1
1
2.3 MULTIPLICAÇÃO
>> x'* y
ans =
4
É evidente que o resultado da multiplicação y'*x será o mesmo. Existem dois outros produtos que
são transpostos um do outro.
>> x*y’
Ans =
2 l -l
0 0 0
-4 -2 2
>> y*x’
Ans =
2 0 -4
1 0 -2
-1 0 2
O produto de uma matriz por um vetor também pode ser executado, por exemplo, A e x:
>> b = A*x
b=
5
8
-7
>> pi*x
Ans =
-3.1416
0
6.2832
Para realizar a multiplicação de elemento por elemento de duas matrizes é necessário utilizar o
símbolo de multiplicação escalar pontuada .*. O ponto precede o asterisco, símbolo padrão da
multiplicação, diz ao MATLAB para fazer a multiplicação elemento por elemento. A
multiplicação sem o ponto significa multiplicação matricial.
>> g=[1 2 3 4
5678
9 10 11 12]
g=
1 2 3 4
5 6 7 8
9 10 11 12
>> h=[1 1 1 1; 2 2 2 2; 3 3 3 3]
h=
1 1 1 1
2 2 2 2
3 3 3 3
>> g.*h
ans =
1 2 3 4
10 12 14 16
27 30 33 36
2.4 DIVISÃO
Existem dois símbolos para divisão de matrizes no MATLAB "\" e "/". Se A é uma matriz
quadrada não singular, então A\B e A/B correspondem respectivamente a inv(A)*B e A*inv(B),
por exemplo:
>>A=[1 2; 3 4]
>>B=[5 6; 7 8]
>>A/B
ans =
3.0000 -2.0000
2.0000 -1.0000
>>A\B
ans =
-3.0000 -4.0000
4.0000 5.0000
>> g./h
ans =
2.5 POTENCIAÇÃO
Por exemplo:
>> A^3
ans =
279 360 306
684 873 684
738 900 441
>> g.^2
ans =
1 4 9 16
25 36 49 64
81 100 121 144
>> 2.^g
ans =
2 4 8 16
32 64 128 256
512 1024 2048 4096
>> g.^h
ans =
1 2 3 4
25 36 49 64
729 1000 1331 1728
Exemplos:
>> A=1:9
>> B=9-A
A=1 2 3 4 5 6 7 8 9
B=8 7 6 5 4 3 2 1 0
>> vf=A>4
vf =
0 0 0 0 1 1 1 1 1
>> vf1=(A==B)
vf1 = 0 0 0 0 0 0 0 0 0
>> 2 + 2 ~= 4
ans =
0
& E
| Ou
~ Não
>> 1= = 1 & 4 = = 3
ans =
0
>> 1 = = 1 | 4 = = 3
ans =
1
Para problemas simples, é mais rápido introduzir comandos no prompt do MATLAB, ou seja, no
próprio Command Window. Entretanto, se o número de comandos é grande e você vai precisar
repetir tais cálculos, então é melhor abrir um arquivo de texto simples e depois pedir para o
MATLAB executar esse programa. Esses arquivos são chamados de arquivos M ou arquivos de
comandos. São salvos com a extensão .m. Para criar um arquivo basta selecionar New do menu
File e, então, selecione M-File. Esse procedimento abre uma janela do editor de texto na qual
você pode escrever os comandos do MATLAB.
Em virtude da grande utilidade dos arquivos de comandos o MATLAB possui várias funções
apropriadas para o uso em arquivos M. Essas funções são:
Comandos Descrição
disp(ans) Mostra os resultados sem identificar o nome das variáveis
echo Controla a exibição dos comandos dos arquivos M na janela de comandos
input Solicita ao usuário que forneça um dado de entrada
pause Suspende a execução até que o usuário pressione alguma tecla
pause (n) Suspende a execução por n segundos
waitforbuttonpressSuspende a execução até que o usuário pressione uma tecla ou um botão do
mouse.
Exemplos de arquivos M
4. CONTROLE DE FLUXO
Estrutura Geral
comandos
end
Os comandos entre as instruções “for” e “end” são executados uma vez para cada coluna do
vetor. Por exemplo:
O laço for possibilita que uma série de comandos seja repetida por um número de vezes fixo e
pré-definido. O comando end é usado como limite inferior do corpo do laço.
for i= 1:8
for j= 1:8,
A(i,j)= i+j;
B(i,j)= i-j;
end
end
C=A +B;
Exemplos:
for n=0:10
tab(n+1)=17*n;
end
disp(tab)
soma=0;
for n=0:2:100
soma=soma+n;
end
disp(soma)
Ao contrário do Laço For, que executa um grupo de comandos um número fixo de vezes, o laço
while executa um grupo de comandos um número indefinido de vezes.
A estrutura geral é:
while expressão
comandos
end
Os comandos entre as instruções while e end são executados enquanto todos os elementos de
expressão forem verdadeiros.
Exemplos:
1 3 5 7
x= + + + + ....
2 2 2 2
%Cálculo da Série
n=0;
x=1;
serie=0;
while n<50
serie=serie+x/2;
x=x+2;
n=n+1;
end
disp(serie)
1250
a = l; b = 15;
while a<b,
clc
a = a+l
b = b-l
pause(l)
end
disp(‘fim do loop’)
a condição a<b é testada. Se ela for verdadeira o corpo do laço, será executado.
if expressão
comandos
end
Exemplo:
Calcular o desconto de 20% para um número de cadeiras maior que 5. Sendo que o custo de cada
cadeira é de R$55,00.
if expressão
else
end
Exemplos:
1) Dado qualquer distância que um veículo deve percorrer (valor real em km), a capacidade do
tanque de combustível (valor real em l) e a média de consumo de combustível do veículo (valor
real em km/l). Supondo que o tanque estará cheio na partida, mostrar umas das mensagens:
OU
% DISTÂNCIA
%
d=input('Digite a distância a ser percorrida: ');
mc=15; %media de consumo
ct=45; %capacidade do tanque
if mc*ct>=d
15*45=675km
2) Os funcionários contratados pela prefeitura de uma cidade são classificados em 3 (três) níveis
conforme a pontuação obtida em 2 (duas) provas aplicadas de acordo com o seguinte critério:
Nível Pontuação
A Superior a 8 em pelo menos uma das provas ou soma dos pontos superior a 14.
B Superior a 6 em pelo menos uma das provas ou soma dos pontos superior a 9.
C Nenhum dos casos acima.
Em cada prova a pontuação é um valor real de 0 a 10. Desenvolva um programa que receba 2
(duas) notas de um funcionário e mostre como resposta o nível em que está classificado.
%Classificação de Funcionários
nota1=input('Digite a primeira nota: ');
nota2=input('Digite a segunda nota: ');
if nota1>=8 | nota2>=8 | (nota1+nota2)>=14
disp('aluno nível A')
elseif nota1>=6 | nota2>=6 | (nota1+nota2)>=9
disp('aluno nível B')
else
disp('aluno nivel C')
end
Essa estrutura funciona como uma chave seletora, escolhendo a expressão correta para
executar os comandos.
Estrutura geral
switch expressão
case teste_expressão1
comandos 1
comandos 2
otherwise
comandos 3
end
Exemplos:
1) Conversão de unidades:
%Conversão de unidades
%
x=input('Entre com o valor numérico: ');
unidades=input('Digite a unidade desejada: ');
switch unidades
case{'polegadas','pol'}
y=x/2.54;
disp([num2str(y) 'pol'])
case{'pes', 'p'}
y=x/(2.54*12);
disp([num2str(y) 'pes'])
case{'metros','m'}
y=x/100;
disp([num2str(y) 'm'])
case{'centimetros','cm'}
y=x;
disp([num2str(y) 'cm'])
otherwise
disp(['Unidade Desconhecida: ' unidades])
end
2) Faça um programa que o usuário possa digitar qualquer mês do ano e como resultado seja
mostrado o número de dias do mês correspondente.
otherwise
disp('Esse mes nao existe')
end
Nesse caso em especial a variável mês é uma string, portanto a entrada de dados deve ser também
uma string para que haja comparação em cada caso. Pode-se usar ao invés de uma string
simplesmente um escalar, é só nomear cada variável mês como um escalar.
3) Outro exemplo seria entrar com um número de 1 a 12 e o programa lhe fornecer o mês
correspondente.
%Programa para saber quantos dias tem o mes
mes=input('digite o mes desejado em numero: ');
switch mes
case 1
disp('Janeiro')
case 2
disp('Fevereiro')
case 3
disp('Marco')
case 4
disp('Abril')
case 5
disp('Maio')
case 6
disp('Junho')
case 7
disp('Julho')
case 8
disp('Agosto')
case 9
disp('Setembro')
case 10
disp('Outubro')
case 11
disp('Novembro')
case 12
disp('Dezembro')
otherwise
disp('Esse mes nao existe')
end
5. ARQUIVOS M DE FUNÇÕES
É um programa elaborado como arquivo.m e que calcula algo desejado pelo programador,
devolvendo somente o valor da resposta. Os comandos executados por esse programa ficam
ocultos. Você só visualiza o que entra e o que sai, ou seja, uma função é uma caixa preta.
Entrada Saída
Cálculo
São necessárias quando existe uma seqüência de comandos que são sempre úteis para serem
calculados ou mesmo funções matemáticas.
1 2 0 3 0 − 1
X = − 1 2 1 flipud(X)= − 1 2 1
3 0 − 1 1 2 0
A principal diferença é que o arquivo.m de função se comunica com o Matlab apenas por meio
das variáveis de entrada e saída que ela cria. As variáveis intermediárias definidas internamente
pela função não aparecem nem interage com o espaço de trabalho do Matlab.
Linha 1 → indica que o arquivo M contém uma função e especifica seu nome (que vem a ser o
nome do arquivo sem a extensão .m) . Essa linha também define as variáveis de entrada e saída.
Próximas Linhas → São comentários (texto) explicando o que essa função calcula.
1) O nome da função tem que ser idêntico ao nome do arquivo. Por exemplo, a função flipud
é armazena em um arquivo denominado flipud.m.
2) Cada função possui seu próprio espaço de trabalho, separada do espaço de trabalho do
Matlab. A única ligação é em relação as variáveis de entrada e saída da função.
3) Pode-se verificar se a quantidade de argumentos de entrada e saída de uma função está
correta através da variável nargin e nargout, são variáveis dentro do espaço de trabalho
das funções. São usadas para atribuir valores pré-definidos à variáveis de entrada e
determinar que variáveis de saída o usuário deseja.
Exemplos:
function fat=fatorial(x)
%Calcula o fatorial
fat=1;
for n=1:x
fat=fat*n;
end
function [x1,x2,m]=baskara(a,b,c)
delta=b^2-4*a*c;
x1=(-b+sqrt(delta))/2*a;
x2=(-b-sqrt(delta))/2*a;
if delta>0
m='raizes distintas e reais';
elseif delta==0
m='raizes reais e iguais';
else
m='raizes complexas';
end
function [a,b,c]=ordem(a,b,c)
if a>b
temp=a;
a=b;
b=temp;
end
if b>c
temp=b;
b=c;
c=temp;
end
if a>b
temp=a;
a=b;
b=temp;
end
4) Colocar três números quaisquer em ordem crescente, mas usando duas funções (função de
função):
%Programa principal
%Ler três números e colocá-los em ordem crescente usando função de função:
%
g=input(‘entre com o primeiro numero: ‘);
h= input(‘entre com o segundo numero: ‘);
i= input(‘entre com o terceiro numero: ‘);
[a1,a2,a3]=ordem2(g,h,i);
a1
a2
a3
%Função 1
%inverte os valores colocando em ordem crescente
[a,b]=troca(a,b);
[b,c]=troca(b,c);
[a,b]=troca(a,b);
%Função 2
%realiza a troca dos valores
if x>y
temp=x;
x=y;
y=temp;
end
6. ANÁLISE NUMÉRICA
Nos casos em que é dificil integrar, derivar ou determinar analíticamente algum valor específico
de uma função, o computador pode ser utilizado para aproximar de uma forma numérica a
solução desejada. Essa área da ciência da computação e da matemática é conhecida como análise
numérica e é claro que o MATLAB possui ferramentas para resolver esses problemas.
6.1. OTIMIZAÇÃO
fminbnd = retorna a coordenada X do valor mínimo de uma função de uma variável F(X) em um
intervalo fixo.
Exemplo:
Achar o valor mínimo da função f(x)=x2-x+cos(x) implementada em ‘func01.m’:
No intervalo [0:pi]
No intervalo [2:3]
func01.m: y=func01(x)= x2-x+cos(x)
function y=func01(x)
%funcao para integrar
y=x.^2-x+cos(x);
>> xm1=fminbnd('func01',0,pi)
xm1 =
0.8879
>> xm2=fminbnd('func01',2,3)
xm2 =
2.0001
>> x=0:0.1:pi;
>> plot(x,func01(x),xm1,func01(xm1),'r*',xm2,func01(xm2),'go')
fzero = retorna coordenada X, tal que F(X)=0. Inicia busca a partir de um valor inicial, X0,
fornecido.
Exemplo:
Achar o f(x)=0 da função f(x)=x3-2x+1 implementada em ‘func02.m’:
Começando a busca com –1.5
Começando a busca com 0.
>> xz1=fzero('func02',-1.5) % f(xz1)=0 , a partir de -1.5
xz1 =
-1.6180
xz2 =
0.6180
>> x=-2:0.1:2;
>> plot(x,func02(x),xz1,func02(xz1),'r*',xz2,func02(xz2),'go')
>> q=quad('func01',-2,1)
q=
6.2508
>> q1=quadl('func01',-2,1)
q1 =
6.2508
>> x=-3:0.1:3;
>> xt=-2:0.2:1;
>> yt=func01(xt);
>> plot(x,func01(x))
>> hold on
>> area(xt,yt)
Exemplo:
function yt=func04 (t,y)
%func04 (t,y) retorna as derivadas de estado da equaç~ao
% x''-log(x)*x'+sin(x)=0
%considere:
%y(1)=x
%y(2)=x'
%desta forma, teremos:
%y(1)'=y(2)
%y(2)'=log(y(1))*y(2)-sin(y(1))
yt=[y(2) log(y(1))*y(2)-sin(y(1))]'; %vetor coluna
>> Tinicial=0;
>> Tfinal=5;
>> Yinicial=[1,0];
>> [t,y]=ode45('func04',[Tinicial Tfinal],Yinicial);
>> plot(t,y(:,1),'r',t,y(:,2))
Warning: Imaginary parts of complex X and/or Y arguments ignored.
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
7. POLINÔMIOS
7.1 RAÍZES
Encontrar raízes de um polinômio, isto é, os valores para os quais o polinômio é igual a zero. No
MATLAB, um polinômio é representado por um vetor linha contendo seus coeficientes em
ordem decrescente. Por exemplo: x 4 − 12 x 3 + 0 x 2 + 25 x + 116 é introduzido como:
Dada essa forma, as raízes do polinômio são encontradas usando-se a função roots:
>>r= roots(p)
r=
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
O MATLAB adota como convenção de colocar os polinômios como vetores linha e as raízes
como vetores coluna.
Dadas as raízes também é possível construir o polinômio associado, a função que executa isso é a
poly como exemplo:
» pp=poly(r)
pp =
7.2. MULTIPLICAÇÃO
A multiplicação polinomial é efetuada por meio da função conv(que faz a convolução entre dois
vetores). Consideremos o produto de dois polinômios a( x ) = x 3 + 2 x 2 + 3 x + 4 e
b( x ) = x 3 + 4 x 2 + 9 x + 16 :
7.3.ADIÇÃO
>>d=a+b
Quando dois polinômios forem de ordens diferentes, aquele que tiver menor ordem terá de ser
preenchido com coeficientes iguais a zero, a fim de torná-lo da mesma ordem do polinômio de
ordem mais alta.
Exemplo:
>> e= c+[0 0 0 d]
e=
1 6 20 52 81 96 84
7.4. DIVISÃO
>>[q,r]=deconv(c,b)
q=
1 2 3 4
r= 0 0 0 0 0 0 0
>>x=linspace(-1,3);
escolhe 100 pontos entre –1 e 3.
>>p=[1 4 -7 -10];
define o polinômio p(x)=x3+4x2-7x-10
>>v=polyval(p,x)
calcula p(x) nos valores armazenados em x e armazena o resultado em v. O resultado pode ser
representado graficamente usando-se:
>>plot(x,v)
8. GRÁFICOS
Gráficos 2d
plot Plotar linear.
loglog Plotar em escala loglog.
semilogx Plotar em semilog.
semilogy Plotar em semilog.
polar Plotar em coordenada polar.
Plotar duas curvas no mesmo gráfico
plotyy
com escalas y diferentes
Gráficos 2d especiais
Área Gráfico de área
bar Gráfico de barras.
barh Gráfico de barras horizontal
pie Gráfico de pizza
stairs Gráfico escada
Gráfico discreto que indica pontos com
scatter
marcadores
Gráfico discreto que indica pontos com
stem
hastes
Gera gráfico com exibição de trajetória
comet
animada
compass Gráficos de vetores
feather Gráficos de vetores
Ezplot Gráficos a partir de equações de funções
ezpolar Gráficos a partir de equações de funções
errorbar Plotar erro
hist Plotar histograma.
Se Y é um vetor, plot(Y) produz um gráfico linear dos elementos de Y versos o índice dos
elementos de Y.
Por exemplo, para plotar os números [0.0 0.48 0.84 1.0 0.91 0.6 0.14], entre com o vetor e
execute o comando plot:
>> t = 0:0.05:4*pi;
>> y = sin(t);
>> plot(t,y)
resulta em:
No MATLAB também é possível plotar múltiplas linhas em apenas um gráfico. Existem duas
maneiras, a primeira é usando apenas dois argumentos, como em plot(X,Y), onde X e/ou Y são
matrizes. Assim:
A segunda, e mais fácil, maneira de plotar gráficos com múltiplas linhas é usando o comando
plot com múltiplos argumentos. Por exemplo:
Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados se os
padrões não são satisfatórios. Por exemplo,
>> X = 0:0.05:1;
>> subplot(l,2,l)
>> plot(X,X.^2,’k*’)
>> subplot(l,2,2)
>> plot(X,X.^2,’k --‘)
TIPO DE LINHA
Solid _______________
-- --------------------
-. -.-.-.-.-.-.-.-.-.-.-.-.
: ..............................
Marcador
. .......................
* ********
° ° ° °° ° ° ° ° ° °
+ ++++++++++
X xx x x x x x x
S quadrado
D losango
P Pentagrama
H hexagrama
CORES
Y amarelo
M lilás
C azul claro
R vermelho
G verde
B azul escuro
W branco
K preto
Sintaxe:
subplot(m,n,p)
Parâmetros de entrada:
m= número de eixos na vertical (número de linhas).
n=Número de eixos na horizontal (número de colunas).
p=Índice do eixo corrente
As funções de plotagem são executadas no eixo corrente configurado pelos parâmetros indicados
na última chamada subplot.
Quando os argumentos para plotar são complexos, a parte imaginária é ignorada, exceto quando é
dado simplesmente um argumento complexo. Para este caso especial é plotada a parte real versos
a parte imaginária. Então, plot(Z), quando Z é um vetor complexo, é equivalente a
plot(real(Z),imag(Z)).
Exemplo:
>> c=0:0.1:100;
>> A=1-2i;
>> D=c*A;
>> plot(D)
O uso de loglog, semilogx, semilogy e polar é idêntico ao uso de plot. Estes comandos são
usados para plotar gráficos em diferentes coordenadas e escalas:
Exemplos:
>> theta=-2*pi:0.1:2*pi;
>> whos
Name Size Bytes Class
>> rho=1:126;
>> polar(theta,rho,'r*')
>> x=-2.9:0.2:2.9;
>> y=exp(-x.*x);
>> subplot(2,2,1)
>> bar(x,y)
>> title('Grafico de barras de uma curva em forma de sino');
>> subplot(2,2,2)
>> bar3(x,y)
>> title('Grafico de barras 3-D de uma curva em forma de sino');
>> subplot(2,2,3)
>> stairs(x,y)
>> title('Grafico em escada de uma curva em forma de sino');
>> subplot(2,2,4)
>> barh(x,y)
>> title('Grafico de barras horizontal');
O MATLAB possui muitos recursos para visualização de dados em 3D. Este item representa as
principais funções relacionadas a este tópico.
meshz
waterfall
surfc
contour
contour3
Ezcontour
Ezcontourf
Ezmesh
Geram gráficos a partir de equações de funções.
Ezmeshc
Ezplot3
ezsurf
>> x=-4*pi:0.1:4*pi;
>> y=-4*pi:0.1:4*pi;
>> plot3(cos(x),sin(y),(x+y))
> >x=-pi:0.5:pi;
>> y=-pi:0.5:pi;
>> [Mx,My]=meshgrid(x,y);
>> Mz=cos(Mx).*sin(My);
>> mesh(Mx,My,Mz)
>> surf(Mx,My,Mz)
Por exemplo:
9. SIMULINK
9.1.Apresentação
Para acessar o SIMULINK deve-se primeiro abrir o MATLAB, pois apesar de ser uma aplicação
específica, este não trabalha independente e utiliza suas ferramentas de cálculo.
Deve-se clicar duas vezes no ícone do MATLAB. Aberto o programa deve-se então clicar no
ícone “Simulink” na barra de ferramentas do MATLAB ou digitar “simulink” na linha de
comando e pressionar enter logo em seguida, como mostrado a seguir:
Sendo o SIMULINK uma extensão do MATLAB, este deve então ser carregado a partir do
MATLAB. Inicie o SIMULINK clicando no seu ícone na barra de ferramentas do MATLAB,
como mostrado na figura:
Uma janela se abrirá na tela. Essa janela é a biblioteca de blocos do SIMULINK mostrado na
figura. Para criar um modelo novo, clique no ícone documento em branco.
Arraste o bloco de onda senoidal (Sine Wave) para a janela do modelo. Uma cópia deste bloco
deve ser criada nesta janela.
Abra a biblioteca de blocos lineares (contínuo) e arraste um bloco integrador (Integrator) para a
janela do modelo.
Abra a biblioteca de dispositivos de saída (Sinks) e arraste um SCOPE para a janela do modelo
em construção.
Para verificar se o gráfico gerado representa a solução da equação diferencial desejada, deve-se
resolver a mesma analiticamente, cujo resultado é:
x (t ) = 1 − cos(t )
9.4.OUTRO MODELO
O modelo anterior serviu como exemplo de implementação no SIMULINK, mas está longe de
representar um caso usual de utilização do software devido à pequena quantidade de blocos e
ligações. Agora será usado um modelo de um processo biológico para ilustrar vários níveis
adicionais de dificuldade na implementação.
Taxa de Natalidade = bx
Taxa de Mortalidade = px 2
x& = bx − px 2
Partindo disto será então construído o modelo do sistema dinâmico supondo que b=1
bactéria/hora e p=0,5 bactéria/hora. Será determinado o número de bactérias contidas no pote
após 1 hora, admitindo que inicialmente existiam 100 bactérias presentes.
Crie uma nova janela de modelo na barra de menu clicando novamente no ícone documento em
branco.
Este é um sistema de 1a ordem, o que quer dizer que requer somente um integrador para resolver
a equação diferencial. A entrada do integrador é x& e a saída é x. Abra o biblioteca linear
(contínuo) e arraste o integrador para a janela do modelo.
Ainda na biblioteca Math arraste dois blocos de ganhos (Gain) para a janela do modelo e
posicione-os como na figura. O SIMULINK exige que cada bloco tenha seu nome único. Devido
a isto, o segundo bloco de ganho será nomeado GAIN1.
Arraste ainda um bloco de soma (Sum) .
Abra agora a biblioteca de blocos não lineares (Nonlinear) e arraste um bloco de produto
(product) para a posição mostrada. Este bloco será utilizado para calcular o valor de x 2 .
Abra a seguir a biblioteca dispositivo de saída (Sinks) e arraste um bloco SCOPE para a janela do
modelo seguindo a posição mostrada.
Trace agora uma linha de sinal da saída do bloco de soma para a entrada do integrador e outra da
saída do integrador para a entrada do SCOPE.
A seguir é necessário conectar a linha que liga o integrador ao SCOPE ao bloco de ganho situado
na parte inferior da janela, pois esta linha contém o valor de x. Para fazê-lo, vá com o mouse na
saída do bloco desejado e continue segurando o mouse até a entrada do bloco desejado. O cursor
do mouse irá mudar para uma cruz. Conserve a tecla do mouse pressionada enquanto faz a
ligação. Leve a linha até a entrada do bloco de ganho. O SIMULINK automaticamente ajusta a
linha com um ângulo de 90o.
Repita a operação ligando a linha de sinal Integrator-SCOPE até a entrada superior do bloco de
produto. Da linha de sinal que liga a entrada superior do bloco de produto repita a operação de
ligação para a entrada inferior do mesmo bloco, de modo que o bloco execute a operação
x.x = x 2 . Conecte agora a saída do bloco de produto à entrada do ganho na parte superior da
janela de modelo. Conecte agora a saída do ganho superior à entrada superior do bloco de soma e
a saída do ganho inferior à entrada inferior do mesmo bloco de soma.
O modelo agora está completo, mas os blocos devem ser configurados (parametrizados) para que
este represente o sistema desejado. O SIMULINK tem como default para os blocos de ganho o
valor de 1.0, para o bloco de soma duas entradas positivas e para o integrador o valor inicial 0.0.
O valor inicial do integrador representa o número inicial de bactérias presentes no pote.
Será iniciada agora a parametrização com os blocos de ganho. Dê um duplo clique no ganho da
parte superior e mude o valor de 1.0 para 0.5 na caixa de diálogo que irá aparecer, a seguir clique
em Close. Note que o valor do ganho do bloco muda para 0.5 no diagrama em blocos.
Agora dê um duplo clique no bloco de soma e no campo List of signs mude de ++ para -+ na
caixa de diálogo que abrirá. Os sinais representam os próprios sinais de entrada no bloco. A
seguir clique em Close. Note agora que no bloco de soma o sinal superior é negativo e o inferior
é positivo, sendo então a saída a diferença das entradas que representa x& de acordo com a
equação diferencial após substituir os valores de p e b.
Para finalizar a configuração, deve-se definir o número inicial de bactérias. Para isto, dê um
duplo clique no integrador e no campo Initial condition mude para 100, e após clique Close.
A duração da simulação é definida no tempo default de 0 a 10. Neste caso, deseja-se saber o
resultado após 1 hora. Para mudar este tempo, seleciona-se na barra de menu a opção
Simulation:Parameters e no campo Stop Time digita-se 1, fechando em Close logo a seguir.
É sempre aconselhável salvar o modelo antes de executar a simulação.
O modelo agora está completo e pronto para ser executado. Para salvar na barra de menu clique
em File:Save e entre com o nome desejado. O modelo será salvo com o nome digitado e a
extensão.mdl, e seu nome aparecerá na barra de título da janela de edição.
Abra agora o SCOPE com um duplo clique e a seguir na barra de menu, clique em
Simulation:Start para iniciar a execução.
O SCOPE nem sempre mostra a figura numa boa escala para visualização. O botão Autoscale na
barra de ferramentas do SCOPE redimensiona a escala para acomodar todos os valores.
O help do SIMULINK contém informações valiosas. É boa prática utilizá-lo com freqüência.
10.REFERÊNCIAS BIBLIOGRÁFICAS
“The Student Edition of SIMULINK – Dinamic System Simulation Software for Technical.
11. ANEXOS