You are on page 1of 24

INTRODUCAO A MATLAB/OCTAVE

PREPARADO POR Fernando Carlos Messias Freire

Departamento de F sica, Universidade Estadual de Maring a Avenida Colombo, 5790 - 87020-900 Maring, Paran, Brasil a a

08 de outubro de 2006.

MatLab/Octave Vamos logo a que interessa

No tem jeito, a melhor forma de aprender testando comando por comando, a e alguns so bastante intuitivos, mas outros nem tanto, por isso a necessidade de a provar pelo menos uma vez na vida, hehehe.

0.1
clear

COMANDOS DO COMMAND

clear all clear global clear functions clear A,b dir what delete filename mkdir(nome_diretorio) copyfile(sc, dst) type file.txt cd pwd which func_name lookfor palabra help nome_comando % cria um sub-diretorio % copia o arquivo "sc" no arquivo "dst" % mostra o arquivo "file.txt" % muda de diretorio % mostra aonde esta o diretorio atual % localiza uma funcao chamada "func_name" % procura uma palavra em todos os ficheiros *.m % O MAIS IMPORTANTE !!!

0.1.1

COMO USAR OS FICHEIROS .m

% H duas formas de executar comandos: a % a) digitando diretamente no COMMAND ou % b) escrevendo o comando (ou a sequ^ncia de comando) num ficheiro, e % e depois executar este ficheiro apenas digitando o nome dele.

F.C.M. Freire

Nilson

MatLab/Octave % DICAS: % podemos chamar outros ficheiros dentro de um ficheiro

0.1.2
% EX.: 1.0/0.0 0/0

OS ERROS MAIS COMUNS


% Divide by zero % NaN (Not a Number)

O MatLab/Octave, como o nome ja diz tem como forte, entre outras coisas trabalhar com matrizes, ento vamos comear falando de matrizes. a c

F.C.M. Freire

Nilson

MatLab/Octave

0.2
0.2.1

MATRIZES
OPERACOES BASICAS COM MATRIZES

+ adicicao ou soma - subtracao * multiplicaao c trasposta ^ potenciacao \ divisao n-esquerda / divisao n-direita .* producto elemento a elemento ./ y .\ divisao elemento a elemento .^ elevar a una potencia elemento a elemento Por comodidade, "m." significa a palavre MATRIZ e "v." significa a palavra VETOR. Como exemplo, ns o vamos sempre usar as matrizes: A=magic(3) B=[1 2 3 ; 4 5 6] c=1:4 d=c % uma m. 3x3 % uma m. 2x3 % um v. linha % um v. coluna

N~o tem nada a ver escrever m. com letras maisculas ou a u minscula, eu que prefiro definir m. com letras maiscula u e u e v. com letras minsculas. u EX.: A*2 A-4 % elemento a elemento c^2 c.^2 F.C.M. Freire % ERROR, temos que usar o ponto "." % OK Nilson

MatLab/Octave c*[1 -1 1 -1] [1 2 3 4].*[1 -1 1 -1] % ERROR, idem anterior % OK

0.2.2
eye(4)

TIPOS DE MATRIZES PRE DEFINIDAS


% forma uma m. unitria de tamanho (4x4) a % forma uma m. de zeros de tamanho (3x5) % dem, de tamanho (4x4) % forma uma m. de uns de tamanho (3x3) % dem, de tamanho (2x4) % gera um vetor com n valores igualmente % espaados entre x1 e x2 c % forma uma m. de nmeros aleatrios entre 0 e 1, u o % com distribui~o uniforme, de tamanho (3x3) ca % dem de tamanho (2x5) % cria uma m. (4x4) com os nmeros 1, 2, ..., 4*4, u % com a propriedade de que todas as filas e % colunas sumam o mesmo

zeros(3,5) zeros(4) ones(3) ones(2,4) linspace(x1,x2,n) rand(3) rand(2,5) magic(4)

0.2.3

FORMACAO DE UMA MATRIX A PARTIR DE OUTRAS

[m,n]=size(A) n=length(x) zeros(size(A)) ones(size(A)) A=diag(x) x=diag(A) diag(diag(A)) blkdiag(A,B) triu(A)

