1.05k likes | 1.17k Views
Eugênio Silva E Adriano Cruz. Iniciação ao MatLab. Introdução. Introdução. MatLab – Matrix Laboratory (Universidades de Stanford e Novo México - 1970) originalmente escrito para trabalhar com matrizes e vetores evoluiu ao longo do anos até se tornar uma ferramenta de ampla abrangência.
E N D
Eugênio Silva E Adriano Cruz Iniciação ao MatLab
Introdução • MatLab – Matrix Laboratory (Universidades de Stanford e Novo México - 1970) • originalmente escrito para trabalhar com matrizes e vetores • evoluiu ao longo do anos até se tornar uma ferramenta de ampla abrangência.
Introdução • o MatLab é uma poderosa ferramenta matemática e uma linguagem de programação de alto-desempenho para a computação científica • integra cálculos matemáticos, visualização e programação em um ambiente interativo • é de fácil utilização
Exemplo – transpor uma matriz • MatLab • Pascal var a, b : array [1..3, 1..3] of integer; i, j : integer; begin . . . for i = 1 to 3 for j = 1 to 3 b(j,i) := a(i,j); end; end; end. >> a = [1 2 3; 4 5 6; 7 8 9] a = 1 2 3 4 5 6 7 8 9 >> b = a’ b = 1 4 7 2 5 8 3 6 9
Introdução • o elemento de dados básico é uma matriz • matrizes e vetores são manipulados com mais facilidade e rapidez que em programas escritos em linguagens não-interativas como Pascal, C ou Fortran
Introdução • Linha de comandos – é possível usar o matlab através de comandos emitidos a partir de linha de comandos • scripts – arquivos que contém comandos matlab
Introdução • toolboxes - bibliotecas de funções que permitem a resolução de classes particulares de problemas • simulink - acessório que acrescenta uma interface de diagramas de blocos e recursos de simulação real aos demais recursos numéricos, gráficos e de linguagem
Aplicações • matemática e computação • desenvolvimento de algoritmos • modelagem, simulação e prototipação • análise de dados, exploração e visualização • gráficos científicos em duas e três dimensões
Help • On line • Linha de comandos - • help • help elfun • help abs • demos - • demo
Operações Elementares >> 25 / 5 + 5 \ 25 ans = 10 >> 3 ^ 2 * 2 ^ 2 + 2 ans = 38 • >> 4 + 6 – 2 • ans = • 8 • >> 4 * 2 + 6 * 5 + 2 * 9 • ans = • 56
Prioridades • Parênteses • Potência • 3 * 2 ^ 3 = 24 • * e / • Resolvendo da esquerda para direita • 8 / 4 * 3 = 6 • + e - • Resolvendo da esquerda para direita
Números • Inteiros: 32, -12345 • Reais: 3.1789, -23.0, 1.0e-3 • Complexos: 3.2 – 23.5i • Inf: Infinito (resultado da divisão por 0) • NaN: Not a number 0/0 • Contas são feitas com 15 dígitos aproximadamente • Comando format controla impressão dos resultados.
Definição de Variáveis • >> a = 10 • a = • 10 • >> b = 20; • O ‘;’ evita que o resultado apareça na tela. • >> c = 1 + 2i ou c = 1 + 2j • c = • 1.0000 – 2.0000i
Nomes de Variáveis • Combinações de letras e números, começando com letra • n1, ab, temp • Nomes especiais • eps = 2.220446049250313e-16 (o menor número tal que 1 + eps é indistinguível de 1) • pi • i, k
Variáveis Pré-definidas • ans: váriavel padrão usada para resultados de expressões do tipo • >> 3 + 5 • pi • i ou j: igual a raiz quadrada de -1 • realmax: maior número real utilizável • 1.797693134862316e+308 • realmin: menor número real utilizável • 2.225073858507201e-308
Variáveis Pré-definidas • nargin: número de argumentos de entrada • nargout: número de argumentos de saída
Funções Elementares • abs(x) valor absoluto de x • sin(x) seno de x • asin(x) arc seno x • cos(x) co-seno x • acos(x) arc co-sen x • tan(x) tangente x • exp(x) e elevado a x
Funções Elementares • log(x) log inverso de exp(x) • log10(x) log base 10 de x • gcd(x,y) mdc de x e y • lcm(x,y) mmc entre x e y • max(x) máximo de x • min(x) mínimo de x • inv(x) matriz inversa de x • ...
Vetores em linha • >> x = [ 1 3 5 ]; • >> lenght(x) • ans = • 3 • >> y = [ 3 4 5 ]; • >> x + y • ans = • 4 7 10 • >> z = 3 * y • ans = • 9 12 15
Vetores • >> x = [ 1 3 5 ]; • >> v1 = [ 3 4 5 6]; • >> x + v1 • ??? Error using ==> plus • Matrix dimensions must agree.
Gerando vetores • >> x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1] .* pi • ou • >> x = (0:0.1:1).* pi • ou • >> x = linspace(0,pi,11) • >> y = sin(x)
Gerando vetores • linspace(x1,x2) gera um vetor linha com 100 pontos igualmente espaçados. • linspace(x1,x2,n) gera vetor com n pontos entre x1 e x2 >>linspace(0,pi,11)
Gerando vetores • a : b : c gera vetor começando em a, incrementando por b, até chegar em c. Não gera além de c. >> 0:0.1:1 ans = 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 • a : b gera vetor começando em a até chegar em b incrementando por 1
Manipulando vetores • x = (0:0.1:1)*pi x = 0 0.3142 0.62830.9425 1.25661.5708 1.8850 2.1991 2.5133 2.8274 3.1416 • x(6) = 1.5708 • x(1:5) = 0 0.3142 0.6283 0.9425 1.2566 • x(7:end) = 1.8850 2.1991 2.5133 2.8274 3.1416 • x(3:-1:1) = 0.6283 0.3142 0 • x(2:2:7) = 0.3142 0.94251.5708
Manipulando vetores, matrizes • x = 00.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.19912.5133 2.8274 3.1416 • x([8 2 9 1]) = 2.19910.31422.5133 0 • z = x[(2:5) 4 5 7] = 0.3142 0.6283 0.9425 1.25664.0000 5.0000 7.0000 • w = [ x y ] %vetor linha • k = [ x; y ] % matriz com duas linhas
Manipulando vetores, matrizes • A = [1 2 3; 4 5 6; 7 8 9]; • A(3,3) = 9 • A(2, 2:3) = 5 6 • A(3,:) = 7 8 9 % : todas as colunas
Manipulando vetores, matrizes • B = A(3:-1:1, : ) • B = [7 8 9; 4 5 6; 1 2 3] • C = [A B( : , [1 3])] • C = [1 2 3 7 9; 4 5 6 4 6; 7 8 9 1 3] • B(:,2) = [ ] • B = [79; 46; 13] • B = A(:,[2 2 2 2]) • B = [2 2 2 2; 5 5 5 5; 8 8 8]
Matrizes matriz(10) ou matriz(2,3)
Busca de Sub-Matrizes >> A= [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> [ i , j ] = find(A > 5) i = 3 j = 1 3 2 2 3 3 3 • >> x = -3:3 • x = • -3 -2 -1 0 1 2 3 • >> k = find(abs(x) > 1) • k = • 1 2 6 7 • >> y = x(k) • -3 -2 2 3
Alguns exemplos • x = [ 1 2 3 4], y = [ 1 1/2 1/3 1/4]; • x .* y % dot product • 1 1 1 1 • x * y' % scalar product • 4 • sqrt( x * x') %Comprimento vetor • 5.4722
Mais exemplos: resolução de sistemas de equações • 2x1 - x2 = 1 • X1 - 2x2 + x3 = 0 • - x2 + 2x3 = 1 • Ax = b; x = A-1b; x = A \ b
Mais exemplos: resolução de sistemas de equações • A = [ 2 -1 0; 1 -2 1; 0 -1 2]; • b = [1; 0; 1] • Em notação matricial Ax = b • x = A-1b; • X = inv(A) * b; • x = A \ b;
Gráficos Bidimensionais >> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> z = cos(x); >> plot(x,y,x,z)
Títulos, Rótulos e Grids >> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> plot(x,y,x,z); >> title('Grafico de y = sen(x)'); >> xlabel('Eixo x'); >> ylabel('Seno(x)');
Legendas >> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> z = cos(x); >> plot(x,y,x,z); >> legend('curva sen', 'curva cos');
Linhas: Estilos e Cores >> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> z = cos(x); >> subplot(2,1,1) >> plot(x,y,’go’) >> subplot(2,1,2) >> plot(x,z,’r*’)
Hold • Comando plot limpa a janela do gráfico antes de desenhar o novo gráfico • Isto não é conveniente se desejarmos adicionar outros gráficos no futuro • Usar hold para evitar limpeza da janela • plot(x,y,'w-'), hold on • plot(x,y,'gx'), hold off • hold off não limpa a janela (usar clf)
Subplots • A janela do gráfico é dividida em uma matriz m x n de pequenas janelas. • As janelas são contadas entre 1 e m x n • Cada subfigura é tratada como uma figura podendo ter mais de uma curva, estilos, legendas, cores etc
Subplots x = linspace(0,2*pi,30); y1 = sin(x); y2 = sin(2*x); y3 = sin(3*x); y4 = sin(4*x); subplot(221), plot(x,y1), legend('y = sen(x)'); subplot(222), plot(x,y2), legend('y = sen(2*x)'); subplot(223), plot(x,y2), legend('y = sen(3*x)'); subplot(224), plot(x,y4), legend('y = sen(4*x)');