Curso MATLAB 6 Especiais

41
Curso MATLAB 6 Instrutor: Marcelo Escobar Tópicos Especiais

description

Matlab

Transcript of Curso MATLAB 6 Especiais

Page 1: Curso MATLAB 6 Especiais

Curso MATLAB 6

Instrutor: Marcelo Escobar

Tópicos Especiais

Page 2: Curso MATLAB 6 Especiais

Tópicos Especiais:

Importação e Exportação de Dados.

Interfaces de Programação

Arquivos de áudio e vídeo.

Interfaces gráficas com o Usuário.

Page 3: Curso MATLAB 6 Especiais

Importação\Exportação de Dados e Informações:

.

Podemos exportar e importar dados através de um procedimentointerativo ou automático.

Normalmente quando criamos rotinas queremos automatizar a troca de dados entre aplicativos e programas.Em casos mais simples podemos apenas querer ler uma tabela em excel sem ter que digitar todos os dados em Matlab.

A seguir temos exemplos de que forma podemos fazer isso entre os aplicativos mais comuns e utilizados não só na troca de dados(importação e exportação) como na troca de informações (interface de programação).

Mais simples possível: FileImport Data no menu do Matlab

Page 4: Curso MATLAB 6 Especiais

Importação de Dados:

Arquivos de Texto:

>>help dlmread [lê dados em arquivo de texto]Ex:>>dlmread(‘dados.txt’, ‘,’) Dados.txt 1, 2 ,3

Excel:

>>help xlsread [lê dados em planilha de excel]

Arquivos .mat ou tipo Ascii:

>>load nome_do_arquivo

>>save nome_do_arquivo [ salva em arquivo tipo mat]

Page 5: Curso MATLAB 6 Especiais

Importação de Dados:

Podemos querer abrir um arquivo de texto e escrever nele dados de saída da nosso programa:

>> help fopen [abri ou cria um arquivo novo] retorna um fid [identificador do arquivo]

>>fid=fopen(‘resultados.txt’,’w’) permissão

Tipos de Permissão: 'r' [leitura] 'w' [escrita (criação se necessário)] >>help fclose [fecha o arquivo]>>fclose(fid)

Escrita: >>help printf [escreve dados formatados]

Page 6: Curso MATLAB 6 Especiais

Importação de Dados:Devemos escrever o texto e indicar com % a posição do número e inserir a formatação.%a.bc: a= número de espaços, b=numero de dígitos.c=Formatos: d, i, o, u, x, X, f, e, E, g, G, c, sf-real.e-notação cientificaApós o formato podemos inserir: \n \t [ nova linha, tab]

Exemplo 1: x=[ 1 2 3] >>fprintf(fid,’o valor de x é:=%5.4f/n) O valor de x e:1.00002.00003.0000

Exemplo 2:x = 0:.1:1; y = [x; exp(x)];fid = fopen('exp.txt','w');fprintf(fid,'%6.2f %12.8f\n',y); fclose(fid);

>>help scanf [ lê dado de um arquivo]

Page 7: Curso MATLAB 6 Especiais

Importação/Exportação de Dados:

Via Troca Dinâmica de Ddados [DDE] e ActiveX.

>>help winfun

1) DDE:

Canal=ddeinit(‘excel’, ‘nome_do_arquivo.xls’) [inicio de comunicação]

M = ddereq(canal, 'r1c1:r2c2'); [ importação]N=ddepoke(canal,'r1c1:r5c5', eye(5)); [exportação]

rc=ddeterm(canal) [ fim de comunicação]

Page 8: Curso MATLAB 6 Especiais

Active X:Exemplo Excel

2) Active X:

Excel = actxserver('Excel.Application'); [ inicio]set(Excel, 'Visible', 1); [abrindo excel]Workbooks = Excel.Workbooks; [inserido planilhas]

Para arquivo novo:Workbook = invoke(Workbooks, 'Add'); Para arquivo existente:fid=invoke(Workbooks,'Open','myfile.xls');

Ativação da Planilha 2 por exemplo:Sheets = Excel.ActiveWorkBook.Sheets;sheet2 = get(Sheets, 'Item', 2);invoke(sheet2, 'Activate');

Page 9: Curso MATLAB 6 Especiais

Active X:Exemplo Excel

Pegando o handle da planilha ativa:Activesheet = Excel.Activesheet;

Dado que desejamos enviar: [ importação]A = [1 2; 3 4];

Definindo o Range:ActivesheetRange =