% devolveo n. de linhas e colunas da m. A % calcula o n. de elementos do v. x % forma uma m. de zeros do mesmo tamanho da m. A % dem com uns % forma uma m. diagonal A cujos elementos s~o diagonais a % s~o os elementos do v. ja existente x a % forma um v. a partir dos elementos da diagonal de A % cria uma m. diagonal com os elementos da diagonal de A % cria uma m. diagonal de submatrizes a partir de A e B % forma uma m. triangular superior a partir de uma m., % (nao necessariamente quadrada).

F.C.M. Freire

Nilson

MatLab/Octave tril(A) rot90(A,k) % dem com uma m. triangular inferior % Gira de 90 graus a m. retangular A no sentido

% anti-horrio, k um inteiro que pode ser negativo, a e % por "default", k=1 flipud(A) fliplr(A) reshape(A,m,n) % giro horizontal % giro vertical % muda o tamnho da m. A, devolvendo uma m. de tamanho % m-n cujas colunas se obtem a partir de um v. formado % por colunas de A postas uma em continuaao das outras. c~ % EX.: Criar uma Matrix (6x6) a partir de quatro m. (3x3):

A=rand(3) B=diag(diag(A)) C=[A, eye(3); zeros(3), B] % Os elementos do v. x podem ser direcionados a partir de outro v. z z=[1 3 4] x=rand(1,6) x(z) % em duas dimenoes c~ f=[2 4] c=[1 2] A=magic(4) A(f,c)

0.2.4
x=1:10 x=1:2:10

OPERADOR DOIS PUNTOS :


% neste caso o incremento e por padrao 1. % aqui o incremento e definido pelo usuario e igual a 2. % dem, podendo ser numeros reais % dem % neste caso para tranpor a matriz "x" devemos Nilson

x=1:1.5:10 x=10:-1:1

x=[0.0:pi/50:2*pi]; F.C.M. Freire

MatLab/Octave y=sin(x); z=cos(x); [x y z] %%% outros exemplos A=magic(6) A(6, 1:4) A(3, :) A(end, :) A(3:5,:) A([1 2 5],:) % extrae os 4 primeiros elementos da 6a fila % extrae todos os elementos da 3a fila % colocar entre [];

% extrae conjuntos distintos de utilizando colchetes, % ou seja, a partir de um outro vetor.

B=eye(size(A)); % substitui linhas de uma matriz por outras. B([2 4 5],:)=A(1:3,:) x=rand(1,5) x=x(5:-1:1) % INVERTE a ordem dos elementos do v. linha A=magic(3) A(:,3:-1:1) % INVERTE a ordem das colunas A(3:-1:1,:) % INVERTE a ordem das linhas A(:) fliplr(A) flipud(A) A=magic(3) B=[] A(:,3)=[] % elimina a ultima coluna % coloca em sequ^ncia, elemento a elemento da m. e % ou ainda, podemos usar:

F.C.M. Freire

Nilson

MatLab/Octave

0.2.5
< > <= >= == ~=

OPERADORES RELACIONAIS

% menor que % maior que % menor o igual que % maior o igual que % igual que % distinto que (tirando este, todos os outros sao semelhantes ao "C".)

% como em "C" e outras linguagens, quando uma comparaao e satisfeita c % o programa retorna "1" (True) ou "0" (False). % EX.: A=[1 2;0 3] B=[4 2;1 5] A==B % compara elemento a elemento.

0.2.6
| OR

OPERADORES LOGICOS
(ou)

& AND (e) ~ NEGACAO

0.2.7

FUNCOES MATEMATICAS ELEMENTARES

Algumas despen~o explicaao, mas vale lembrar que todas ca c~ estas fun~es s~o aplicadas elemento a elemnto de uma m. co a ou de um v., ou ainda, de um escalar. sin(x); cos(x); tan(x); asin(x); acos(x); atan(x); sinh(x); cosh(x); tanh(x); asinh(x); acosh(x); atanh(x);

F.C.M. Freire

Nilson

MatLab/Octave log(x) log10(x) exp(x) sqrt(x) sign(x) rem(x,y) mod(x,y) round(x) fix(x); floor(x); ceil(x); gcd(x) lcm(x) real(x) imag(x) abs(x) angle(x) % mximo divisor comum a % mnimo divisor comum % partes reais % partes imaginarias % valores absolutos % ngulos de fase a % logaritmo natural % logaritmo decimal % exponencial % raz quadrada % devolve -1 se <0, 0 se =0 e 1 si >0 % resto da divisao % similar a rem (Ver diferencias con el Help) % arredonda para o inteiro mais proximo

