Curso Básico de MatLab

Curso Básico de MatLab

(Parte 2 de 3)

>> texto1 = 'Curso' texto1 = Curso

Através do comando “whos” pode-se verificar as informações acerca da variável texto1.

Ela é um vetor de dimensão 1, do tipo char array, que ocupa 10 bytes de memória. 5×

NameSize Bytes Class
texto11x5 10 char array

>> whos texto1 Grand total is 5 elements using 10 bytes

Internamente, os caracteres são armazenados através dos respectivos códigos

ASCII. Para obter a string em formato numérico, pode-se utilizar a função “double”:

67 117 114 115 1

>> double(texto1) ans = A operação inversa que transforma um código ASCII em uma string é efetuada pela função “char”:

>> a = [84 101 120 116 1]; >> char(a) ans = Texto

A indexação de uma string é idêntica a de uma matriz. Veja o exemplo.

>> a = texto1(1:3) a = Cur

Da mesma forma, pode-se realizar a concatenação de strings:

>> texto2 = ' de Matlab'; >> textototal = [texto1 texto2] textototal = Curso de Matlab b) Células (cell arrays)

Uma célula é um tipo de variável que permite armazenar matrizes de naturezas diferentes (escalares, vetores, matrizes, strings) em uma única estrutura. Para criar uma célula, utiliza-se a função “cell”. Células utilizam {} ao invés de []. Veja o exemplo abaixo, de uma célula de dimensão . 22×

[] []
[] []

>> celula = cell(2) celula = >> celula{1,1} = eye(2);

>> celula{1,2} = 'matriz identidade 2x2';

>> celula{2,1} = 2;

[2x2 double] [1x21 char ]
[ 2] [1x3 double]
NameSize Bytes Class
celula2x2 474 cell array

>> celula{2,2} = [1 2 3] celula = >> whos celula Grand total is 3 elements using 474 bytes

Costuma-se utilizar células em bancos de dados que mesclam elementos numéricos e alfanuméricos. Por exemplo, uma lista de alunos e suas respectivas matrículas.

c) Estruturas (structs)

É um tipo de dado que permite o armazenamento de matrizes de naturezas diferentes (escalares, vetores, matrizes, strings) identificáveis por nomes de campos. Para criar uma estrutura, utiliza-se a função “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: 'Joao'
Matricula: 1
Nota: 1

>> s = struct('Aluno',{'Joao'},'Matricula',{001},'Nota',{1.0}) s = >> s(2).Aluno = 'Maria';

>> s(2).Matricula = 002;

>> s(2).Nota = 10;

>> s(3).Aluno = 'Jose';

>> s(3).Matricula = 003;

>> s(3).Nota = 7;

NameSize Bytes Class
s1x3 998 struct array

>> whos s Grand total is 28 elements using 998 bytes

Os conteúdos de uma estrutura são acessados da seguinte forma:

Aluno
Matricula
Nota
Aluno: 'Joao'
Matricula: 1
Nota: 1
Aluno: 'Maria'
Matricula: 2
Nota: 10

>> s s = 1x3 struct array with fields: >> s(1) ans = >> s(2) ans = 21

4. Programação no Matlab

4.1 Editor de programas

Existe um ambiente próprio do Matlab para edição de programas. Para abri-lo, digita-se o comando “edit”. Tal editor apresenta algumas características interessantes:

• linhas numeradas, o que é útil principalmente para a localização de erros de programação;

• o caractere “%” indica comentário;

• o caractere “...” indica que o comando continua na próxima linha. Tal recurso permite deixar o texto mais “organizado”;

• a cor atribuída pelo editor a um texto indica a sua classe. O padrão de cores varia de acordo com a versão do Matlab.

4.1 Tipos de arquivos Matlab

Um programa em Matlab possui a extensão “.m” e é chamado de m-file. Existem dois tipos de arquivos Matlab: script e função.

a) Script

Um script é simplesmente uma seqüência de comandos Matlab. Qualquer seqüência de comandos pode ser implementada diretamente na janela de comando do Matlab. Entretanto, se for desejado alterar algum parâmetro ou simplesmente repetir a operação, os comandos devem ser digitados novamente. Tal situação não é prática. Para solucionar esse tipo de problema existe o script. Se a seqüência de comandos for salva em um script, basta digitar o seu nome na janela de comando para repetir o processo.

