matlab josé luiz rybarczyk filho - lief.if.ufrgs.brlief.if.ufrgs.br/~zerocool/proc/aula ii.pdf ·...

38
MATLAB José Luiz Rybarczyk Filho Agosto de 2012

Upload: dokhanh

Post on 14-Feb-2019

225 views

Category:

Documents


0 download

TRANSCRIPT

MATLAB

José Luiz Rybarczyk Filho

Agosto de 2012

É uma linguagem de programação de alto nível para cálculo numérico;

MATLAB significa MATrix LABoratory; Todas as variáveis são matrizes; Para quem usa linux, poderá usar OCTAVE;

Existem vários formatos de apresentação dos resultados das operações:

SHORT: 5 algarismos significativos; LONG: 15 algarismos significativos; Default é SHORT;

Pode ser utilizado como calculadora; Digitem: 8+3 5-3 5*6 20/4 2^3 sqrt(-25) sin(pi/4) x=4*atan(1)

É o conjunto de variáveis definidas em uma sessão de MATLAB;

x=2.3 y=1+2i z=[1,0.4,-2]

who whos

A variável X é diferente da variável x. É melhor utilizar letras minúsculas para comandos do

MATLAB e maiúsculas para variáveis

Apaga variáveis; CLEAR A B C Este comando só apagará as variáveis A, B e C; CLEAR Apaga todas as variáveis É muito útil em programas para evitar erros em

repetições do programa com dimensões diferentes das matrizes;

Existem símbolos que não podem ser usadas como variáveis;

pi, eps, i, ans, Inf, NaN pi=3.14... eps=menor valor de precisão do computador. i = unidade imaginária ans= ultimo resultado Inf = infinito (1/0) NaN= Not a Number (0/0)

Escalar=número, real ou complexo; Vetor= fila ou coluna de número; Matriz=mxn Inserção de matriz: [a11, a12, a13; a21, a22, a23; a31, a32, a33] A=[1 2 10; 4 6 14; 3 4 20] Character: expressões entre apóstrofes. T=‘eis uma variável tipo character’

O comando “size” fornece as duas dimensões de uma matriz

O comando “length” fornece a maior dimensão da matriz;

Estes comandos são muito importantes para operações

matriciais;

Zeros(n), Zeros(m,n): fornece matrizes cujos elementos são nulos;

Ones(n), Ones(m,n): fornece matrizes cujos elementos são “1”;

Rand(n),Rand(m,n): matriz de elementos aleatórios, uniformemente distribuídos no intervalo [0,1];

Randn(n),Randn(m,n): matriz de elementos aleatórios com distribuição Gaussiana (normal), centra em 0 e largura 1;

Eye(n)=matriz identidade;

sin(x) cos(x) sqrt(x) exp(x) log(x) atan(x) abs(x)

Ceil(x) arredondamento de x para cima floor(x) arredondamento de x para baixo fix(x) arredondamento para o inteiro mais próximo de zero round(x) arredondamento para o inteiro mais próximo de x conj(x) complexo conjugado de x imag(x) parte imaginária da variável complexa d real (x) parte real de x sign(x) sinal (+ ou -) do real x gcd(x,y) máximo divisor comum de x e y lcm(x,y) mínimo múltiplo comum de x e y rem(x,y) resto da divisão de x/y Se x e y forem matrizes, as operações são aplicadas aos

elementos

det(A) determinante de A eig(A) autovalores de A expm(A) exponencial matricial de A logm(A) logaritmo matricial inv(A) inversa de A A’ conjugada hermitiana de A sum(A) vertor fila cujos elementos são as somas dos

elementos das colunas de A trace(A) traço norm(V) norma do vetor V sort(V) ordena os elementos do vetor V Ex.: X=[{‘Pedro da Silva’};{‘Anastácio Antunes’};{‘João de Melo

Neto’}] sort(X)

“ponto e vírgula” ao final de uma instrução quando se quer evitar que o resultado da mesma seja escrito na tela.

“dois pontos” é usado para definir uma sequência. Primeiro Elemento:incremento Último Elemento se x=1:3:10 x=[1,4,7,10] se x=10:-2:5 x=[10,8,6]

Um conjunto de comandos e operações contidas num arquivo “nome.m”, são executadas quando se entra “nome” na linha de comando.

As variáveis dos “Script files” são globais, ou seja, são reconhecidas como variáveis do workspace após a execução e vice-versa.

Exemplo de m-file: “modulo.m” %calcula o módulo de um vetor de n components %que o operador fornece x=input(‘dê o vetor [x1,x2,...,xn]\n’); %Forma de entrar dados %O Símbolo \n ordena o cursor a mudar de linha. %Note também que o texto aparecerá na tela e o operador deverá fornecer %o vetor, na forma usual x2=x*x’; % vetor fila vezes vetor coluna=escalar; mod_x=sqrt(x2) % Note que não se deve usar como variável a % mesma palavra usada no nome do programa (modulo);

É possível usar comandos como DIR, LS, DELETE, CD, SAVE

Usa-se SAVE para salvar as variáveis do WORKSPACE. Ex. save A A.mat

para carregar o arquivo é necessário usar LOAD. Ex. load A

