Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
APRESENTAO
O Matlab um software criado pela Mathworks em 1984 destinado anlise e modelagem de sistemas e algoritmos. Devido sua praticidade, essa poderosa ferramenta computacional vem sendo utilizada tanto em universidades quanto em empresas do mundo todo. Em relao a uma linguagem de programao tradicional (como C/C++ ou Fortran), o desenvolvimento de algoritmos no ambiente Matlab sem dvida mais fcil e rpido. A desvantagem que utilizando uma linguagem de programao tradicional possvel desenvolver algoritmos mais eficientes. O objetivo deste curso fornecer a base necessria para desenvolver programas no ambiente Matlab. Devido grande quantidade de funes disponibilizadas pelo Matlab, impossvel aprender todo o seu contedo em um nico curso. Entretanto, o aluno ser capaz de entender como o Matlab funciona e descobrir quais funes so teis para as suas aplicaes.
1 Introduo ao Matlab
O Matlab (Matrix Laboratory) pode ser definido como um ambiente de computao numrica baseado em matrizes. Dentre as suas principais caractersticas, destacam-se: grficos e visualizao de dados; linguagem de programao de alto nvel; toolboxes, que oferecem funcionalidades especficas por rea de aplicao.
Como exemplos de toolboxes, podem-se citar: Optimization, Statistics, Financial; Fuzzy Logic, Neural Networks, Control System; Signal Processing, System Identification.
A estrutura de diretrios do Matlab a seguinte: diretrio base: c:\matlab; executveis: c:\matlab\bin; diretrio de trabalho: c:\Matlab\work.
>> ver -------------------------------------------------MATLAB Version 6.0.0.88 (R12) on PCWIN MATLAB License Number: 0 -------------------------------------------------MATLAB Toolbox Simulink Stateflow Stateflow Coder Communications Blockset Communications Toolbox Control System Toolbox DSP Blockset Filter Design Toolbox Fixed-Point Blockset Image Processing Toolbox MATLAB Compiler Model Predictive Control Toolbox Nonlinear Control Design Blockset Optimization Toolbox Partial Differential Equation Toolbox Robust Control Toolbox Signal Processing Toolbox Simulink Accelerator Model Differencing for Simulink and... Simulink Model Coverage Tool Simulink Report Generator Statistics Toolbox Symbolic Math Toolbox System Identification Toolbox Wavelet Toolbox b) Janelas A verso Matlab para ambiente Windows apresenta as seguintes janelas: Version 6.0 (R12) Version 4.0 (R12) Version 4.0 (R12) Version 4.0 (R12) Version 2.0 (R12) Version 2.0 (R12) Version 5.0 (R12) Version 4.0 (R12) Version 2.0 (R12) Version 3.0 (R12) Version 2.2.2 (R12) Version 2.1 (R12) Version 1.0.5 (R12) Version 1.1.4 (R12) Version 2.1 (R12) Version 1.0.3 (R12) Version 2.0.7 (R12) Version 5.0 (R12) Version 1.0 (R12) Version 1.0 (R12) Version 1.0 (R12) Version 1.1 (R12) Version 3.0 (R12) Version 2.1.2 (R12) Version 5.0 (R12) Version 2.0 (R12) 06-Oct-2000 16-Jun-2000 04-Oct-2000 04-Oct-2000 01-Sep-2000 01-Sep-2000 01-Sep-2000 01-Sep-2000 01-Aug-2000 26-May-2000 10-Mar-2000 26-Jul-2000 10-May-2000 12-Jun-2000 07-Jun-2000 31-Dec-1999 10-May-2000 16-Jun-2000 01-Jun-2000 01-Mar-2000 19-Jul-2000 02-Jun-2000 01-Apr-2000 01-Sep-2000 11-Sep-2000 27-Aug-2000 16-Jun-2000
Command Window: ambiente de trabalho; Launch Pad: apresenta informaes, textos explicativos e exemplos dos produtos instalados;
Workspace: apresenta as variveis do ambiente de trabalho; Command History: histrico das instrues j executadas.
c) Menus O Matlab tambm possui uma srie de menus: File, Edit, View, Web, Window e Help. Os mais importantes sero vistos ao longo do curso. Alguns menus so bastante utilizados: File: manipulao de arquivos; o File/Set Path: configura a lista de diretrios de busca (equivalente ao comando pathtool); o File/Preferences: configura parmetros do ambiente Matlab (equivalente ao comando preferences); Edit: recursos de edio; View: configurao de visualizao da tela do Matlab; Web: aciona web browser; Window: fecha janelas de figuras (grficos); Help: aciona textos de ajuda.
d) Barra de ferramentas A primeira parte da barra de ferramentas do Matlab segue o padro Windows. As demais opes so prprias do Matlab: New M-File, Open, Cut, Copy, Paste, Undo e Redo; Simulink: abre um modelo do Simulink; Current Directory: apresenta o diretrio de trabalho corrente; Browse for folder: busca um novo diretrio de trabalho.
O Matlab possui algumas funes do sistema operacional, apresentados na tabela abaixo. Tabela 1.1: Comandos do sistema operacional Comando cd ou pwd dir ou ls what which ! Funo Informa ou altera diretrio Lista contedo do diretrio exibe arquivos Matlab salvos no diretrio Identifica e localiza arquivo Chama comando do sistema operacional Exemplo cd dir what which cos !del arquivo.m
2.2 Matrizes
Para o Matlab, qualquer valor numrico interpretado como uma matriz. Uma matriz definida da seguinte forma:
valores numricos so definidos entre colchetes ([...]); elementos de uma linha so separados por , ou por espao em branco; final de uma linha informado por ;.
Alguns exemplos Tabela 2.2: Tipos de matrizes tipo de matriz >> 2 escalar ans = 2 >> [1 2 3] vetor linha ( 1 n ) ans = 1 ans = vetor coluna ( n 1) 1 2 3 >> [1 2 3;4 5 6;7 8 9] ans = matriz bidimensional ( m n ) 1 4 7 matriz de dimenso n1 n2 " nm 2 5 8 3 6 9 2 3 >> [1;2;3] exemplo
mostrado adiante
2.3 Variveis
Para criar uma varivel no Matlab deve-se seguir algumas regras. Assim, o nome de uma varivel Matlab deve ser alfanumrico e iniciado por uma letra. case-sensitive; pode conter o caractere _;
pode possuir no mximo 32 caracteres; no pode ser uma palavra reservada, como for ou while.
As variveis criadas no Matlab ficam registradas na regio Workspace (ver Captulo 1). A Tabela 2.3 apresenta alguns comandos para manipular essas variveis. Tabela 2.3: Comandos para manipulao de variveis comando who whos clear descrio lista nomes das variveis do Workspace lista os nomes e tipos das variveis do Workspace elimina variveis do Workspace
>> a = 1; >> b = [1 2; 3 4]; >> texto = 'matlab'; >> who Your variables are: a b Name a b texto >> clear b; >> whos Name a texto >> who Your variables are: a texto Size 1x1 1x6 Bytes Class 8 double array 12 char array texto Size 1x1 2x2 1x6 Bytes Class 8 double array 32 double array 12 char array >> whos
3. Manipulao de Matrizes
Como mencionado no Captulo 2, uma matriz definida da seguinte forma: valores numricos so definidos entre colchetes ([...]); elementos de uma linha so separados por , ou por espao em branco; final de uma linha informado por ;.
b) Acrescendo valores em uma matriz: possvel acrescentar apenas um valor em uma matriz; os demais novos componentes so considerados iguais a zero: >> m(1,6) = 666 m= -2.8000 0.3894 1.4142 2.0138 1.1250 1.0000 0 666.0000 0 0 4.0000 100.0000
c) Criao de vetores linearmente espaados: atravs do smbolo :. Veja o exemplo abaixo, no qual x um vetor que varia entre 1 e 5 com incremento 1 (valor padro). >> x = 1:5 x= 1 2 3 4 5 Se o incremento for diferente de 1, o seu valor deve ser includo na instruo. Veja o exemplo a seguir, no qual o incremento do vetor x 0,5 e o do vetor y 0,5 . > x = 1:0.5:5 x= 1.0000 y= 5.0000 4.5000 4.0000 3.5000 3.0000 2.5000 2.0000 1.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 >> y = 5:-0.5:1
10
d) Principais instrues relacionadas com matrizes. Tabela 3.1: Comandos para criao de matrizes elementares funo descrio >> eye(3) eye cria matriz identidade ans = 1 0 0 cria matriz com todos os zeros elementos nulos ans = 0 0 cria matriz com todos os elementos iguais a um ans = 1 1 cria matriz com nmeros pseudorand randmicos com distribuio uniforme entre 0 e 1 ans = 0.9501 0.2311 0.6068 0.4860 0.8913 0.7621 1 1 1 1 0 0 0 0 0 1 0 0 0 1 Exemplo
>> zeros(2,3)
>> rand(2,3)
e) Concatenao de matrizes: criao de matrizes a partir de outras matrizes: >> A = [1 2 3]; >> B = [4 5 6]; >> C = [A B] C= 1 2 3 4 >> D = [A ; B] D= 1 2 3 4 5 6 >> E = [A' B'] E= 1 4 2 5 3 6
11
transposta
1 3 A'= 2 4
12
Nesse caso, utiliza-se diretamente a operao matricial Y = A * X : >> A = [-1 1 2 ; 3 -1 1; -1 3 4] A= -1 3 -1 Y= 2 6 4 b) Qual o valor de X se Y = [ 0 2 1] ?
T
1 -1 3
2 1 4
>> Y = A*[1 ; -1 ; 2]
Nesse caso, pode-se deduzir que X=A -1Y . No Matlab, esse operao equivalente a X=A\Y (diviso esquerda, ver tabela 3.2). >> Y = [0 ; 2 ; 1]; >> X = A\Y X= 0.7000 0.3000 0.2000 Exemplo 2: Utilizando o Matlab, plote a funo y = x 2 + 2 x 3 , para 5 x 5 . Note que nesse caso deve-se utilizar a operao de potncia escalar, e no a matricial, pois para cada elemento de x deve-se calcular um valor de y. Veja como fica o cdigo Matlab: >> x=[-5:0.1:5]; >> y = x.^2 + 2*x -3; >> plot(x,y)
13
35
30
25
20
15
10
-5 -5
-4
-3
-2
-1
14
Tal propriedade facilita bastante o desenvolvimento de programas. Por exemplo, se for desejado plotar o seno de x, para x variando entre 0 e 2 . No Matlab, o cdigo seria o seguinte: >> x = 0:0.1:2*pi; >> plot(x,sin(x)); Em uma linguagem de programao sem bulk processing, o cdigo seria algo desse tipo: inc = 0.1 xi = 0 i=1 while xi <= 6.28 x(i) = xi yi = sin(xi) xi = xi + inc end plot(x,y) O grfico fornecido pelo Matlab mostrado na figura abaixo.
1 0.8 0.6 0.4 0.2
15
>> M = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12] M= 1 5 9 2 6 10 3 7 11 4 8 12
a) Indexao de apenas um elemento. Se apenas um elemento for desejado, deve-se informar a posio que tal elemento ocupa na matriz (linha e coluna). >> a = M(3,2) a= 10 No Matlab, os elementos tambm so indexados seqencialmente. Essa indexao segue por linha e depois por coluna. Assim, a matriz anterior indexada da seguinte forma: 1( elem. 1) 2( elem. 4) 3( elem. 7 ) 4( elem. 10) elem. 2) elem. 5 ) elem. 8) elem. 11) M = 5( 6( 7( 8( . ( elem. 3) ( elem. 6 ) ( elem. 9 ) ( elem. 12 ) 9 10 11 12 >> b = M(6) b= 10 >> c = M(10) c= 4 b) Indexao de mais de um elemento. Se for desejado indexar uma faixa de elementos de uma matriz, pode-se utilizar o smbolo :. Dessa forma, cria-se submatrizes. Por exemplo, considere que se deseja criar uma matriz Z = [ 6 7 8] . Nesse caso, a matriz Z deve receber os elementos da 2a linha de M, comeando da coluna 2 at a coluna 4. Veja o exemplo: >> Z = M(2,2:4) Z= 6 7 8
16
A mesma operao pode ser realizada com a ajuda de um end, que representa o final de um intervalo. Por exemplo: >> Z = M(2,2:end) Z= 6 7 8
c) Indexao de uma linha ou coluna completa. Outra ferramenta til consiste em utilizar : sem nmeros. Nesse caso, : representa todos os nmeros de uma linha ou coluna. Por exemplo, se for desejado criar uma matriz Y formada pela primeira coluna de M. Nesse caso, define-se: >> Y = M(:,1) Y= 1 5 9
17
>> x = [1 2 3 4 5 6 7 8 9 0]; reshape(x,n,m) cria matriz de dimenso n m a partir da matriz x >> reshape(x,2,5) ans = 1 2 3 4 5 6 7 8 9 0
18
Cadeias de caracteres so dados tipo texto, formados por cadeias de caracteres ASCII (American Standard Code for Information Interchange). Cada caractere ocupa dois bytes de memria. No Matlab, uma string definida entre . Veja o exemplo. >> texto1 = 'Curso' texto1 = Curso Atravs do comando whos pode-se verificar as informaes acerca da varivel texto1. Ela um vetor de dimenso 1 5 , do tipo char array, que ocupa 10 bytes de memria. >> whos texto1 Name texto1 Size 1x5 Bytes Class 10 char array
Grand total is 5 elements using 10 bytes Internamente, os caracteres so armazenados atravs dos respectivos cdigos ASCII. Para obter a string em formato numrico, pode-se utilizar a funo double: >> double(texto1) ans = 67 117 114 115 111 A operao inversa que transforma um cdigo ASCII em uma string efetuada pela funo char: >> a = [84 101 120 116 111]; >> char(a) ans = Texto A indexao de uma string idntica a de uma matriz. Veja o exemplo. >> a = texto1(1:3) a= Cur Da mesma forma, pode-se realizar a concatenao de strings: >> texto2 = ' de Matlab'; >> textototal = [texto1 texto2] textototal = Curso de Matlab
19
b) Clulas (cell arrays) Uma clula um tipo de varivel que permite armazenar matrizes de naturezas diferentes (escalares, vetores, matrizes, strings) em uma nica estrutura. Para criar uma clula, utiliza-se a funo cell. Clulas utilizam {} ao invs de []. Veja o exemplo abaixo, de uma clula de dimenso 2 2 . >> celula = cell(2) celula = [] [] [] []
>> celula{1,1} = eye(2); >> celula{1,2} = 'matriz identidade 2x2'; >> celula{2,1} = 2; >> celula{2,2} = [1 2 3] celula = [2x2 double] [1x21 char ] [ Name celula 2] [1x3 double] Size 2x2 Bytes Class 474 cell array >> whos celula
Grand total is 33 elements using 474 bytes Costuma-se utilizar clulas em bancos de dados que mesclam elementos numricos e alfanumricos. Por exemplo, uma lista de alunos e suas respectivas matrculas. c) Estruturas (structs) um tipo de dado que permite o armazenamento de matrizes de naturezas diferentes (escalares, vetores, matrizes, strings) identificveis por nomes de campos. Para criar uma estrutura, utiliza-se a funo struct. Como exemplo, considere que se deseja criar uma estrutura para armazenar a Tabela 3.4. Tabela 3.4: Exemplo de tabela para ser utilizada em uma estrutura Aluno Joo Maria Jos Matrcula 001 002 003 Nota 1,0 10,0 7,0
20
>> s = struct('Aluno',{'Joao'},'Matricula',{001},'Nota',{1.0}) s= Aluno: 'Joao' Matricula: 1 Nota: 1 >> s(2).Aluno = 'Maria'; >> s(2).Matricula = 002; >> s(2).Nota = 10; >> s(3).Aluno = 'Jose'; >> s(3).Matricula = 003; >> s(3).Nota = 7; >> whos s Name s Size 1x3 Bytes Class 998 struct array
Grand total is 28 elements using 998 bytes Os contedos de uma estrutura so acessados da seguinte forma: >> s s= 1x3 struct array with fields: Aluno Matricula Nota >> s(1) ans = Aluno: 'Joao' Matricula: 1 Nota: 1 >> s(2) ans = Aluno: 'Maria' Matricula: 2 Nota: 10
21
4. Programao no Matlab
4.1 Editor de programas
Existe um ambiente prprio do Matlab para edio de programas. Para abri-lo, digita-se o comando edit. Tal editor apresenta algumas caractersticas interessantes: linhas numeradas, o que til principalmente para a localizao de erros de programao; o caractere % indica comentrio; o caractere ... indica que o comando continua na prxima linha. Tal recurso permite deixar o texto mais organizado; a cor atribuda pelo editor a um texto indica a sua classe. O padro de cores varia de acordo com a verso do Matlab.
22
Note que o script no apresenta parmetros de entrada nem de sada. Ele apenas realiza as operaes desejadas e utiliza variveis do workspace. Isso significa que todas as variveis de um script so salvas no workspace (digite comando whos). b) Funo Uma funo tambm realiza uma seqncia de comandos. Diferentemente de um script, uma funo possui parmetros de entrada e pode retornar parmetros de sada. Por exemplo, considere que se deseje criar um arquivo Matlab que calcule uma funo do segundo grau para valores variveis de a, b e c. Nesse caso, um script no serve; deve-se criar uma funo. Veja o exemplo. Exemplo: Funo denominada FuncaoEq2Grau.m. % Apresenta o grfico de uma equao do segundo grau function y = FuncaoEq2Grau(a,b,c) x = [-10:0.1:10]; y = x.^ 2 + b*x + c; plot(x,y); Para que a funo tenha os mesmos parmetros do script anterior, digita-se z = FuncaoEq2Grau(1,2,-3); Note que a nica varivel criada no workspace (digite comando whos) z. Todas as variveis utilizadas por uma funo so internas, o que significa que no so salvas no workspace (diferentemente do caso de um script0). Uma caracterstica interessante a possibilidade de criar um texto explicativo para uma funo, que apresentado ao se utilizar a funo help do Matlab. Esse texto deve ser escrito como comentrio (atravs de %) no incio do m-file.
23
>> A = 2; >> B = 4; >> A == B ans = 0 >> A < B ans = 1 >> A > B & A ~= B ans = 0 O Matlab tambm possui funes para teste de matrizes
24
Existem tambm as funes any e all. Veja o seu funcionamento no exemplo. >> A = [0 2 4 6 8]; >> isempty(A) ans = 0 >> any(A) ans = 1 >> all(A) ans = 0 >> all(A>=0) ans = 1
25
Exemplo: Criao de um vetor formado por 10 mltiplos de 3. for i = 1:10 v(i) = 3*i; end b) While O lao while permite que uma seqncia de comandos seja repetida enquanto uma certa condio for verdadeira. Apresenta a seguinte estrutura: while <expressao> comandos end Por exemplo, considere que se deseja determinar o maior valor de n tal que n ! < 10100 . Pode-se utilizar o seguinte cdigo. n = 1; while prod(1:n) < 1e100 n = n + 1; end c) If, elseif, else. O lao if, elseif, else estabelece diversos caminhos para a fluncia de um programa. A sua estrutura mostrada abaixo. if <expressao1> comandos elseif <expressao2> comandos . elseif <expressaon> comandos else comandos end Veja um exemplo de utilizao da estrutura. O valor da varivel b depende do valor da varivel a, que varia entre 0 e 10.
26
a = round(10*rand(1)); % a eh uma variavel com valor entre 0 e 10 if a > 5 b = 3*a; elseif a < 5 b = a/3; else b = a; end
O algoritmo implementado em Matlab pode ser o seguinte: % Triangularizacao % Passo 1. A=[3 2 0 1 ; 9 8 -3 4 ; -6 4 -8 0 ; 3 -8 3 -4]; Y=[3 ; 6 ; -16 ; 18]; n=length(A); for k=1:n-1 for i = k+1:n mik = -A(i,k)/A(k,k); A(i,:) = A(i,:) + mik*A(k,:); Y(i) = Y(i) + mik*Y(k); end end % Retrossubstituicao x(n)=Y(n)/A(n,n); for k = n-1:-1:1 x(k)=Y(k); for i = k+1:n x(k) = x(k) - A(k,i)*x(i); end x(k)=x(k)/A(k,k); end disp('Vetor x='); disp(x'); % Passo 4 % Passo 3.3 % Passo 2 % Passo 3 % Passo 3.1 % Passo 3.2 % Passo 3.2.1 % Passo 2 % Passo 2.1 % Passo 2.1.1 % Passos 2.1.2 e 2.1.2.1. % Passo 2.1.3
28
5. Grficos no Matlab
O Matlab possui sofisticados recursos para a visualizao de dados na forma grfica. Ele trabalha com objetos grficos, tais como linhas e superfcies. As propriedades de tais objetos podem ser controladas atravs das propriedades dos objetos. Entretanto, o Matlab disponibiliza diversas funes que facilitam a configuraes das propriedades de objetos. As principais funes com esse fim so vistas neste captulo.
29
Tabela 5.2: Funes relacionadas com grficos title text gtext xlabel ttulo texto em local especificado texto usando mouse nome do eixo x ylabel grid axis legend nome do eixo y desenha linhas de grade intervalo dos eixos legendas no grfico
30
5.5 Exemplos
a) Plotar a funo y = e x sen( x) , para 0 < x < 10 . % Exemplo a clear close all x = 0:0.1:10; y = exp(-x).*sin(x); plot(x,y,'r'); xlabel('Eixo X'); ylabel('Eixo Y'); axis([0 10 -0.1 0.4]); % insere texto em fonte times 16 gtext('\fontname{timesnewroman}\fontsize{16}ponto de maximo local'); b) Plotar as funes f1 ( x) = e x sen( x) e f 2 ( x) = sen( x) , para 0 < x < 10 , no mesmo grfico. % Exemplo b clear close all x = 0:0.1:10; y1 = exp(-x).*sin(x); y2 = exp(-x); y3 = sin(x); plot(x,y1,'r',x,y2,'b',x,y3,'k'); title('\fontsize{18}f(x)=e^x*sen(x)'); xlabel('Eixo X'); ylabel('Eixo Y'); axis([0 10 -1 1]); % escala de x varia entre 0 e 10 e a de y entre -1 e 1 % Titulo em fonte 18 legend('f_1(x)=e^{-x}*sen(x)','f_2(x)=e^{-x}','f_3(x)=sen(x)'); % escala de x varia entre 0 e 10; de y entre -0.1 e 0.4 % Plota curva em vermelho % Titulo em fonte 18 title('\fontsize{18}f(x)=e^{-x}*sen(x)');
31
c) Funo semilogx e comando figure: Diagramas de Bode de H ( j) = j /(10 + j) . % Exemplo c clear close all w = logspace(-2,3,1000); % w vetor logaritmicamente espacado entre 10^-1 e 10^2, com 1000 pontos H = j*w./(j*w+10); magH = 20*log10(abs(H)); % Magnitude em dB fasH = angle(H)*180/pi; % Fase em graus figure(1) % Grafico de magnitude semilogx(w,magH); title('Magnitude'); xlabel('\omega (rad/s)'); ylabel('dB'); grid figure(2) % Grafico de fase semilogx(w,fasH); title('Fase'); xlabel('\omega (rad/s)'); ylabel('graus'); grid d) Funo subplot: Diagramas de Bode de H ( j) = j /(10 + j) na mesma figura. % Exemplo d clear close all w = logspace(-2,3,1000); % w vetor logaritmicamente espacado entre 10^-1 e 10^2, com 1000 pontos H = j*w./(j*w+10); magH = 20*log10(abs(H)); % Magnitude em dB fasH = angle(H)*180/pi; % Fase em graus subplot(1,2,1) % Figura com 1 linha, 2 colunas, grafico 1 % Eixo X em escala logaritmica % Eixo X em escala logaritmica
32
subplot(1,2,2) % Figura com 1 linha, 2 colunas, grafico 2 semilogx(w,fasH); title('Fase'); xlabel('\omega (rad/s)'); ylabel('graus'); grid e) Funo stem: plotar y (k ) = a k * u (k ) em funo de k. % Exemplo e k = -10:10; % Criacao do degrau unitario u(k) for i = 1:length(k) if k(i) >= 0 u(i) = 1; else u(i) = 0; end end % alternativa ao for: % u = (k >= 0) % Criacao de y(k) = a^k*u(k) a = 0.5; y = (a).^k.*u; stem(k,y); % Eixo X em escala logaritmica
Grficos 3D
O Matlab possui diversas funes destinadas criao de grficos em 3D. A Figura 5.1 apresenta apenas algumas delas. Quem desejar se aprofundar no assunto deve ler a documentao do prprio Matlab.
33
Grfico 3D
Curvas
Superfcies
plot3 contour
surf mesh
superfcies 3D malhas 3D
Figura 5.1: Tipos de grficos e funes 3D. a) Exemplo de uma curva em 3D (funo plot3) t = 0:pi/50:10*pi; x = sin(t); y = cos(t); z = t; plot3(x,y,z); xlabel('sin(t)'); ylabel('cos(t)'); zlabel('t'); Se for desejado plotar uma funo de duas variveis z = f ( x, y ) necessrio gerar matrizes X e Y contendo linhas repetidas, que definem o domnio da funo. A funo Malab que define X e Y a partir de vetores x e y a meshgrid. Feito isso, pode-se utilizar a funo desejada para plotar a funo z. Veja o exemplo abaixo, no qual se deseja obter as curvas de superfcie (funo surf) e de malha (funo mesh) de z = f ( x, y ) = clear close all x = -8:0.5:8; y = -8:0.5:8; [X,Y] = meshgrid(x,y); % Geracao de matrizes X e Y a partir de x e y r = sqrt(X.^2 + Y.^2); Z = sin(r)./r; figure(1) surf(X,Y,Z); figure(2) % Grafico de malha mesh(X,Y,Z); % Grafico de superficie sen
x2 + y 2 x2 + y 2
34
A funo dlmwrite(NomeArquivo,matriz,delimitador) permite gravar os dados de uma matriz em um arquivo ASCII com determinado delimitador. O exemplo abaixo mostra salva a matriz M no arquivo gravar.txt, cujo delimitador a ,. >> M = [1 3 5 7;2 4 6 8] M= 1 2 3 4 5 6 7 8
b) Funes load e save As funes load e save servem para ler/gravar variveis armazenadas em arquivos com extenso .mat, que um formato binrio proprietrio do Matlab. A sintaxe a seguinte: load(NomeArquivo) save(NomeArquivo,var1,var2,...,varN) save(NomeArquivo,var1,var2,...,varN,-ASCII) No comando save, se nenhuma varivel for especificada, o Matlab salva todas as variveis do worspace no arquivo especificado. A opo -ASCII salva o arquivo no formato ASCII. Veja alguns exemplos. >> a = [1 2]; >> b = 3; >> texto = 'teste'; >> save('arquivo1','a','texto'); >> clear >> whos >> load('arquivo1') >> whos Name a texto Size 1x2 1x5 Bytes Class 16 double array 10 char array
Grand total is 7 elements using 26 bytes Existem diversas outras funes para carregar arquivos de dados. Elas podem ser acessadas pelo comando importdata (help importdata).
36
37
7. Polinmios
a) Razes de um polinmio: funo roots Dado um vetor p com n elementos, a funo roots retorna as razes do polinmio P definido por P = p(1) x n + p(2) x n 1 + " + p(n 1) x + p(n) . Veja o exemplo, onde se considera um polinmio P = 6 x 5 15 x 4 + 3 x 2 + 4 x + 1 . >> p = [6 -15 0 3 4 1]; >> roots(p) ans = 2.3531 0.9461 -0.2579 + 0.4447i -0.2579 - 0.4447i -0.2833 b) Coeficiente de um polinmio a partir de suas razes: funo poly Dado um vetor r contendo as razes de um polinmio, a funo poly retorna um vetor contendo os coeficientes do polinmio. Veja o exemplo, no qual se deseja um polinmio com razes 1 e 2. O resultado P = x 2 x 2 . > >> r = [-1 2]; >> P = poly(r) P= 1 -1 -2
c) Valor de um polinmio: fuo polyval A funo polyval calcula o valor de um polinmio P(X) para cada valor de um vetor X. Por exemplo, considere que se deseja calcula o valor de P = x 2 x 2 para 3 < x < 3 . Veja o exemplo. >> p = [1 -1 -2]; >> x = -3:0.1:3; >> resultado = polyval(p,x); >> plot(x,resultado); d) Ajuste de curvas por polinmio de grau n: fuo polyfit
38
Dados vetores x e y, a funo polyfit retorna os coeficientes de um polinmio de grau n que melhor aproxima os pontos definidos por (x,y). Veja o exemplo, no qual a curva aproximada por um polinmio de grau 3, dado por P = 0, 0046 x 3 0, 7995 x 2 + 3,5478 x + 99,8667 . >> x = 1:10; >> y = [100 110 105 98 102 107 103 100 99 103]; >> p = polyfit(x,y,3); >> p = polyfit(x,y,3) p= 0.0466 -0.7995 3.5478 99.8667 >> aprox = polyval(p,x); >> plot(x,y,x,aprox,'r'); e) Multiplicao/diviso de polinmios: fues conv/deconv Dados dois vetores p1 e p2, contendo os coeficientes de dois polinmios, as funes conv e deconv retornam os coeficientes de um vetor dado pela multiplicao e diviso entre p1 e p2, respectivamente. Veja o exemplo. >> p1 = [2 1 3 4]; >> p2 = [1 -1 2]; >> p3 = conv(p1,p2) p3 = 2 p4 = 2 3 -1 6 3 2 8 >> p4 = deconv(p1,p2)
39
8. Bibliografia
MATSUMOTO, E. Y. MATLAB 6 Fundamentos de Programao. 1. ed. So Paulo: Editora rica Ltda., 2001. Centro Brasileiro de Pesquisas Fsicas. Matlab Curso Introdutrio. Disponvel em: <http://mesonpi.cat.cbpf.br/e2002/cursos/NotasAula/Tutorial_matlab.pdf>
Acesso em: 06 jul. 2005. Apostila do II Workshop Internacional de Ensino de Engenharia. Mini-curso Uso do Matlab no Ensino de Engenharia.
40