x = [-10:0.1:10]; a = 1; b = 2; c = -3; y = x.^ 2 + b*x + c; plot(x,y);

Note que o script não apresenta parâmetros de entrada nem de saída. Ele apenas realiza as operações desejadas e utiliza variáveis do workspace. Isso significa que todas as variáveis de um script são salvas no workspace (digite comando whos).

b) Função

Uma função também realiza uma seqüência de comandos. Diferentemente de um script, uma função possui parâmetros de entrada e pode retornar parâmetros de saída. Por exemplo, considere que se deseje criar um arquivo Matlab que calcule uma função do segundo grau para valores variáveis de a, b e c. Nesse caso, um script não serve; deve-se criar uma função. Veja o exemplo. Exemplo: Função denominada FuncaoEq2Grau.m.

% Apresenta o gráfico de uma equação 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 função tenha os mesmos parâmetros do script anterior, digita-se z = FuncaoEq2Grau(1,2,-3);

Note que a única variável criada no workspace (digite comando whos) é z.

Todas as variáveis utilizadas por uma função são internas, o que significa que não são salvas no workspace (diferentemente do caso de um script0). Uma característica interessante é a possibilidade de criar um texto explicativo para uma função, que é apresentado ao se utilizar a função help do Matlab. Esse texto deve ser escrito como comentário (através de %) no início do m-file.

4.2 Tipos de funções

O Matlab reconhece três tipos de função:

• built-in functions: são funções internas do Matlab, cujo código não é acessível ao usuário (por exemplo, digite which cos);

• Matlab m-files: funções escritas em arquivos m-file. O código é acessível ao usuário, podendo inclusive ser modificado (por exemplo, digite which roots);

• User m-files: funções escritas em arquivos m-file pelo próprio usuário, como a FuncaoEq2Grau.m descrita anteriormente.

4.3 Operadores lógicos

O Matlab possui operadores utilizáveis em expressões lógicas (Booleanas), que são utilizadas em tomadas de decisões. Para o Matlab, considera-se que

• 0 (zero) ou nil indica condição falsa;

• 1 (um) ou diferente de zero indica condição verdadeira.

A Tabela 4.1 apresenta os símbolos adotados para os operadores lógicos. Tabela 4.1: Operadores lógicos

Operador Verdadeiro se Exemplo = = ou eq A igual a B A = = B ou eq(A,B) ~= ou ne A diferente de B A ~= B ou ne(A,B) < ou lt A menor do que B A < B ou lt(A,B) > ou gt A maior do que B A > B ou gt(A,B) <= ou le A menor ou igual a B A <= B ou le(A,B) >= ou ge A maior ou igual a B A >= B ou ge(A,B) ~ ou not lógica not ~A ou not(A) & ou and lógica and

>> A = 2; >> B = 4;

0

>> A == B ans =

1

>> A < B ans =

0

>> A > B & A ~= B ans = O Matlab também possui funções para teste de matrizes

Tabela 4.2: Funções matriciais

Função verdadeiro se matriz M for isempty(M) vazia isequal(M,M2) igual a matriz M2 isnumeric(M) numérica ischar(M) alfanumérica issparse(M) esparsa

Existem também as funções any e all. Veja o seu funcionamento no exemplo.

0
1
0
1

>> A = [0 2 4 6 8]; >> isempty(A) ans = >> any(A) ans = >> all(A) ans = >> all(A>=0) ans =

4.4 Controladores de fluxo

O Matlab possui estruturas para tomada de decisões, iguais às existentes em linguagens de programação estruturadas. As principais são as estruturas for, if e while. A tomada de decisão se baseia no resultado de uma expressão booleana. Se uma expressão retorna 0, o Matlab interpreta condição falsa. Se uma expressão retorna um valor diferente de zero, o Matlab considera como condição verdadeira.

a) For for variável = <valor inicial> : <incremento> : <valor final> comandos end

Exemplo: Criação de um vetor formado por 10 múltiplos de 3.

v(i) = 3*i;

for i = 1:10 end b) While

O laço while permite que uma seqüência de comandos seja repetida enquanto uma certa condição 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 = n + 1;

n = 1; while prod(1:n) < 1e100 end c) If, elseif, else.

comandos

O laço if, elseif, else estabelece diversos caminhos para a fluência de um programa. A sua estrutura é mostrada abaixo. if <expressao1> comandos elseif <expressao2> comandos elseif <expressaon> comandos else end

