matlab the language of tecnical computing marie-océane parent : curso matlab : nov 2009
TRANSCRIPT
Matlab
The language of tecnical computing
Marie-Océane Parent : curso Matlab : nov 2009
Topicos• Introdução
– Apresentação– Características– Script / Mfile– Funções básicas uteis– Variáveis
• Matrizes e tabelas– Criação– Manipulação– Operações– Tabelas elaboradas
2222
• Funções gráficas– Funções gráficas básicas– Funções especificas– Plotar superfícies e volumes– Formatação anotações– Objetos gráficos– Handle– Propriedades– Gerenciar objetos gráficos– Figura– eixos
Introdução
• Utilizações na engenharia– Análise numérica– Cálculo matricial– Processos graficos– Criações de interfaces– ....
3333
Apresentação
4444
Histórico
Janela de comando
Variáveis
Conteúdo da pasta
de trabalho
Pasta de trabalho
Características• Matlab é uma linguagem interpretada (≠ compilada)• As variáveis elementares são tabelas, matrizes, vetores (≠ ≠ ≠
Mapple)• O “coding style” é importante
– Escrever seu nome e a data– Dar nomes claros as variáveis– Escrever o máximo de comentários (% ou crtl+R)– Respeitar as tabulações
5555
A MELHOR FERRAMENTA DO MATLAB É A AJUDA !!!
Encomendas basicas• Sintaxe flexível:
– Nome_comando = parâmetro ;– Nome_comando = parâmetro– parâmetro
• Bom saber– clc : limpa a tela do computador (sem limpar a
memória)– clear all : limpa a memória do Matlab
6666
Scripts / Mfiles
• Execução de um conjunto de instruções– Coisa.m
– Um script pode chamar outro script– “%” introduz comentários– O arquivo do script tem que ser na pasta de trabalho ou
no Path para ser executado – Matlab tem o seu próprio editor de script
7777
Instrução 1;Instrução 2%comentário...Instrução n;
As variáveis
ARRAY
[ full or sparse ]
Logical Char Cell Structure Function handleNumeric
Double (Padrão) SingleInt8, int16, int32,Uint8, uint16....
8888
As variáveis
• Nomes das variáveis– Max 18 caracteres– Tem que iniciar por uma letra– Matlab faz diferença entre Maiúscula e minúscula– Evitar ‘ç’ ou ‘ã’ ou outros caracteres “exóticos”
• WorkspaceAs variáveis criadas são armazenadas no Workspace– clear : cancelar as variáveis– save : salvar as variáveis– load : recuperar variáveis
9999
Constantes definidas
• Funções de Matlab que definem constantes usuais– pi– i, j– Inf : o infinito do computador (ex : 1/0)– NaN : Not a Number (ex : 0/0)– eps : precisão relativa...
10101010
Estruturas de controle
11111111
Volta “For” : incrementalFor ind = inicio : incremento : fim
instrução 1;instrução 2;...instrução n;
end
Volta “While” : por enquantoWhile condição lógica
instrução 1;instrução 2;...instrução n;
end
“Switch”Switch expressão
case expressão1instrução 1;case expressão2instrução 2;...otherwiseinstrução n;
end
Testes e Condições lógicas
12121212
Testes lógicos :
IF Condição lógicainstrução 1;instrução 2;
elseif Condição lógicainstrução 3;
elseinstrução n;
end
Condições lógicas :
Igualdade : ==
Diferencia : ~=
Superioridade : > , >=
Inferioridade : < , <=
Operadores lógicos :
e : &
ou : |
Xor : xor
Not : ~
Funções básicas uteis
• ceil (x) : arredonda o numero ‘x’ para o inteiro mais próximo na direção de +inf
• floor (x) : arredonda o numero ‘x’ para o inteiro mais próximo na direção de –inf
• round (x) : arredonda o numero ‘x’ para o inteiro mais próximo
• fix (x) : arredonda o numero ‘x’ para o inteiro mais próximo na direção de 0
• rem (x,y) : resto da divisão euclidiana x/y• rand : gera números aleatórios entre 0 e 1
131313
Palavras chaves
• Palavras definidas por Matlabbreak, case, catch, continue, else, elseif, end, for,
function, global, if, otherwise, persistent, return, switch, try, while
Se você usar essas palavras do jeito errado ...
14141414
Formatos de variáveis numéricas
• Formatos mais usados : para mais possibilidades ver Help Format– format : (default) 4 dígitos apos do ponto decimal = format
short– format long : 15 dígitos incluindo o ponto decimal– format short e : 5 dígitos mais o expoente (floating)– format long e : floating, 15 dígitos
151515
OBS : considerando uma precisão double
Entradas e saídas• Tipos de Entradas/ Saídas
Textos, Imagens, Som & vídeoArquivos de calculo Excel ...
• Recuperar dados usando a interface
• Usando a função uiimport
16161616
Entradas e saídas
17171717
Conversar com o usuário• Entrada do teclado :
Val = input (‘texto1’)
string = input (‘texto2’, ‘s’ )
• Saída no Command Windowdisp (variável)
18181818
Conversar com o usuário
• salvar e recuperar arquivos
19191919
[nome_do_arquivo nome_da_pasta] = uigetfile(‘filtro’)
[nome_do_arquivo nome_da_pasta] = uiputfile(‘filtro’)
OBS : se o usuário cancela, a função vai dar o valor 0
Instrução save• save nome-arquivo variavel1 variavel2 formato• save (‘nome_arquivo’, ‘formato’, ‘variavel1’, ‘variavel2’)O formato padrão é o formato binário Matlab (.mat)
20202020
Instrução load
• load nome_arquivo• load (‘nome_arquivo’)• Nome_var = load (‘nome_arquivo’)Nos arquivos .mat criado com a instrução save, as variáveis
ficam com o mesmo nomeNos arquivos –ascii, se não é indicado um nome pela variável, o
conteúdo é colocado numa variável com o nome do arquivo
21212121
Abrir e fechar um arquivo
• Abrir : fid = fopen (‘nome_arquivo’, ‘permissão’);– fid : variável que identifica o arquivo ; = -1 se teve um
problema na abertura
• Fechar : estatuto : fclose (fid)– estatuto = -1 se teve um problema no fechamento do
arquivo
OBS : Matlab fecha todos os arquivos quanto se fecha ele
22222222
Funções de leitura
• Leitura linha por linha :– Texto_linha = fgetl (fid);– Texto_linha = fgets (fid); (copia o caráter ‘nova linha’ :
coloca mais espaço)
• Leitura de um conjunto de valoresVariáveis = fscanf (fid, ‘format’, num_valores)
• Leitura de um conjunto de valores bináriasVariáveis = fread (fid, num_valores)
23232323
Funções de escritura
• Escritura de valores especificando o formatofprintf (fid,’format’, variavel_para_salvar);– Fid : o identificador de arquivo obtido com fopen– ‘format’ : %num_caract.num_decimais tipo
• Ex : %6.2f
• Escritura de valores bináriasfwrite (fid, variavel_para_salvar, precisão);
24242424
Excel : reconhecer
• Reconhecer um arquivo Excel[tipo, nomes_das_folhas] = xlsfinfo (‘nome_do_arquivo’)
25252525
‘Microsoft Excel Spreadsheet’
Ou [] se o arquivo não é um documento Excel
[ ‘folha1’ ‘folha2’... ‘folha n’]
Excel : Importar
• Importar data de um arquivo Excel– Num = xslread (‘nome_arquivo’, -1)
– Num = xslread (‘nome_arquivo’, ‘nome_da_folha’, ‘zona’)
• Num vai ser uma tabela de números– Do mesmo tamanho que a zona considerada– Os valores não numéricos são NaN– As linhas o colunas de textos são ignoradas
26262626
Permite de abrir o arquivo no Excel e o usuário seleciona a zona a importar
Indica a zona no formato Excel.
Exemplo : ‘B5,E5’
Sem especificação Matlab vai selecionar a folha intera
Excel : Escrever
• Escrever dados num documento Excel
27272727
[status, mensagem] = xlswrite (‘nome_arquivo’, M, ‘nome_folha’, ‘zona_escritura’)
= 1 : sucesso
= 2 : fracasso
Informações sobre os problemas eventuais
Tabela de dados para escrever
Tamanho Maximo : 65536 x 256
Se a folha não existe, é criada
Matrizes e tabelas
CriaçãoManipulação
Operações matriciaisOperações de tabela
Criação de matrizes• Criar uma matriz
– Explicitamente :• A matriz é delimitada por [ e ]• Os elementos da linha são separados por um espaço• O fim da linha é indicada por ‘ ; ’• O símbolo ‘ : ‘ permite de criar um vetor com elementos espaçado regularmente :
Vetor = inicio : passo : fimEx : v = 1 : 1 : 4 ; ↔ v = [ 1 2 3 4 ];
– Usando as encomendas Matlab• lindspace : cria um vetor de n elementos
com um inicio e um fim• zeros : cria uma matriz de zeros• ones : cria uma matriz de uns• rand : matriz aleatória uniforme• randn : matriz aleatória normal• eye : matriz identidade• pascal : triângulo de Pascal• magic : quadrado mágico• vander : Vander monde .....
29292929
Exemplos :
Criação de matrizes
– Usando a instrução loadOBS : todas as linhas do arquivo tem que ter o mesmo
número de colunas !
30303030
Criação de matrizes• exemplos
31313131
Manipulação de matrizes
• Obter o valor de um elemento :
Var=nome_matriz(ind1,ind2);
• Atribuir um valor a um elemento
nome_matriz(ind1,ind2)=valor;
32323232
Manipulação de matrizes
• Concatenação
33333333
NB : As dimensões das matrizes tem que ser coerentes
Manipulação de matrizes
• Extração
34343434
Manipulação de matrizes
• Suprimir linhas e colunas
35353535
O símbolo [ ] significa matriz vazia
Manipulação de matrizes
36363636
Operações MatriciaisSignificado Símbolo Exemplo
Transposta
Adição
Subtração
Multiplicação com um escalar
Multiplicação
X solução de A.X=B
X solução de X.A=B
Potência
Determinante
Traça
Valores Próprias
Inversa
Fatoração de Cholesky
Fatoração L.U
...
‘
+
-
*
*
\
/
^
det
trace
eig
inv
chol
lu
B=A’
C=A+B
C=A-B
D=3*A
D=A*B
X=A\B
X=B/A
B=A^3
dd=det(A)
t=trace(A)
vp= eig(A) (o resultado é um vetor)
B=inv(A)
(consultar a ajuda)
(consultar a ajuda)
37373737
Operações vetorias
• dot (a,b) : produto escalar dos vetores a e b
• cross (a,b) : produto vetorial• norm (a) : norma(2) do
vetor a
383838
Operações de tabelas• Operações que acontecem elementos por elementos entre tabelas de
mesmas dimensões (n x m).• Permite de evitar de construir voltas iterativas• O resultado vai ser uma tabela (n x m)• Os operadores são caracterizados por o símbolo : “.”
Significado Símbolo
Exemplo
Multiplicações
Divisão
Potência
.*
./
.\
.^
z=x.*y ou z(i,j)=x(i,j)*y(i,j)
z=x./y ou z(i,j)=x(i,j)/y(i,j)
z=x.\y ou z(i,j)=y(i,j)/x(i,j)
z=x.^y ou z(i,j)=x(i,j)^y(i,j)
39393939
Operações de tabelas
• Operadores de relação : >, >= ,< ,<= ,== ,~=(O resultado é uma tabela de 0 e 1)
• Operadores lógicos : & ,| ,~(O resultado é uma tabela de 0 e 1)
• Raiz : sqrt, ^• Procura de valores : find• Operadores trigonométricos : sin, cos, tan, asin, acos, atan, atan2...
unidade em radianos• Operadores hiperbólicos : sinh, cosh, tanh, acosh, atanh...• Números complexos : abs, sqrt, angle, real, imag, conj...• Operadores logaritmicos : log, exp, log10• n! factorial (n)• ...
40404040
Alguns exemplos
41414141
Produto matricial
Produto de tabelas
Matriz aleatória 3x3
Traça da matriz B
Determinante da matriz B
Inversa da matriz B
Tabelas “elaboradas”
StringsMatrizes ocas
Tabelas de célulasEstruturas
String• Sintaxe : nome_variavel= ‘texto...’;• Funções elementares
– Concatenação : [ ] txt=[ txt1, txt2, ‘marcel’];– Teste : isstr 1 se é um string 0 se é um numero– Vazios deblank suprime os espaços d’um string– Comprimento size numero de caracteres do string– Código ASCII abs código ASCII de cada caractere
char caractere associado a um código ASCII– Conversão int2str intero em caractere
num2str real em caracterestr2num caracteres em realeval texto em instrução Matlablower/upper minúscula/maiúscula
– Comparação strcmp
43434343
Tabelas de String
• Duas sintaxes possíveis– Tabela “clássica” :
S=strvcat(string1,string2,...)
44444444
–Tabela de células :S={ string1, string2...; string3,string4...};
Brancos são juntados para que cada linha tenha o mesmo tamanho
Matrizes Ocas
• Definição– Matrizes que tem muitos ‘0’– A ferramenta de definição de matrizes ocas permite de
armazenar só os valores não-nulos e sua localização na matriz.
– Permite de economizar muito espaço de memória• Criação
– Não é nunca automático– A função sparse(M) permite de converter uma matriz
normal em uma matriz oca– A função full(N) permite de voltar a uma matriz cheia
45454545
Matrizes Ocas
• Criação direitaS=sparse(ind_lin, ind_col, valores, num_lin,num_col)
46464646
Vetores de mesma dimensão escalares
Matrizes Ocas
• Informações sobre os elementos não-nulos– nnz : número de elementos não-nulos– nonzeros : vetor dos elementos não-
nulos– find : indica os índices i e j dos
elementos não-nulos
• Visualização gráfica– spy : visualização 2D, cada ponto
representa um elemento não-nulo
47474747
Matrizes Ocas
• Operações– A maioria das operações Matlab funcionam com
as matrizes ocas– Existem algumas funções específicas :
• issparse : indica se uma matriz é o não é oca• spalloc : alocação do espaço• speye : matriz identidade oca• sprand : matriz aleatória oca• ...
48484848
Tabela de células : Cell Arrays
• O que é ?– Armazenamento “organizado” de dados de tipos e
dimensão diferentes
49494949
Tabela de células
• IndexaçãoIndexação da célula C(ind1,ind2)={valor};
50505050
OBS : essas duas sintaxes são equivalentes
Indexação do conteúdoC{ind1,ind2}=(valor);
Tabela de células
• Acessar a um elementoIndexação da célulaV1=C1(1,1);
51515151
Indexação do conteúdoV1=C1{1,1};
OBS : essas duas sintaxes NAO são equivalentes
Tabela de células
• Funções interessantes– cell : criação de uma tabela de células de matrizes vazias– celldisp : visualização do conteúdo das células– cellplot : visualização gráfica da tabela– cellfun : aplica uma função a todos os elementos– iscell : valor =1 se é uma tabela de células– num2cell : conversão de uma tabela de números em uma
tabela de células
525252
Estruturas
• Definição MATLAB : Structures are multidimensional MATLAB arrays with elements accessed by textual field designators.
• Os campos podem ser de diferentes tipos • Exemplo : Ensaios de Caixa de Marchas
– Caixa– Data– Relação– Torque– Velocidade
53535353
Estruturas
545454
OBS :
Todos os componentes de uma estrutura tem os mesmos campos.
Os campos que não são definidos tem o valor [].
Funções Gráficas
Funções gráficas básicasSintaxe
Funções especializadasEncomendas uteisObjetos gráficos
Funções gráficas básicasplot Plota em 2D
errorbar Plota em 2D com barra de erros
polar Representação polar
ptotyy Cria gráfico com eixo ‘y’ dos dois lados
loglog Cria grafico com escada logaritmica
semilogx
semilogy
Cria gráfico com um dos eixos na escada logarítmica
plot3 Plota uma linha em 3D
565656
Sintaxe : função plot
• Nome_handle = plot (X,Y,’lineSpec’)– X e Y podem ser vetores do mesmo tamanho
uma curva 2D – 1 “handle”
– X e Y podem ser matrizes do mesmo tamanho uma curva 2D por coluna – 1 “handle” por curva
– X pode ser um vetor e Y uma matriz uma curva 2D por coluna de Y de coordenada X : 1 “handle” por curva
– lineSpec : string que permite de definir o estilo da curva • Cor do traço• Espessura• Tipo de traço...
575757
Estilo da curva
• ‘lineSpec’
585858
Ex : plot (X,Y,’--+r’)
Exemplo : plot
595959
t=0:pi/100:2*pi;
x=sin(t);
y1=sin(t+0.25);
y2=sin(t+0.5);
plot (x,y1,’r-’,’linewidth’,2)
hold on
plot(x,y2,’b—’,’linewidth’,2)
title(‘blulublu’)
xlabel(‘x=sin(t)’)
ylabel(‘y=sin(t+a)’)
grid on
t : é um vetor cujas componentes variam de 0 até 2*pi com um encremento de pi/100
x, y1 e y2 são vetores do mesmo tamanho que t
Plotar em vermelho com traço continuo e espessura 2, a curva y1=f(x)
Plotar em azul com linha tracejada e espessura 2 a curva y2=f(x)
Titulo do gráfico
Legenda dos eixos
Exibir as linhas de grade
Exemplo plot
606060
Exemplo plot3• Sintaxe : nome_handle=plot3(X,Y,Z,’linespec’)• desenhar uma hélice
6161
t=0:pi/50:10*pi;plot3(sin(t),cos(t),t,'linewidth',2)grid on
Funções específica• Ver na ajuda :
6262
Plotar superfície, volumes...
• Aplicação : visualizar a função seno cardinal : sen(x)/x
6363
x=-8:0.43:8;y=x; [X,Y]= meshgrid (x,y);R= sqrt (X.^2+Y.^2);Z=sin (R)./R;
surf (X,Y,Z)
Plotar superfície, volumes
6464
subplot (2,2,1);mesh (X,Y,Z)title ('Visualizar com mesh')
subplot (2,2,2)meshc (X,Y,Z)title ('Visualizar com meshc')
subplot (2,2,3)surf (X,Y,Z)title ('Visualizar com surf')
Formatação, anotaçõeshold on / hold off Superposar curvas
title (‘string’) insere um titulo
xlabel (‘string’) ylabel (‘string’)
insere descrição dos eixos
grid on / grid off insere ou cancele linhas de grade no gráfico
box Quadra mento do gráfico
subplot Criar diferentes gráficos na mesma figura
legend Criar uma legenda
text, gtext Colocar texto
axes Definir os limites dos eixos656565
Salvar uma figura
• print : manda pela impressora• saveas : salvar no formato imagem
– saveas (handle,’nome’, ‘formato’)– saveas (handle,’nome.ext’)
6666
OBS : E bom testar os formatos para saber qual é o mais adequado
Objetos gráficos
676767
Figura
Botão Eixos Menus
Superficies Imagens Linhas SubmenusTextos
Características de objetos gráficos• Ligação dinâmica : “handle”
– Numero real– Atribuído automaticamente na criação do objeto gráfico– Não pode ser modificado
• Propriedades : tipo de objeto, pais, cor, visibilidade...– Dependem do tipo de objeto– Podem ser modificadas– Tem valores padrões (default)– Podem ser recuperadas, memorizadas, transferidas,
modificadas...
6868
Recuperar o handle
• Na criação do objeto gráfico– hfig1 = figure;– hobj1 = função_de_criação_do_objeto;
• Usando funções Matlab– hobj = gco (get current object)
gca (get current axis)gcf (get current figure)
– Função handlem (ver a ajuda)– Função findobj : permite de recuperar o handle do
‘current’ objeto e de todos os descendente dele.
6969
Lista das propriedades• Pode ser obtida com a encomenda : get (handle)• Pode ser obtida dum jeito interativo
7070
Gerenciar os objetos gráficos
• Acessar, modificar o valor de uma propriedade– Val= get (handle, ‘nome_propriedade’);– set (handle, ‘nome_propriedade’,valor_novo);
• Deletar um objeto gráfico– Val = delete ( handle_do_objeto_a_deletar);
7171
t=0:pi/50:10*pi;hfigura=plot3(sin(t),cos(t),t);grid onhlinha=findobj(gca,'Type','line');set(hfigura,'linewidth',4)set(hlinha,'color','r')
Figura• Criação
– Com o encomendo figurehfigura= figure (‘propriedades’);
– Usando uma função gráfica do Matlab : todas as funções de plotagem podem gerar uma figura : plot, plot3, surf...
72
hfig1=figure('units', 'normal','position',[0.01 0.05 0.8 0.8]);hfig2=figure('units','normal','position',[0.012 0.08 0.5 0.5],'color',[1 1 0]);
Posicionar a janela• figure ( ‘unit’,’normal’,’position’,[Xbaixo Ybaixo CompX CompY] )
73
Pixel (padrão)
Inches
Centimeters
Points
Normal
Tela do computador
Figura
Ybaixo
Xbaixo
CompY
CompX
Propriedades uteis
visible on / off Gerencia a visibilidade do objeto
Color Cor do fundo da figura
Name Nome da janela
Numbertitle on / off Exibição ou não do numero no titulo da janela
Pointer Aspecto do cursor
Figura
Botão Eixos Menus
Superficies Imagens Linhas SubmenusTextos
74
clf : cancela o conteúdo de uma figura
close (handle_da_figura_para_fechar ) : fechar uma figura
Eixos• Criar um novo sistema de eixos
handle= axes ;• Posicionar o sistema de eixos
set (handle,’units’,’normal’,’position’,[Xbaixo Ybaixo CompX CompY])
75
OBS : não fazer confusão entre a instrução axes e axis
Pixel (padrão)
Inches
Centimeters
Points
Normal
Janela da figura
Sistema de Eixos
Ybaixo
Xbaixo
CompY
CompX
Propriedades dos eixos
xlim, ylim, zlim Definir os limites dos eixos
fontname, fontsize Características de policia
xscale, yscale, zscale
( ‘lin’ / ‘log’ )
Tipo de escala
xtick, ystick, zstick Posição das graduações
Figura
Botão Eixos Menus
Superficies Imagens Linhas SubmenusTextos
76
cla : cancela o conteúdo do sistema de eixos
Criar uma interface
• Escrevendo o programa– Figura– Eixos– Imagens– Edit text, static text– Buttons
• Push buttons• Radio buttons• Check box
– Callbacks...
77
h_objeto_grafico= uicontrol(h_figura,’units’,’normal’,’position’,[...],’style’,’text’,’text’,’nome_objeto’,’enable’,’on /off’,’value’,[.],’backgroundcolor’,[...],’callback’,’função_X(ind)’);
Criar uma interface
• Usando GUIDE
78
Referências
• Curso do Professor Aurelien Saulot : INSA de Lyon, Bases Informatiques pour l’Ingénieur, (B2I)3ème Année Génie Mécanique et Dévelopement
• Ajuda e demos de Matlab 7.1• Algumas imagens de projetos realizados com Cécile
Lasfargues (diferencias finitas) et Benoît Trollé (tribologia) (slide 2)
79