0.2.8

FUNCOES QUE ATUAM SOBRE VETORES

[xm,im]=max(x) % devolve o maior valor do vetor "x". % Ex.: x=[1 3 5 7 9 4 6 2 0] [xm,im]=max(x) min(x) sum(x) cumsum(x) mean(x) std(x) F.C.M. Freire % idem anterior % soma os elementos de um vetor % devolve um vetor de soma acumulativa dos elementos % valor medio dos elementos de um vetor % desvio padr~o a Nilson

MatLab/Octave prod(x) cumprod(x) % produto dos elementos de um vetor % idem "cumsum" so que com o produto dos elementos

[y,i]=sort(x) % ordenacao do maior para o menor, e a ordem de cada elemento % OBS.: Podemos usar todos este comando em uma matriz, mas temos que fazer % linha por linha ou coluna por coluna.

0.2.9
B = A B = A.

FUNCOES MATRICIAIS ELEMENTARES


% trasposta (conjugada) de A % traspuesta (sem conjugar) de A % devolve um vetor com os coeficientes do polin^mio o % caracteristico da matriz "quadrada" A % traco de A (soma dos elementos da diagonal % de uma m. quadrada)

v = poly(A) t = trace(A)

[m,n] = size(A) % devolve o numero de linhas e colunas de uma m. % retangular n = size(A) nf = size(A,1) nc = size(A,2) % tamanho de A % numero de linhas de A % numero de colunas de A

0.2.10

NUMEROS COMPLEXOS
tanto "i" como "j" representam numeros complexos

a=sqrt(-4) a=3+4j % OBS.:

% Notem a diferena entre: c i=2 2+3i 2+3*i 2+3*j % neste caso "j" nao estava anteriormente definido. c=complex(2,3) real(c) imag(c) F.C.M. Freire Nilson

MatLab/Octave

10

0.3

GRAFICOS

% Fun~es mais conhecidas: co plot() semilogx() semilogy() loglog() figure() title(nome) xlabel(nome) ylabel(nome) legend(curva_1,curva_2,etc) subplot(linha,coluna,posiao) c~ % Opcoes: %-COR-----------------MARCAS-------------------LINHA % b % g % r % c % m % y % k % % % % % % %-% Ex (1) %-% F.C.M. Freire Nilson blue green red cyan magenta yellow black . o x + * s d v ^ < > p h point circle x-mark plus star square diamond triangle (down) triangle (up) triangle (left) triangle (right) pentagram hexagram : -. -solid dotted dashdot dashed

MatLab/Octave

11

x = -pi:0.01:pi; figure(1) plot(x,sin(x)) grid on hold on plot(x,cos(x)) grid on hold on plot(x,asin(x)) %-% Ex (2) %-% min=0; max=2*pi; pontos=100; step=(max-min)/pontos; for i=1:pontos+1 x(i)=min + (i-1)*step; funcoes; % aonde o arquivo funcao contem: % y(i)=sin(x(i)); % z(i)=cos(x(i)); end figure(2) g(1)=plot(x,y) hold on h(1)=plot(x,z) xl(1)=xlabel(x) yl(1)=ylabel(y and z) le(1)=legend(Sin,Cos) ti(1)=title(The Goods) set(g,Color,blue,... F.C.M. Freire Nilson

MatLab/Octave LineStyle,o,... LineWidth,2) set(h,Color,red,... LineStyle,-,... LineWidth,2) set(xl,FontSize,20) set(yl,FontSize,20) set(le,FontSize,18) %-% Ex (3) %-% x=0:1:1e3 y=x.^2 figure(10) plot(x,y) figure(20) loglog(x,y) figure(30) semilogx(x,y) % OBS.: Mostrar como muda as propriedades do grafico % LINHA: estilo, tamanho, cor % MARCAS: estilo, tamanho, cor de fundo e das bordas % NOS EIXOS X,Y,Z: label, cor, localizacao, etc % OBS.: Mostra as funcoes da paleta do plot, como: % a setinha "edit plot" % a setinha "edit text" % a setinha "insert arrow" % "insert line" % Zoom + e % O mais lindo: "rotate 3D" %-% Ex (4) %-% F.C.M. Freire 3D