get(Activesheet,'Range','A1','B2');set(ActivesheetRange, 'Value', A); [ inserindo o valor

A]

Salvando e Fechando o Excel:

invoke(Workbook, 'SaveAs', 'myfile.xls');invoke(Excel, 'Quit');

Obs: podemos usar get para importar do excel de maneira similar.

Page 10: Curso MATLAB 6 Especiais

Active X:Exemplo Word:

Active X:WordWrd=actxserver(‘Word.Application’);Wrd.Visible=1; [torna o Word visível]Para arquivo novo:Doc=invoke(wrd.Documents,’Add’);Para arquivo existente:Doc=invoke(wrd.Documents,’Open’,’myfile.doc’);Inserir parágrafo:Invoke(Doc.Content,’InsertParagraphAfter’);Inserir Texto:Invoke(Doc.Content,’InsertAfter’,’Meu texto aqui’);Invoke(Doc.Content,’InsertParagraphAfter’);Capturar fugura 1 atual:print('-dmeta','-f1');Invoke(Doc.Content,'Collapse',0);Colar no documento:Invoke(Doc.Content,'PasteSpecial',0,0,1,0,3);

Page 11: Curso MATLAB 6 Especiais

Active X:Exemplo Word:

Salvando:Invoke(Doc,’SaveAs’, ‘name’,1);

Fechando o Documento:Invoke(Doc,’Close’);

Terminando Contato:Invoke(wrd,’Quit’);Delete(wrd);

Obs: O comando invoke(nome da application) , permite acesso a suas propriedades.

Page 12: Curso MATLAB 6 Especiais

Excel Link:

Quando o Matlab é instalado, ele cria uma pasta de nome toolbox, dentro dessa pasta tem uma sub pasta de nome exlink.O Arquivo excllink.xla permite troca de dados interativos entre o Matlab e o excel.

O arquivo vem com macros que são acionadas por botões na barra de ferramentas:

macros

Page 13: Curso MATLAB 6 Especiais

Excel Link:

Putmatrix [exporta do Matlab] Basta selecionar os dados a serem enviados, clicar

em putmatrix e definir o nome da variável a ser criada no Matlab.

Getmatrix[importa para o matlab] Basta selecionar a célula superior esquerda onde será

colado o dado do matlab clicar em getmatrix e definir o nome da variável putmatrix e definir o nome da variável do Matlab.

Page 14: Curso MATLAB 6 Especiais

Matlab Notebook:

Permite a execução de comandos digitados no word, uma ferramenta bem útil para relatórios.

Para utilizar o Matlab notebook é necessário realizar um setup:

Digite: >>notebbok –setup O Matlab pede a versão do seu Word e em seguida

pede dois arquivos por meio de uma caixa de dialogo, um executável e outro .dot (normal.dot por exemplo).Esses arquivos se encontram dentro do diretório em o que o Office se encontra instalado.

Esse procedimento só precisa ser realizado uma vez.Daí em diante basta digitar >>notebook que uma arquivo de word é aberto com macros na barra de ferramentas.

Page 15: Curso MATLAB 6 Especiais

Matlab Notebook:

Escreva seu texto normalmente , selecione o texto com o comando do Matlab que deseja executar,exatamente como faria em ambiente Matlab.

Define Input Cell [define como entrada]

Evaluate M-book [executa em Matlab os input cell definidos}

Page 16: Curso MATLAB 6 Especiais

Compilação de Funções:

O Matlab permite a compilação de um arquivo m em C, o que podereduzir o tempo de computação em até 40%.Exemplo:>>mcc –x teste_mcc [teste_mcc.m é um arquivo tipo m]

A chamada é feita normalmente, e não é necessário que o arquivo m permaneça no diretório.>>Mcc –m teste_mcc [cria um executável]

Page 17: Curso MATLAB 6 Especiais

MEX Files:

Funções e sub-rotinas em C ou em Fortran podem ser chamadas peloMatlab por meio de arquivos MEX.O Matlab também pode executar Cálculos para programas em C ou em Fortran por meio do MatlabEngine. Estrutura do mex file:

•A rotina computacional que contém a parte do código que implementa as operações desejadas no MEX-file. [subrotina em C ou em Fortran]

.A rotina de ligação que faz o interfaceamento entre a rotina computacional com o MATLAB através do ponto de entrada da função mexFunction e seus parâmetros prhs, nrhs, plhs, nlhs, onde prhs é um array com os argumentos de entrada da direita, nhrs é o número de argumentos de entrada da direita, plhs é um array com os argumentos de saída da esquerda e nlhs é o número de argumentos de saída da esquerda. [Modificação da subrotina]

