6
Tutorial do MATLAB Matemática Computacional – CCI-22 Data: 6 de março de 2015 Professor: Marcos Ricardo Omena de Albuquerque Maximo Tela do MATLAB: Current Folder: mostra arquivos do diretório atual. Command Window: console interativo onde são entrados comandos. Workspace: variáveis atualmente definidas. Command History: histórico de comandos. Observação: algumas dessas janelas podem estar fechadas. % é usado para comentário. 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

Tutorial+do+MATLAB+-+CCI-22+-+2015+-+Marcos+Maximo

Embed Size (px)

DESCRIPTION

cci22

Citation preview

  • Tutorial do MATLAB

    Matemtica Computacional CCI-22

    Data: 6 de maro de 2015

    Professor: Marcos Ricardo Omena de Albuquerque Maximo

    Tela do MATLAB:

    Current Folder: mostra arquivos do diretrio atual.

    Command Window: console interativo onde so entrados comandos.

    Workspace: variveis atualmente definidas.

    Command History: histrico de comandos.

    Observao: algumas dessas janelas podem estar fechadas.

    % usado para comentrio.

    Tipo de varivel no 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 no):

    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

    Operaes 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 % exponenciao elemento a elemento

    x = [1 5 1; 5 1 1; 8 2 1]

    inv(x)

    x * inv(x)

    x * x^-1

    Matriz inversa:

    x = [1 5 1; 5 1 1; 8 2 1]

    inv(x)

    x * inv(x)

    x * x^-1

    Indexao 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]

    Concatenao:

    x = [1 2 3]

    y = [4 5 6]

    z = [x y]

  • z = [x; y]

    Algumas funes do MATLAB so 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 funo, digite:

    help sqrt

    help exp

    help abs

    help * % tambem funciona para operadores

    Algumas funes 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 1

    Escrever mensagem na tela:

    x = 1

    disp('x vale 1')

    disp(sprintf('x vale %d', x))

    Entrada do usurio:

    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/funo):

    % Script eh uma sequencia de commandos

    edit somaQuadrados.m % editar o script (cria se nao existir)

    Entre com o seguinte cdigo 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:

    somaQuadrados

    Transformar o script em funo (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 funo:

    s = somaQuadrados(3)

    s = somaQuadrados(10)

    help somaQuadrados

    Cada funo acessvel da Command Window deve estar em um arquivo .m separado. Porm,

    pode-se criar funes auxiliares (no acessveis 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

    Comandos de diretrio:

    ls % lista arquivos do diretorio atual

    cd .. % volta uma pasta

    cd / % entra na pasta

    O MATLAB encontra scripts e funes que esto no diretrio atual ou no path:

    path % lista diretorios incluidos no path

    addpath('') % adiciona diretorio ao path

    Grficos:

    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);

    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

    Exerccios:

    1. Crie uma funo que plote num nico grfico at 7 senides de frequncias diferentes

    tal que a frequncia da senide posterior o dobro da anterior. O usurio deve

    fornecer como entrada o nmero de senides e a frequncia inicial. Cada senide deve

    ter uma cor distinta. Dicas:

    Veja o help da funo plot para descobrir as cores disponveis.

    Utilize um vetor de nomes de cores (exemplo para 4 cores: cores = ['b' 'r'

    'g' 'k']).

    2. Gere o grfico da funo abaixo no intervalo [2,2].

    () =

    {

    2, [2,1)

    2 + 1, [1,1

    2)

    0, [1

    2,1

    2)

    2 1, [1

    2, 1)

    2, [1,2]

    3. Implemente mergesort no MATLAB.