Baixe o app para aproveitar ainda mais
Prévia do material em texto
Instituto Tecnológico de Aeronáutica – ITA Matemática Computacional – CCI-22 Tutorial sobre MATLAB Professor: Marcos Ricardo Omena de Albuquerque Maximo 23 de fevereiro de 2016 % é usado para comentários. Tipo de variável não precisa ser definido explicitamente (o MATLAB infere o tipo): x = 1 x = ’a’ x = ’abc’ ; é opcional (indica se o MATLAB deve imprimir o resultado ou não): x = 1 % imprime o resultado x = 1; % nao imprime resultado O MATLAB lida nativamente com vetores e matrizes: x = [1 2 3] % vetor linha x = [1; 2; 3] % vetor coluna x = [1 2 3; 4 5 6] % matriz 2x3 x = 2:2:6 % sequencia de numeros de 2 a 6, com passo 2 x = 2:-2:-10 x = 2:6 % passo eh assumido como 1 se for omitido Operações com vetores e matrizes: x = [1 2 3] y = [4 5 6] x + y x - y x * y % multiplicacao de matrizes invalida x’ % x transposto x’ * y % 3x3 x * y’ % 1x1 x .* y % multiplicacao elemento a elemento x ./ y % divisao elemento a elemento x.^3 % exponenciacao elemento a elemento x = [1 5 1; 5 1 1; 8 2 1] inv(x) x * inv(x) x * x^-1 Matriz inversa: 1 x = [1 5 1; 5 1 1; 8 2 1] inv(x) x * inv(x) x * x^-1 Indexação de matriz e submatrizes: x = [5 4 3 2 1] x(1) % MATLAB indexa a partir do 1 x(2:3) x(end) % ultimo elemento x(3:end) x(1:2:5) y = [2 4] x(y) x = [1 2 3 4 5; 6 7 8 9 10] x(:. 2:3) x(1, :) Alterar elementos de vetores ou matrizes: x = [1 2 3 4 5] x(3) = 10 x(2:3) = [5 6] x(7) = 10 % MATLAB aumenta a dimensao do vetor se necessario x = [1 2 3; 4 5 6] x(2,3) = 10 x(1:2, 1:2) = [1 0; 0 1] Concatenação: x = [1 2 3] y = [4 5 6] z = [x y] z = [x; y] Algumas funções do MATLAB são aplicadas a todos os elementos do vetor ou matriz: x = [1:5; -1:-1:-5] sqrt(x) % perceba que numeros complexos sao nativos exp(x) abs(x) O “help” do MATLAB é muito útil. Para saber como funciona uma função, digite: help sqrt help exp help abs help * % tambem funciona para operadores Algumas funções úteis para gerar matrizes: zeros(3,4) % matriz de zeros ones(4,3) % matriz de uns diag([1 2 3]) % matriz diagonal eye(3) % matriz identidade rand(3) % matriz 3x3 de numeros aleatorios entre 0 e 1 rand(3,4) % matriz 3x4 de numeros aleatorios entre 0 e 2 Escrever mensagem na tela: x = 1 disp(’x vale 1’) disp(sprintf(’x vale %d’, x)) Entrada do usuário: frase = ’Entre um numero: ’ x = input(frase) Controle de fluxo: for i=1:5 if i < 3 disp(sprintf(’%d eh menor que 3’)) elseif i == 3 disp(sprintf(’%d eh igual a 3’)) else disp(sprintf(’%d eh maior que 3’)) end % fecha o if end % fecha o for x = 1 while x ~= 10 x = x + 1 end Struct: x = struct() x.a = 1 x.b = ’abc’ x.c = [1 2 3] Escrita e leitura de arquivo: clear % limpa o workspace x = rand(10,2) y = ones(2,10) save(’arquivo’) % salva workspace como arquivo .mat w = load(’arquivo’) % carrega workspace como struct save(’arquivo_ascii.txt’, ’x’, ’-ascii’) % salva variavel x % Note que o arquivo .txt salvo como ascii eh legivel z = load(’arquivo_ascii.txt’) x - z < 10^-5 Arquivo .m (script/função): % Script eh uma sequencia de commandos edit somaQuadrados.m % editar o script (cria se nao existir) Entre com o seguinte código para o script somaQuadrados.m: soma = 0 for i=1:10 soma = soma + i*i end Para executar o script, basta digitar o seu nome na Command Window : 3 somaQuadrados Transformar o script em função (recebe argumentos): function soma = somaQuadrados(N) % Calcula soma dos quadrados dos N primeiros numeros naturais. % Obs.: comentarios logo apos o cabecalho sao o help da funcao. soma = 0; for i=1:N soma = soma + i * i; end % fecha o for end % fecha a funcao Testar a função: s = somaQuadrados(3) s = somaQuadrados(10) help somaQuadrados Cada função acessível da Command Window deve estar em um arquivo .m separado. Porém, pode-se criar funções auxiliares (não acessíveis da Command Window) dentro do mesmo .m: function soma = somaQuadrados(N) % Calcula soma dos quadrados dos N primeiros numeros naturais. % Obs.: comentarios logo apos o cabecalho sao o help da funcao. soma = 0; for i=1:N soma = soma + quadrado(i); end % fecha o for end % fecha a funcao function x2 = quadrado(x) x2 = x * x; end Note que funções no MATLAB sempre passam argumentos por valor. Uma função pode ter mais de um retorno em MATLAB: function [soma, produto] = calculaSomaProduto(a, b) % Calcula a soma e o produto de dois numeros a e b. soma = a + b; produto = a * b; end Comandos de diretório: ls % lista arquivos do diretorio atual cd .. % volta uma pasta 4 cd <nome_da_pasta>/ % entra na pasta <nome_da_pasta> O MATLAB encontra scripts e funções que estão no diretório atual ou no path: path % lista diretorios incluidos no path addpath(’<nome_do_diretorio>’) % adiciona diretorio ao path Gráficos: t = 0:0.01:1 x = sin(2*pi*t) % senoide de frequencia 1 Hz plot(t,x) y = sin(2*pi*2*t) % senoide de frequencia 2 Hz plot(t,y, ’r’) % novo plot sobrescreve o anterior % ’r’ gera grafico com linha vermelha (red) plot(t,x) hold on % faz com que novos graficos sejam desenhados em cima do atual plot(t,y,’r’) xlabel(’Tempo (s)’) ylabel(’Voltagem (V)’) legend(’senoide 1 Hz’, ’senoide 2 Hz’) title(’Graficos de senoides’) grid on % Coloca uma malha no grafico (ajuda a ler) % salva figura como png print -dpng grafico.png % salva figura com 400 dpi (melhor resolucao) print -dpng -r400 grafico400.png % .eps eh interessante se usar editor de texto LaTeX print -depsc2 grafico.eps figure % cria nova figura t = 0:0.1:1 plot(t,t.^2,’g*-’) % pontos sao marcados com * Medindo tempo: tic; for i=1:10000 for j=1:10000 k = i * j; end end tempoDecorrido = toc; Tamanhos de vetores e matrizes: x = [1 2 3] comprimento = length(x) x = [1 2 3; 4 5 6] tamanho = size(x) numLinhas = tamanho(1) numColunas = tamanho(2) numLinhas = size(x,1) numColunas = size(x,2) Iterando sobre uma matriz: x = rand(10,5); 5 numLinhas = size(x,1); numColunas = size(x,2); soma = 0; for i=1:numLinhas for j=1:numColunas soma = soma + x(i,j); end end soma % imprime a soma 6
Compartilhar