Será mostrado um exmplo em C. Para mais exemplos e para Fortran,visite o site:

http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/

Page 18: Curso MATLAB 6 Especiais

MEX Files para C e C++:

Page 19: Curso MATLAB 6 Especiais

MEX Files para C e C++:Exemplo: No editor do Matlab#include "mex.h"/* A rotina de cálculos */void timestwo(double *y, double x){ *y = 2.0*x; }/* A rotina de ligação */void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){ double *y; double x; plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL); /* Cria matrix 1x1 */ x = mxGetScalar(prhs[0]); /* Obtém o valor escalar e coloca em x */ /* A função mxGetScalar retorna um valor, não um apontador */ y = mxGetPr(plhs[0]); /* Referencia o apontador para y */ timestwo(y,x); } /* Chama a função de cálculo */ Salvar como: timestwo.c>>mex timestwo.c [cria o arquivo mex]>>timestwo(4)>>8

Page 20: Curso MATLAB 6 Especiais

Arquivos de Som :

Som:

O Matlab permite a leitura de arquivos de som no formato .wav e .au :

>>help auread [armazena o som tipo .au em um vetor]

>>help wavread [armazena o som tipo .wav em um vetor]

A leitura cria um vetor no qual o som fica armazenado, para executar é necessário usar o comando sound:

>>help sound

O arquivo handel é um arquivo de amostra do Matlab que contém um som armazenado na forma de um vetor:

Ex:>>load handel >>sound(y,Fs)

Page 21: Curso MATLAB 6 Especiais

Arquivos de Imagens:

Imagem:

O Matlab permite a exibição de imagens:

>>help imread [armazena a imagem em uma matriz]

>>image [ exibe a imagem em uma janela padrão]

Ex:

>>A=imread(‘foto’,’jpg’)

>>image(A)

>>axis image off [não exibe os eixos, apenas a figura]

Page 22: Curso MATLAB 6 Especiais

Handle:

Como já dito anteriormente cada objeto possui o seu identificador.

h-identificador.

>>set(h, ‘propriedade1’,valor1) [seta o valor da propriedade no valor1]

>>get(h, ‘propriedade1’) [ fornece o valor da propriedade]

>>h=plot(x,y) [ retorna o handle do gráfico]

>>gca [ retorna o handle do eixo atual]

>>gcf [ retorna o handle da figura atual]

>>gco [ retorna o handle do objeto atual]

>>get(gca,’title’) [ retorna o handle do titulo no eixo atual]

>>get(gca, ‘xlabel’) [ retorna o handle do texto na abscissa atual]

Usando set podemos editar o tipo da fonte , o tamanho da fonte, a cor, o estilo de linha do gráfico, espessura,...basta usar o handle correto.

Page 23: Curso MATLAB 6 Especiais

Propriedades:

Se não editarmos,ao criar uma janela, o matlab usa o padrão de configuração.Uma propriedade que é muito comum se quere alterar é o tamanho e posição de exibição da janela ou caixa de mensagem.

A propriedade position é que pode alterar isso , a posição esta relacionada com as unidades utilizadas para medição, units:

>>figure

>>get(gcf,’position’) [ retorno da posição atual]

>>get(gcf,’units’) [ retorno da unidade usada para medição]

Vetor posição= [ esquerda base largura altura] [1 2 3 4]

>>get(0) nos fornece as propriedades padrão do Matlab.

1

3 2

4

Page 24: Curso MATLAB 6 Especiais

Caixas de Diálogo:>>help uigetfile [ janela para selecionar arquivo]

>>help uiputfile [ janela para salvar arquivo]

>>help fileparts [propriedades de arquivo selecionado]

>>help uisetcolor [ seleção de cor]

>>help uisetfont [ seleção de fonte]

>>help warndlg [ caixa de mensagem de warning]

>>help errordlg [ caixa de mensagem de erro]

>>help helpdlg [ caixa de mensagem de help]

>>help questdlg [caixa de pergunta-menu: sim ou não]

>>help inputdlg [ caixa para entrada de dados]

>>help listdlg [ caixa para seleção em lista]

>>help menu [ caixa com menu de opções]

Page 25: Curso MATLAB 6 Especiais

Caixas de Diálogo:

Todos esses comando são fáceis de usar, alguns exemplos será mostrado a seguir:

>>h=warndlg(‘ Veja os resultados na tela’,’titulo’)

Lembrando, h é o handle, podemos editar todas as propriedades, como tamanho, tipo de fonte ,etc...

Os comandos errordlg, helpdlg,msbox, funiconam de maneira similar.

>>s=questdlg(‘ Deseja sair?’,’titulo’,’sim’,’não’)

A seleção é retornada como um string em s.

Page 26: Curso MATLAB 6 Especiais

Caixas de Diálogo:

Menu:

>>k=menu(‘titulo’, ‘opcao1’, opcao2’,’opcao3’)

A seleção de um dos botões retorna k=1 se o botão 1 for selecionado,

K=2, se o botão 2 for selecionado e assim sucessivamente.

Inputdlg:

>>k=inputdlg({‘ Altura:’, ‘Comprimento:’},’titulo’)

O retorno e feito em uma célula. K{1} valor dado para a altura e K{2} valor dado para a o comprimento.

Para realizar cálculos , necessitamos converter para números.

K1=k{1}; k1=char(k1); k1=str2num(k1)

H=k1;

Page 27: Curso MATLAB 6 Especiais

Uicontrols :

>>help uicontrol

O uicontrol permite a criação de uma janela com botões:

>>h=uicontrol

>>get(h) [ propriedades]

>>set(h)

Propriedade Style: {pushbutton | togglebutton | radiobutton | checkbox | edit | text | slider | frame | listbox | popupmenu }

Propriedade Position: Posição na janela.

Propriedade String: Texto escrito no botão.

Propriedade BackGroundColor: Cor de fundo

Page 28: Curso MATLAB 6 Especiais

Uicontrols :

Exemplo:

pushbutton :

>>h=uicontrol(‘style’,’pushbutton’,‘string’,’executar’)

Pushbuttons servem para executar algum arquivo do matlab.Para editar a chamada do arquivo, devemos inserir o nome do arquivo na propriedade Callback.

Set(‘h’,’Callback’,’nome do arquivo’)

Assim quando acionarmos o botão ele executa o arquivo contido no seu callback.

Page 29: Curso MATLAB 6 Especiais

Uicontrols :

Exemplo:

edit :

>>h=uicontrol(‘style’,’edit’)

Edit serve para entrar algum dado na própria janela, ou para retornar saídas. O valor pode ser inserido no edit, usando set:

>>set(h,’string’,2) coloca o valor 2 no edit

>>a=get(h,’string’) retorna o valor contido como um caracter.

Devemos converter para numero se quisermos efetuar cálculos.

>>a=str2num(a) [ conversão para numero]

Page 30: Curso MATLAB 6 Especiais

Uicontrols :

Exemplo:

text :

>>h=uicontrol(‘style’,’text’)

Text serve para escrever textos na janela.

>>set(h,’string’,’ Meu texto’)

As propriedades mais importantes são as de formatação, como tamanho da fonte, cor etc... Que podem ser setadas com set.

Page 31: Curso MATLAB 6 Especiais

Uicontrols :

Exemplo:

checkbox :

>>h=uicontrol(‘style’,’ checkbox’)

Checkbox serve para selecionar alguma opção.

Se o checkbox estiver acionado, é retornado o valor 1 na propriedade Value, e 0 caso não esteja selecionado.

Page 32: Curso MATLAB 6 Especiais

Uicontrols :

Exemplo:

axes :

>>axes(‘position’, [ ])

Serve para colocar um eixo na janela para plotagem.

Assim podemos plotar na própria janela.

No caso de termos, mais de um eixo na mesma janela, é necessário criar o eixo e plotar em seguida sobre ele.

Se no inicio já temos eixos vazios basta obter a posição deles através do handle e sobrepor novos com o gráfico.

Page 33: Curso MATLAB 6 Especiais

Exemplo Uicontrols :

Calculadora:

Page 34: Curso MATLAB 6 Especiais

Exemplo Uicontrols :

Calculadora.m:

%Construcao do Formato:

esp=0.2; A=2; B=6; d=[];

%Titulo:

ht=uicontrol('style','text','units','centi','position', [A B+2 4.6 1],'string','CALCULADORA');

%Visor:

hs=uicontrol('style','edit','units','centi','position',[A+5 ,B-5, 4 , 1],'string',d);

%Botao desliga:

ho=uicontrol('units','centi','position',[A ,B-5, 1 , 1],'string','OFF','callback','close all');

%Visor de Memoria:

hm=uicontrol('style','text','units','centi','position', [A+1.2 B-5 2 1],'string','MEMORY');

Page 35: Curso MATLAB 6 Especiais

Exemplo Uicontrols :

Calculadora.m:

%Construcao dos botões:

for i=1:4

for j=1:8

s={'1' '2' '3' '+' 'Raiz' 'Rd' 'SM' ','; '4' '5' '6' '-' 'Log' 'Exp' 'GM' ';';....

'7' '8' '9' '*' 'SEN' 'TAN' '[' '('; 'clear' '0' '=' '/' 'COS' '.' ']' ')'};

h(i,j)=uicontrol('units','centi','position',[ A+(j-1)*1.2 ,B-(i-1)*1.2,1,1]...

,'string',s(i,j),'fontsize' ,10);

end

end

Page 36: Curso MATLAB 6 Especiais

Exemplo Uicontrols :

%Chamada dos botões:

set(h(1,1),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(1,1))]);' );

set(h(1,2),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(1,2))]);' );

set(h(1,3),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(1,3))]);' );

set(h(1,4),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(1,4))]);' );

set(h(2,1),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(2,1))]);' );

set(h(2,2),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(2,2))]);' );

set(h(2,3),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(2,3))]);' );

set(h(2,4),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(2,4))]);' );

set(h(3,1),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(3,1))]);' );

set(h(3,2),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(3,2))]);' );

set(h(3,3),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(3,3))]);' );

set(h(3,4),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(3,4))]);' );

set(h(4,1),'callback', 'set(hs,''string'',d);set(hm,''string'',d);');

set(h(4,2),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(4,2))]);' );

set(h(4,3),'callback', 'm=get(hs,''string'');n=eval(m);set(hs,''string'',n);');

set(h(4,4),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(4,4))]);' );

Page 37: Curso MATLAB 6 Especiais

Exemplo Uicontrols :%Chamada dos botões cont

set(h(1,5),'callback', 'm=get(hs,''string'');set(hs,''string'',sqrt(str2num(m)));' );

set(h(2,5),'callback', 'm=get(hs,''string'');set(hs,''string'',log10(str2num(m)));' );

set(h(3,5),'callback', 'm=get(hs,''string'');set(hs,''string'',sin(str2num(m)));' );

set(h(4,5),'callback', 'm=get(hs,''string'');set(hs,''string'',cos(str2num(m)));' );

set(h(1,6),'callback', 'm=get(hs,''string'');set(hs,''string'',roun(str2num(m)));' );

set(h(2,6),'callback', 'm=get(hs,''string'');set(hs,''string'',exp(str2num(m)));' );

set(h(3,6),'callback', 'm=get(hs,''string'');set(hs,''string'',tan(str2num(m)));' );

set(h(4,6),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(4,6))]);','fontsize',20 );

set(h(1,7),'callback', 'set(hm,''string'',get(hs,''string''));set(hs,''string'',d);' );

set(h(2,7),'callback', 'm=get(hm,''string'');n=get(hs,''string''); set(hs,''string'',[ n m]);' );

set(h(3,7),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(3,7))]);');

set(h(4,7),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(4,7))]);');

set(h(1,8),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(1,8))]);');

set(h(2,8),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(2,8))]);');

set(h(3,8),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(3,8))]);');

set(h(4,8),'callback', 'm=get(hs,''string'');set(hs,''string'',[char(m) char(s(4,8))]);');:

Page 38: Curso MATLAB 6 Especiais

GUI:

Como vimos anteriormente , é necessário a edição de diversasPropriedades para a criação de uma janela interativa.O Matlab possui um aplicativo que facilita a criação de interfaces.

>>guide [ acesso ao GUI]

Um arraste permite a inserção de uicontrols.

Page 39: Curso MATLAB 6 Especiais

GUI:

Um duplo clique sobre o uicontrol nos fornece um acesso às suas propriedades e facilmente podemos editar.

Page 40: Curso MATLAB 6 Especiais

GUI:

Ao salvar o arquivo, ele cria um arquivo m com chamadas para os botões.Se não soubermos qual chamada representa o botão, basta dar um clique Com o botão direito do mouse e selecionar editar Callback, aí é só inserir o nome do programa que ele vai executar

A interface é salva como um arquivo .fig com um arquivo .m correspondente

>>minha_interface [ chama a interface criada]

Page 41: Curso MATLAB 6 Especiais

GUI:

>>nome_do_arquivo

Exemplos: Diretório do CD-ROM Rotinas\Especiais