Veja um exemplo de utilização da estrutura. O valor da variável b depende do valor da variável a, que varia entre 0 e 10.

b = 3*a;
b = a/3;
b = a;

a = round(10*rand(1)); % a eh uma variavel com valor entre 0 e 10 if a > 5 elseif a < 5 else end

4.5 Implementação do algoritmo de Gauss

O algoritmo de Gauss é útil para resolver um sistema de equações lineares de ordem , do tipo , com A singular (). O método possui duas etapas: nAXY=det(A)0≠

1 Triangularização: consiste em transformar A numa matriz triangular superior, mediante permutações e combinações lineares de linhas; 2 Retrossubstituição: cálculo de X, solução de , a partir da solução do último componente de X, e então substituindo regressivamente nas equações anteriores. AX Y=

1a etapa: triangularização da matriz A

ix k

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% Passo 2
for i = k+1:n % Passo 2.1
mik = -A(i,k)/A(k,k); % Passo 2.1.1
A(i,:) = A(i,:) + mik*A(k,:); % Passos 2.1.2 e 2.1.2.1.
Y(i) = Y(i) + mik*Y(k); % Passo 2.1.3
end

end

x(n)=Y(n)/A(n,n);% Passo 2
for k = n-1:-1:1% Passo 3
x(k)=Y(k); % Passo 3.1
for i = k+1:n% Passo 3.2
x(k) = x(k) - A(k,i)*x(i); % Passo 3.2.1
x(k)=x(k)/A(k,k);% Passo 3.3
disp('Vetor x=');% Passo 4

% Retrossubstituicao end end disp(x');

5. Gráficos no Matlab

O Matlab possui sofisticados recursos para a visualização de dados na forma gráfica. Ele trabalha com objetos gráficos, tais como linhas e superfícies. As propriedades de tais objetos podem ser controladas através das propriedades dos objetos. Entretanto, o Matlab disponibiliza diversas funções que facilitam a configurações das propriedades de objetos. As principais funções com esse fim são vistas neste capítulo.

5.1 Cor, linha e marcador de uma curva (clm)

Antes de apresentar as funções de plotagem, é interessante apresentar as propriedades de cor, tipo de linha e tipo de marcador de uma curva. A Tabela 5.1 apresenta as diferentes possibilidades. Tabela 5.1: Cores, tipos de linha e marcadores

Cor Tipo de linha Marcador y (amarela) - (sólida) . (ponto) m (magenta) : (pontilhada) o (círculo) c (azul-claro) -. (ponto-traço) x (marcador x) r (vermelha) -- (tracejada) + (cruz) g (verde) * (estrela) b (azul) s (quadrado) w (branca) d (losango) k (preta) h (hexagrama) p (pentagrama) v ou (triângulo p/ baixo ou cima) < ou > (triângulo p/ esquerda ou direita)

5.2 Principais funções relacionadas com gráficos

A Tabela 5.2 apresenta algumas das principais funções relacionas com gráficos Matlab.

Tabela 5.2: Funções relacionadas com gráficos title título ylabel nome do eixo y text texto em local especificado grid desenha linhas de grade gtext texto usando mouse axis intervalo dos eixos xlabel nome do eixo x legend legendas no gráfico

5.3 Funções utilizadas para plotagem

A Tabela 5.3 apresenta as principais funções utilizadas para gerar gráficos 2D. Tabela 5.3: Funções para plotagem 2D

Função Descrição plot(x1,y1,clm1,...,xN,yN,clmN) eixos X e Y em escala linear semilogx(x1,y1,clm1,...,xN,yN,clmN) eixo X logarítmico e eixo Y linear semilogy(x1,y1,clm1,...,xN,yN,clmN) eixo X linear e eixo Y logarítmico loglogy(x1,y1,clm1,...,xN,yN,clmN) eixos X e Y logarítmicos plotyy(x1,y1,clm1,x2,y2,clm2) duas curvas com escalas em Y diferentes stem(x,y) plota seqüências discretas

5.4 Propriedades de textos

Textos em gráficos possuem propriedades que podem ser alteradas, tais como tipo e tamanho da fonte. A Tabela 5.4 apresenta comandos que realizam essas tarefas. Tabela 5.4: Propriedades de textos em gráficos Matlab

Propriedade Comando Exemplo

Tipo de fonte \fontename \fontname{Arial} Tamanho da fonte \fontesize \fontsize{14} Texto em negrito \bf \bfTexto Texto em itálico \it \itTexto Subscrito _ X_n Sobrescrito Xn Letras gregas '\nomeletra' '\pi'

5.5 Exemplos

plot(x,y,'r');% Plota curva em vermelho
title('\fontsize{18}f(x)=e{-x}*sen(x)');% Titulo em fonte 18
xlabel('Eixo X');
axis([0 10 -0.1 0.4]);% escala de x varia entre 0 e 10; de y entre -0.1 e 0.4

% Exemplo a clear close all x = 0:0.1:10; y = exp(-x).*sin(x); ylabel('Eixo Y'); % insere texto em fonte times 16 gtext('\fontname{timesnewroman}\fontsize{16}ponto de maximo local');

title('\fontsize{18}f(x)=ex*sen(x)');% Titulo em fonte 18
xlabel('Eixo X');
axis([0 10 -1 1]);% escala de x varia entre 0 e 10 e a de y entre -1 e 1

% 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'); legend('f_1(x)=e{-x}*sen(x)','f_2(x)=e{-x}','f_3(x)=sen(x)'); ylabel('Eixo Y'); 31

% 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

semilogx(w,magH);% Eixo X em escala logaritmica

figure(1) % Grafico de magnitude title('Magnitude'); xlabel('\omega (rad/s)'); ylabel('dB'); grid

semilogx(w,fasH);% Eixo X em escala logaritmica

figure(2) % Grafico de fase title('Fase'); xlabel('\omega (rad/s)'); ylabel('graus'); grid

% 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

semilogx(w,fasH);% Eixo X em escala logaritmica

semilogx(w,magH); % Eixo X em escala logaritmica title('Magnitude'); xlabel('\omega (rad/s)'); ylabel('dB'); grid subplot(1,2,2) % Figura com 1 linha, 2 colunas, grafico 2 title('Fase'); xlabel('\omega (rad/s)'); ylabel('graus'); grid

if k(i) >= 0
u(i) = 1;
else
u(i) = 0;
end

% Exemplo e k = -10:10; % Criacao do degrau unitario u(k) for i = 1:length(k) 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);