12

Nilson

MatLab/Octave

13

t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) axis square grid on [X,Y] = meshgrid([-2:0.1:2]); Z = X.*exp(-X.^2-Y.^2); plot3(X,Y,Z) grid on [X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z = sin(R)./R; surf(X,Y,Z,FaceColor,interp,... EdgeColor,none,... FaceLighting,phong) daspect([5 5 1]) axis tight view(-50,30) camlight left %-% Ex (5) %-% (SUBPLOT) x = -pi:0.01:pi; figure(1) subplot(2,1,1) plot(x,sin(x)) hold on subplot(2,1,1) plot(x,cos(x)) hold on subplot(2,1,2) plot(x,asin(x)) % OBS.: Podemos EXPORTAR OS GRAFICOS como .eps, .jpg, etc F.C.M. Freire Nilson

MatLab/Octave

14

0.4
0.4.1

PROGRAMANDO
USO DI if

% sintaxe: if condicion sentencias end % ou ainda em "bifurcaoes multiplas" c if condicion1 bloque1 elseif condicion2 bloque2 elseif condicion3 bloque3 else bloque4 end EX.: A = ones(3) r = round(rand(1)*10) B = [r 1 1 ; 1 r 1 ; 1 1 r] if A==B fprintf(A Matriz "B" eh uma matriz unitaria) else fprintf(A Matriz "B" nao eh uma matriz unitaria) end % OBS.: Podemos utilizar tambem em matrizes de dimenoes iguais, ex.: c % por default, quando nao se cumpre as condioes 1,2,3 c

F.C.M. Freire

Nilson

MatLab/Octave if A==B % exige que todos os elementos sejam iguais dois a dois

15

if A~=B % exige que todos os elementos sejam diferentes dois a dois

0.4.2

USO DO for

% sintaxe: for i=1:n sentencias end % ou ainda: for i=vectorValores sentencias end % ou ainda: "ANINHADOS" for i=1:m for j=1:n sentencias end end EX.: [X,Y] = meshgrid(-10:1:10); R = sqrt(X.^2 + Y.^2) + eps; for i=1:size(X,1) for j=1:size(X,1) Z(i,j) = sin(R(i,j))./R(i,j); end end %%% ou somente escrever assim: Z = sin(R)./R; F.C.M. Freire Nilson % este comando gera as X,Y para plots 3D. % assumira somente os valores do "vectorValores"

MatLab/Octave

16

mesh(X,Y,Z) %%% tente trocar "mesh()" por "surf()" e ver o que faz estes comandos surf(X,Y,Z,FaceColor,interp,... EdgeColor,none,... FaceLighting,phong)

0.4.3

USO DO while

while condicion sentencias end EX.: A = ones(3); B = magic(3); c = 0; while det(A) ~= det(B) r = round(rand(1)*10) B = [r 1 1 ; 1 r 1 ; 1 1 r] c = c + 1; end fprintf(A Matriz "B" se tornou unitaria com %d interacoes,c) % OBS.: lembrando que a condicoes no MatLab pode ser sempre uma % expressao vetorial ou matricial.

0.4.4
EX.:

USO DO breake continue

F.C.M. Freire

Nilson

MatLab/Octave

17

a = 1; b = 100; while b > a x = ( a + b ) / 2; if x == 75 break else a = a + 1; end end x

F.C.M. Freire

Nilson

MatLab/Octave

18

0.5

ENTRADA E SAIDA DE DADOS

% As formas mais utilizadas: 1) Ctrl+C -> Ctrl+V 2) Criar um ficheiro *.m 3) Com o comando "load nome_arquivo", neste os dados devem ser separados por "Enter" e "Espaos". c EX.: A=load(mega_sena.dat) 4) Usando o comando "textread" EX.: a) Suponha que no arquivo "agenda.dat" contenha: TheGoods Tipo1 12.34 45 sim [names,types,x,y,answer] = textread(agenda.dat,%s %s %f %d %s,1) EX.: b) ignorando uma variavel e delimitando a quantidade de caracteres. [names,types,y,answer] = textread(agenda.dat,%9c %5s %*f %2d %3s,1) EX.: c) Lendo somente o numero um que esta acompanhando a palavra "tipo1" [names,typenum,x,y,answer] = textread(mydata.dat,%s Type%d %f %d %s,1) 4) Com os comandos "fopen" e "fread" FOPEN sintaxe: F.C.M. Freire Nilson

