Introdução ao MATLAB -...

23
Introdução ao MATLAB Afonso Paiva ICMC-USP Parte II

Transcript of Introdução ao MATLAB -...

Introdução ao MATLAB

Afonso Paiva ICMC-USP

Parte II

� Dado o sistema linear

Como encontrar a solução x no MATLAB?

1

2

3

1 2 3 3664 5 6 . 8047 8 0 351

xxx

⎡ ⎤ ⎡ ⎤ ⎡ ⎤⎢ ⎥ ⎢ ⎥ ⎢ ⎥=⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦ ⎣ ⎦

Sistemas lineares

A x b⋅ =

Sistemas lineares

�  Através do cálculo explícito da inversa de A:

>> A = [ 1 2 3; 4 5 6; 7 8 0]; >> det(A) %primeiro vamos ver se o sistema tem solução única

ans = 27

>> b = [366; 804;351];

>> x = inv(A)*b x = 25.0000 22.0000 99.0000

1x A b−= ⋅

Sistemas lineares

�  Outra maneira é utilizar a decomposição LU, representada no MATLAB pelo operador de divisão à esquerda (\):

>> x = A\b x = 25.0000 22.0000 99.0000

Programação em MATLAB

�  programas muito mais simples: escrita mais rápida e com menos erros

�  versatilidade, mais fácil de adaptar a diferentes tipos de dados

�  agiliza os comandos mais digitados �  é uma linguagem interpretada �  pode ser criada utilizando qualquer editor de texto

�  possui interface com C/C++

Controladores de fluxo

�  if : cria caminhos alternativo no programa if ( condição1 ) instruções1 elseif ( condição2 ) instruções2 else instruções3 end

Controladores de fluxo

�  Exemplo com if: x=rand(1); y=rand(1); if (x < y) disp('y eh maior do que x') else disp('x eh maior do que y') end

Controladores de fluxo

� Mais um exemplo com if: x=4*rand(1); if ( ( x>=1 ) && ( x<=3 ) ) disp('x estah entre 1 e 3') end

Controladores de fluxo

�  for : permite que um comando ou um grupo de comandos se repitam

for variável = expressão instruções end

Controladores de fluxo

�  Exemplo com for:

n=3; A = zeros(n); for i = 1:n A(i,i) = 2*i; end

Controladores de fluxo

�  Exemplo usando if e for >> nrows = 10; % Alocando a matriz !>> ncols = 10; !>> myData = ones(nrows, ncols); !!>> % Preencher a matriz !>> for r = 1:nrows !>> for c = 1:ncols !>> if r == c !>> myData(r,c) = 2; !>> elseif abs(r - c) == 1 !>> myData(r,c) = -1; !>> else !>> myData(r,c) = 0; !>> end !>> end !>> end!!>> myData % Ver a matriz!

Controladores de fluxo

� while : permite que um ou mais comandos sejam repetidos enquanto a expressão de controle for verdadeira

while ( condição ) instruções end

Controladores de fluxo

�  Exemplo com while: i=0; while ( sqrt(i) < 5 ) i = i+1 end

Controladores de fluxo

�  switch : Permite ramificar alguns casos especiais de modo mais claro do que o if

switch ( expressão do switch ) case expressão caso_1 instruções case expressão caso_2 instruções case expressão caso_n instruções otherwise % opcional instruções end

Controladores de fluxo

�  Exemplo com switch meu_numero = input('Digite um numero:'); switch meu_numero case -1 disp('-1'); case 0 disp('zero'); case 1 disp('+1'); otherwise disp('outro valor'); end

Funções auxiliares no controle de fluxo

�  input –recebe dados através do teclado, que podem ser ou não armazenados em uma variável

�  break – encerra um laço mais interno controlado pelo comando for

�  pause – pára a execução do programa até

que uma nova tecla seja pressionada

Arquivos .m

�  podemos criar novas funções ou scripts � MATLAB possui um editor próprio e um

debugger �  comentários começam por % �  ao se criar uma função ou script ela dever

ser definida no path

Arquivos .m

�  scripts : executam os argumentos diretamente, automatizando uma série de comandos

�  função : argumentos podem ser passados para a função, havendo uma manipulação de variáveis

function [res1,res2,...] = nome_func (arg1,arg2,...) % comentário para help lista de procedimentos da função

A função será salva em um arquivo e o nome do arquivo deve ter o mesmo nome dado à função 'nome_func.m'.

O script pode ter qualquer nome.

Arquivos .m

ATENÇÃO!!!

�  Um script pode chamar uma função. �  Uma função pode chamar outra função. �  Para isso é necessário que os arquivos .m

estejam no mesmo diretório. �  Não use nomes de funções já existentes no

MATLAB. �  Não use “espaços” no nome da função, “_” é

uma boa opção.

Scripts

�  Exemplo de script: hipotenusa.m: % Calcula a hipotenusa de um triangulo retângulo

clc c1=input('Cateto 1 = '); c2=input('Cateto 2 = '); hipotenusa = sqrt( c1^2 + c2^2)

Funções

�  Exemplo de função: fatorial.m: function f = fatorial(n) % Calcula o fatorial de n f=1; for i=1:n f = f*i; end

Funções

�  Defina duas funções em um arquivo chamado stat2.m, onde a primeria função chama a segunda. function [m,s] = stat2(x) n = length(x); m = media(x,n); s = sqrt(sum((x-m).^2/n)); end

function m = media(x,n) m = sum(x)/n; end

�  Função media é uma função local.

>> values = [12.7, 45.4, 98.9, 26.6, 53.1]; >> [media,desvio_padrao] = stat2(values)

media = 47.3400 desvio_padrao = 29.4124

Exercícios

1.  Faça um script que leia duas matrizes e faça o produto entre elas. (Use o algoritmo dado em sala de aula)

2.  Faça uma função que tenha como entrada um número real e como saída sua representação na base 2.

3.  Faça uma função que calcule a norma da soma de um vetor.

Não esqueça de implementar as

condições necessárias para cada um deles!