x=linspace(xinicial,xfinal,num) num pontos espaçados igualmente

x=logspace(xinicial,xfinal,num) seqüência em escala logarítmica

X e Y são duas matrizes X+Y e X-Y Quando pode ser executado este

comando? X*Y (X tem dimensão m x n e Y tem dimensão n x

k) X*Y tem dimensão m x k X/Y é X*Y-1 e Y/X é Y*X-1 X^2=X*X somente para matriz quadrada X*X’ para qualquer matriz retangular X.^c cada elemento da matriz será elevado por c Z=X.*Y é diferente de Z=X*Y

Editar trechos de matrizes A=[1,2,3;4,5,6;7,8,9] A(:,2) significa o vetor coluna 2 2 5 8 A(1:2,2:3) é a matriz [2,3;5,6]

Verdareiro ou Falso (1 ou 0) Se a=2 e b=3 a < b a > b x=(a < b) < (menor), > (maior) , == (igual) , ~= (diferente), <=

(menor ou igual) e >= (maior ou igual) a&b (a e b) é igual a 1 se verdadeiro (ou se forem

número não nulos) a|b (a ou b) é igual a 1 se pelo menos um entre a e b

for verdadeiro ~a (não a) vale 1 se A for falso xor(a,b) vale 1 se apenas um entre a e b for verdadeiro

repetir N vezes um conjunto de operações; for n=1:N; conjunto de operações end Ex.: s=0; for 1:50; x=rand(1,2); s=s+(x(1)<x(2)); end;

While(condição) conjunto de operações; end Ex. fat=1; N=input(‘de N inteiro \n’); While(N>1); fat=fat*N; N=N-1; end; disp(fat)

If(condição A); conjunto A de operações; elseif(condição B); conjunto B de operações; elseif(condição C); conjunto C de operações; . . . else operações alternativas; end

Ex. Seleciona.m % gera N numeros aleatorios gaussianos %e conta quantos estão em cada um dos seguintes intervalos: %a=(-inf,-1], b=(-1,0], c=(0,1],d=(1,inf) a=0;b=0;c=0;d=0; N=input(‘de numero N \n’) x=randn(1,N);% gera vetor de N numeros aleatórios gaussianos for j=1:N; y=x(j); if(y<=-1) elseif(y<=0) % note que a condição y > -1 %já está satisfeita devido ao if anterior b=b+1; elseif(y<=1) c=c+1; else d=d+1; endif end disp([a b c d])

É usado para uma variável escalar ou character. switch var case {valor_a} operações a case {valor_b} operações b otherwise operações end

Ex. sw_case.m variavel=round(5*rand); switch variavel case{2,4}, disp(‘a variável é par’) case{1,3,5}, disp(a variável é ímpar’) otherwise, disp(‘a variável é zero’) end

Ex. fgravitacional.m function f=fgravitacional(x,y,z,K) %calcula as três componentes cartesianas da força gravitacional %sobre um corpo quando o atrator está na origem e o corpo %na posição r=(x,y,z); O produto GMm é representado por K. r=[x,y,z]; nr=norm(r); nr3=nr^3; f=K*r/nr3; return salve o arquivo digite: “help fgravitacional” depois digite: forca=fgravitacional(3,4,5,50)

sintaxe: plot(x1,y1,’s1’,x2,y2,’s2’,...) xj são vetores cujas componentes definem os pontos sobre a abscissa; yj é o mesmo para a ordenada; sj são opcionais EX. x=0:.1:4*pi; y=cos(x).*exp(-x/8); plot(x,y,x,sin(x),’--g’,x,0,’k’) legend(‘oscilador amortecido’,’seno’,’linha de base’)

plot3(x,y,z) plot(x,y) mesh(x,y,Z) x é um vetor n e y é um vetor m, Z será uma matriz

m x n comet plot dinâmico em 2D come3 plot dinâmico em 3D mais informações help polar, help plot, help mesh, help hist, help axis

Ex.: wt=0:.01:8*pi; x=cos(wt); y=sin(wt); comet3(x,y,t) Ex.: x=-1:.1:1; y=-2*pi:.1:2*pi; y=y’ Z=cos(y)*(x.*x); %note que cos(y) é vetor coluna e (x.*x) é vetor fila mesh(x,y,Z) %agora vamos testar o surf surf(x,y,Z)

hist(x) traça um histograma com os elementos do vetor x;

hist(x,n) traça um histograma com os elementos de vetor x em n intervalos;

Ex.: x=randn(1,100000); hist(x,30)

Alternativamente... V=-4:.2:+4 y=hist(x,V); plot(V,y)

Gere um gráfico qualquer; no menu escolha “Tools” e habilite “Enable Plot

Editing”; Para escrever símbolos matemáticos pode-se usar os

códigos de LaTeX;

calcular o tempo gasto pela CPU: tic; conjunto de comandos; toc mais informações: “help cputime” para melhor o desempenho do programa sempre use

operações matriciais ao invés de elemento por elemento.

evite “for”

Ex.: x=rand(1,100000); y=rand(1,100000); tic; s=0; for j=1:100000; s=s+x(j)*y(j); end toc Ex.: x=rand(1,100000); y=rand(1,100000); tic; s=0; s=x*y’; toc