Gráficos 3D

O Matlab possui diversas funções destinadas à criação de gráficos em 3D. A

Figura 5.1 apresenta apenas algumas delas. Quem desejar se aprofundar no assunto deve ler a documentação do próprio Matlab.

Gráfico 3D Curvas Superfícies curvas em 3Dcurvas de nívelplot3contoursuperfícies 3Dmalhas 3Dsurf mesh

Figura 5.1: Tipos de gráficos e funções 3D.

a) Exemplo de uma curva em 3D (função 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 função de duas variáveis é necessário gerar matrizes X e Y contendo linhas repetidas, que definem o domínio da função. A função Malab que define X e Y a partir de vetores x e y é a meshgrid. Feito isso, pode-se utilizar a função desejada para plotar a função z. Veja o exemplo abaixo, no qual se deseja obter as curvas de superfície (função surf) e de malha (função mesh) de sen

figure(1)% Grafico de superficie
figure(2)% Grafico de malha

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; surf(X,Y,Z); mesh(X,Y,Z);

6. Funções relacionadas com arquivos de dados

O Matlab possui diversas funções para leitura e gravação de arquivos de dados (texto, imagem e som). Algumas das principais são apresentadas neste capítulo.

6.1 Leitura e gravação de arquivos de dados a) Funções dlmread e dlmwrite

Para ler ou gravar um arquivo ASCII delimitado utiliza-se as funções dlmread e dlmwrite, respectivamente. O arquivo possui um caractere delimitador, que separa os dados uns dos outros. Veja os exemplos. A função dlmread(‘NomeArquivo’,’delimitador’) lê um arquivo ASCII com determinado delimitador. Por exemplo, considere um arquivo dados.txt, cujo delimitador é um espaço em branco. O exemplo abaixo mostra como ler este arquivo e salvar o seu conteúdo em uma variável denominada “a”.

1 2 3 4
5 6 7 8
9 10 1 12

>> type dados.txt 1 2 3 4 5 6 7 8 9 10 1 12 >> a = dlmread('dados.txt',' ') a =

A função 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 “,”.

(Parte 2 de 3)

Comentários