MatLab/Octave

19

[fi,texto] = fopen(filename,c) FUNCOES st = fclose(fi) onde c pode ser: r w a r+ para leitura (de read) para escrita recomeando (de write) c para escrita em continuaao (de append) c para leitura e escrita

AS FUNCOES: fscan, sscanf, fprintf, sprintf, fread e fwrite FSCANF sintaxe: [var1,var2,...] = fscanf(fi,cadeia de controle,size) Onde a cadeia de controle pode ser: %s para cadeias de caracteres %d para variaveis inteira %f para variaveis de ponto flutuante %lf para variaveis de "doble precision" FPRINTF sintaxe: fprintf(fi,cadena de control,var1,var2,...) OBS.: as fs. "sprintf" e "sscanf" em vez de salva-las num arquivo, c as mostra diretamente no video. OBS.: Assim como "fscanf" e "fprintf" estao para "ASCII" as fs c "fread" e "fwrite" estao para "BIN" (numeros binarios). EXEMPLOS: F.C.M. Freire Nilson

MatLab/Octave

20

EX.: 1) Ler a partir de uma arquivo (neste caso: Presenca.dat) OBS.: Com este comando podemos ler somente a primeira linha [name,p1,p2,p3,p4,p5,nota] = textread(presenca.dat,%s %s %s %s %s %s %f,1) EX.: 2) Grava a matriz A (neste caso: A=magic(4)) A=magic(4) f=fopen(magic.dat, a); for i=1:4 for j=1:4 fprintf(f,%f ,A(i,j)); end fprintf(f,\n); end fclose(f);

F.C.M. Freire

Nilson

MatLab/Octave

21

0.6

PROCESSO DE DEPURACAO (DEBUGGER) E AS VANTAGENS DO EDITOR

%%% As vantagens de usar o EDITOR: a) mostrar diferentes cores para diferentes situaoes c b) acusa o (ou nao) fechamento de chaves, parenteses e colchetes c) estrutura automaticamente o uso do TAB para subrotinas d) comenta (ou descomenta) grande qtd. de linhas selecionadas e) executa partes selecionadas f) entre outras vantagens do modo DEBUGGER, citado abaixo. %%% Modo de usar o modo DEBUG: a) colocar os "breakpoints" nos lugares desejados b) clicar em "RUN" ou "F5", na sequencia podemos clicar em: 1) "STEP" ou "F10" 2) "STEP IN" ou "F11" 3) "STEP OUT" ou "Shift+F11" 4) "CONTINUE" ou "F5" 5) "GO UNTIL CURSOR c)sair do modo depurador clicando em "EXIT DEBUG MODE"

F.C.M. Freire

Nilson

MatLab/Octave

22

0.7

ALGORITMO GENETICO

Algoritmos genticos s~o uma famlia de modelos computacionais e a inspirados na evolu~o. ca Numa utilizaao mais abrangente do termo, um algoritmo gentico c~ e qualquer modelo baseado em popula~o que utiliza operadores e ca de seleao e re-combinaao para gerar novos pontos amostrais c~ c~ em um espao de busca. c Muitos algoritmos genticos foram introduzidos por pesquisadores e de uma perspectiva experimental. A maior parte deles tem interesse no algoritmo gentico como e feramenta de otimiza~o. ca EX.: 1) VER CADA PARTE DO EXEMPLO FEITO 2) TESTAR USANDO FALSOS DADOS 3) FAZER UM EXEMPLO DO GUIDE

0.8

FLUXOGRAMAS COM RFLOW

FAZER EXEMPLO DO GA

F.C.M. Freire

Nilson

Referncias Bibliogrcas e a

[1] J. G. Jaln, J. I. Rodr o guez, A. Brazlez, Aprenda Matlab 6.1, (Escuela a Tcnica Superior de Ingenieros Industriales Universidad Politcnica de Madrid, e e Madrid). [2] Help do Matlab.

23