Mini Curso
Alexandre Branquinho Rocha mail: branquinho@sc.usp.br
Aula 1
Introdução 3/12/2009
2
Aplicações:
Simulação Jogos ◦ Inteligência Artificial ◦ Redes Neurais
Instrumentação Automação Medicina
3/12/2009
3
Problemas Encontrados na Engenharia
3/12/2009
Resolver equações muito extensas Resolver Sistemas Resolver Integrais Resolver Derivadas Traçar Gráficos Encontrar Valores de: ◦ Máximo ◦ Mínimo ◦ Interseção 4
Iniciando o MATLAB
Selecione inicialmente o diretĂłrio onde serĂŁo salvos e executados os programas criados!
3/12/2009
5
Janelas
WorkSpace – mostra todas as variáveis utilizadas no programa.
Command History – mostra o histórico dos comandos dados ao MATLAB no Command Window 3/12/2009
6
Variáveis do Programa
Podem ter no máximo 31 caracteres; Os nomes devem começar com LETRAS; Caracteres de pontuação NÃO são permitidos; Distinção de maiúsculas e minúsculas;
Custo ≠ custo ≠ CuSto ≠ CUSTO ... 3/12/2009
7
Observações
Para resolver integrais e derivadas devemos fazer uso antes da função syms dizendo assim ao programa para tratar como símbolo a variável do problema em questão.
3/12/2009
8
Observações
Exemplo: syms x y z
Dizemos assim ao programa para tratar as variáveis x, y e z como símbolos.
Para retornar os símbolos a forma de variáveis, devemos fazer uso da função sym2poly(_____)
3/12/2009
9
Resolvendo equações extensas 3,87 ⋅ π x = 154 2 + x 2 − 963 ⋅ x + 4625 − 784 ⋅ x 2 + sen + 4 ,782 ⋅ tg (0 .156 ) − 12 ⋅ x 3 1, 29
x=solve('x=154^2+x^2-963*x+4625784*x^2+sin(3.87*pi/1.29)+4.782*tan(0.156)12*x^3') x= 5.2463512724443844694933368035694 -7.1012054591718830367351002104524 -63.395145813272501432758236593117
3/12/2009
10
Resolvendo um Sistema x 2 ⋅ y 2 − 2 ⋅ x − 390 = 0 2 2 x − y −9 = 0 [x,y]=solve('(x^2)*(y^2) - 2*x - 390 = 0','(x^2) - (y^2) - 9 = 0') x= [ 5] [ 5] y= 3/12/2009
[ 4] [ -4]
Soluções
:
(5 , 4 ) (5 , − 4 ) Soluções Reais
11
Resolvendo Integrais f (x ) =
∫ (sen (x )) ⋅ dx π f (x ) = ∫ 36 ⋅ cos (3 ⋅ x − π π
syms x y
2
2
−
f (x , y ) =
2
∫ ∫ (x 10
3
0
−5
3
4 ) ⋅ dx
)
− 4 ⋅ y ⋅ dy ⋅dx
f=int((sin(x))^2) f = -1/2*sin(x)*cos(x)+1/2*x f=int(36*cos(3*x-pi/4),x,-pi/2,pi/2) f = -12*2^(1/2)
3/12/2009
f=int(int(x^3-4*y,y,-5,3),x,0,10) f = 20320
12
Resolvendo Derivadas f (x ) =
d (5 ⋅ cos (5 ⋅ x )) dx d d f (x ) = x 2 + 5 ⋅ x − 10 dx dx d (sen ( x ⋅ y )) f (x ) = dx
(
syms x y
)
f= diff(5*cos(5*x)) f = -25*sin(5*x) f= diff(diff(x^2+5*x-10)) f=2
3/12/2009
f= diff(sin(x*y),x) f = cos(x*y)*y
13
Criação de Vetores
3/12/2009
14
Criação de Vetores
3/12/2009
15
Orientação de Vetores
O ‘ funciona como operador de transposição.
3/12/2009
16
Criação de Matrizes
3/12/2009
17
Criação de Matrizes
3/12/2009
18
Localização Lógica
3/12/2009
19
Busca em Matrizes
Os Elementos maiores que 5 estão nas posições: [3,1] ; [3,2] ; [2,3] ; [3,3]
3/12/2009
20
DimensĂŁo de Vetores e Matrizes
3/12/2009
21
Inserindo Elemento na Matriz
3/12/2009
22
Traçando Gráficos O comando plot do MATLAB pode traçar tanto um ponto com coordenadas x e y definidos, mas também pode traçar curvas, onde x e y entram no gráfico na forma de vetores. O comando plot3 é utilizado para gerar gráficos 3D e segue o mesmo princípio do comando plot
3/12/2009
23
Traรงando Grรกficos 2D
3/12/2009
24
Traรงando Grรกficos 3D
3/12/2009
25
Traçando Superfícies
3/12/2009
26
Aula 2
Grรกficos 3/12/2009
27
SubGráficos
Seleciona o Gráfico no alto, à esquerda, de uma grade 2 por 2 de subgráficos 3/12/2009
28
SubGrรกficos
3/12/2009
29
SubGrรกficos
3/12/2009
30
SubGrรกficos
3/12/2009
31
SubGrรกficos
3/12/2009
32
Grรกficos Bidimensionais Especializados
3/12/2009
33
Grรกficos Bidimensionais Especializados
3/12/2009
34
Grรกficos Bidimensionais Especializados
3/12/2009
35
Grรกficos Bidimensionais Especializados
3/12/2009
36
Grรกficos em Escalas Diferentes
3/12/2009
37
Grรกficos em Escalas Diferentes
3/12/2009
38
Dicas Importantes - Gráficos
Comando close: ◦ close – fecha a janela de Figure ativa ◦ close(h) – fecha a janela Figure com o handle h. ◦ close all – fecha todas as janelas Figure.
Comando clf: ◦ clf – limpa a janela Figure ativa. ◦ clf reset – limpa a janela Figure ativa e devolve todas as propriedades, como hold, a seu estado padrão.
3/12/2009
39
Tipos de Grรกficos
3/12/2009
40
Tipos de Grรกficos
3/12/2009
41
Tipos de Grรกficos
3/12/2009
42
Tipos de Grรกficos
3/12/2009
43
Tipos de Grรกficos
3/12/2009
44
Tipos de Grรกficos
3/12/2009
45
Tipos de Grรกficos
3/12/2009
46
Exercício - Tipos de Gráficos
Criar a placa a seguir:
3/12/2009
47
Exercício - Tipos de Gráficos
3/12/2009
48
Exercício - Tipos de Gráficos
3/12/2009
49
Exercício - Tipos de Gráficos
3/12/2009
50
Resolução - Tipos de Gráficos %Limpa Variaveis e Tela clear all; close all; clc;
%Cria Retangulo Azul xquad1=[-5 5 5 -5]; yquad1=[-7.5 -7.5 7.5 7.5];
3/12/2009
51
Resolução - Tipos de Gráficos %Cria Retangulo Branco xquad2=[-4 4 4 -4]; yquad2=[-1.5 -1.5 6.5 6.5];
%Cria Cruz xcruz=[-0.5 0.5 0.5 3.5 3.5 0.5 0.5 -0.5 -0.5 -3.5 -3.5 -0.5 -0.5]; ycruz=[-1 -1 2 2 3 3 6 6 3 3 2 2 -1];
3/12/2009
52
Resolução - Tipos de Gráficos %Plota a Imagem fill(xquad1,yquad1,'b',xquad2, yquad2,'w',xcruz,ycruz,'r'); axis equal
3/12/2009
53
Resolução - Tipos de Gráficos %Insere o Texto text(0,-4,'Hospital','Color',[1,1,1], 'FontSize',40,'FontWeight','bold', 'HorizontalAlignment','center')
grid on axis square off axis equal
3/12/2009
54
Comandos Úteis Para Gráficos
figure(n) Onde n é o numero da figura plot3(x1,y1,z1,'o',x2,y2,z2,'*',x3,y3,z3,'d'); ◦ Plota 3 gráficos Tridimensionais (x1,y1,z1); (x2,y2,z2) e (x3,y3,z3)
grid on; Coloca Grid no Gráfico xlabel('Legenda do Eixo X'); ylabel('Legenda do Eixo Y'); zlabel('Legenda do Eixo Z'); title('Titulo do Gráfico'); legend('Legenda Graf.1', 'Legenda Graf.2', 'Legenda Graf.3');
3/12/2009
55
Exemplo de Grรกfico 2D com Legenda de Eixos e Linhas e Titulo
3/12/2009
56
Aula 3
Programando 3/12/2009
57
Criando programas facilmente
Quem já tentou programar no Command Window do MATLAB deve ter notado que não é fácil ficar repetindo uma série de comandos sempre que desejar alterar um dado no programa. Para resolver esse problema existe o Editor de programas. ◦ No menu File vá em New e clique em M-File, irá abrir o Editor de programas. Obs.: Ao salvar os programas e funções, deve-se prestar atenção de salvá-los todos em uma única pasta de trabalho, para facilitar sua chamada posterior.
3/12/2009
58
M-File
File
New
3/12/2009
M-File
59
Algumas Funções Básicas: if:
Se (if) acontecer determinado evento irá executar determinada operação, senão(else), executará outra; for: Repete um evento um determinado número de vezes; while: Repete um evento indeterminadas vezes até que a condição estipulada seja atingida; clc: Limpa a tela principal; clear: Limpa as variáveis da área de trabalho (workspace); input: Recebe dados do teclado; fprintf:Mostra na tela uma frase determinada pelo programador; 3/12/2009
60
Programa Exemplo 1:
Criar um Programa que receba 10 valores do teclado e os plote em um grĂĄfico. clear; clc;
%Limpa as VariĂĄveis %Limpa a Tela
x=[0 1 2 3 4 5 6 7 8 9];
%Cria um Vetor com 10 valores (0 a 9)
for a=1:1:10 %a varia de 1 atĂŠ 10 de 1 em 1 y(a)=input('Digite o Valor:');%Entrada de Valores de Y end %Plota os valores de x e y plot(x,y) 3/12/2009
61
Resultados do Programa 1:
3/12/2009
62
Operações Relacionais
Operadores Lógicos:
3/12/2009
63
Estruturas (for (for) ) for x=0:1:10 A função for irá repetir o loop do ponto inicial 0, variando de 1 em 1 até atingir o valor final 10.
Operações
3/12/2009
end
Serão executadas todas as operações existentes entre o for e o end Não é necessário limitar com chaves a área em que o loop deve agir, isso já é feito automaticamente pelo MATLAB.
64
Estruturas (while (while) ) while x<=100 A função while irá repetir as operações enquanto a condição (x≤100) não for satisfeita
Operações
3/12/2009
end
Serão executadas todas as operações existentes entre o while e o end Não é necessário limitar com chaves a área em que o loop deve agir, isso já é feito automaticamente pelo MATLAB.
65
Estruturas (if (if) ) if x<=10 Operação 1 elseif x>10 & x<50 Operação 2 else Operação 3 end
A função if impõe uma condição para que se ocorra uma determinada operação. Será executada a operação que estiver de acordo com as condições estipuladas Não é necessário limitar com chaves a área em que o loop deve agir, isso já é feito automaticamente pelo MATLAB.
3/12/2009
66
Estruturas (switch (switch) ) metodo = 'Bilinear'; switch lower(metodo) case {'linear','bilinear'} disp('Metodo é linear') case 'cubico' disp('Metodo é cubico') case 'nearest' disp('Metodo é nearest') otherwise disp('Metodo Desconhecido') end 3/12/2009
A função switch localiza uma condição d entrada ou um parâmetro de entrada em uma serie de casos. Após localizado a função realiza a operação abaixo dela informada. Será executada a operação que estiver de acordo com o parâmetro d entrada Não é necessário limitar com chaves a área em que o loop deve agir, isso já é feito automaticamente pelo MATLAB.
67
Exercício Exemplo 1
Fazer um programa que: ◦ Gere 2 gráficos com 15 valores aleatórios de 0 a 100; ◦ Encontre máximos e mínimos e mostre no gráfico; ◦ Encontre os pontos onde os gráficos se tocam; Obs.: Todos esses valores devem estar assinalados no gráfico
3/12/2009
68
Encontrando Máximos e Mínimos
Inicialmente, será gerado um gráfico bidimensional com 15 valores aleatórios de Y, que irão variar de 0 a 100.
clear all; close all; clc;
3/12/2009
%Gerando valores aleatórios para y1 e y2 for n=1:1:15 y1(n)=round(rand(1)*100); y2(n)=round(rand(1)*100); x(n)=n-1; end 69
Encontrando Máximos e Mínimos
Após o gráfico e os valores gerados, o programa de localização de máximos e mínimos será gerado.
%Localiza maximos em y1 e y2 ymax1=max(y1); xmax1=find(y1==ymax1)-1; ymax2=max(y2); xmax2=find(y2==ymax2)-1; ymax=max([ymax1 ymax2]); if ymax==ymax1 xmax=xmax1; else xmax=xmax2; end
3/12/2009
70
Encontrando Máximos e Mínimos
Após o gráfico e os valores gerados, o programa de localização de máximos e mínimos será gerado.
%Localiza minimos em y1 e y2 ymin1=min(y1); xmin1=find(y1==ymin1)-1; ymin2=min(y2); xmin2=find(y2==ymin2)-1; ymin=min([ymin1 ymin2]); if ymin==ymin1 xmin=xmin1; else xmin=xmin2; end
3/12/2009
71
Ageitando valores:
Após o gráfico e os valores gerados, o programa de localização de máximos e mínimos será gerado.
%Discretizando o gráfico passo=0.00001; xi=0:passo:(n-1); y1i=interp1(x,y1,xi); y2i=interp1(x,y2,xi);
%Para eliminar os números quebrados, acertamos qual a precisão necessária y1ix=round(100*y1i)/100; y2ix=round(100*y2i)/100;
3/12/2009
72
Localizando Interseções
%Encontrando interseções k=1; for a=1:1:(((n-1)/passo)+1) if y1ix(a) == y2ix(a) intersecaoY(k)=y1ix(a); intersecaoX(k)=xi(a); k=k+1; end end
3/12/2009
73
Localizando Interseções
%Plotando Gráfico
figure(1) subplot(2,1,1) plot(x,y1,'b--',x,y2,'r-'); title('Gráfico com pontos aleatórios'); legend('Graf. 1','Graf. 2'); xlabel('Eixo X'); ylabel('Eixo Y'); grid on; subplot(2,1,2)
3/12/2009
74
Localizando Interseções
plot(xi,y1i,'b--',xi,y2i,'r-',intersecaoX,intersecaoY,'og',... xmax,ymax,'or',xmax1,ymax1,'^b',xmax2,ymax2,'^c',... xmin,ymin,'or',xmin1,ymin1,'vb',xmin2,ymin2,'vc'); title('Gráfico com pontos de interseções marcados e maximos'); legend('Graf. 1','Graf. 2'); xlabel('Eixo X'); ylabel('Eixo Y'); grid on;
3/12/2009
75
Traçando o Gráfico com os pontos de interseção e de máximos e mínimos
3/12/2009
76
Criando Funções
Funções são bem úteis ao se criar um programa muito extenso e que recursivamente necessitam de um determinado cálculo, sendo assim, as funções se tornam muito úteis para limpar o programa visualmente.
3/12/2009
77
Dúvidas de sintaxe: O Matlab possui um grande número de funções já prontas, e devido a isso, muitas delas não vamos conseguir decorar a sintaxe corretamente, sabendo disso, vamos fazer uso da função help para encontrar a sintaxe correta. 3/12/2009
78
Dúvidas de sintaxe:
O caso anterior é usado quando já se sabe qual a função a ser usada para se resolver o problema, mas no caso de não se saber qual a função a ser usada, podemos fazer o uso do Help localizado na barra de tarefas do menu principal.
3/12/2009
79
ConversĂľes
3/12/2009
80
Rotinas de Alto Nível
3/12/2009
Salvar Arquivos:
O arquivo gerado leva a extensão .mat ◦ Nome_do_Arquivo.mat
81
Rotinas de Alto Nível
Carregar Arquivos:
y=load(‘Nome_do_Arquivo’,’a’) retorna apenas a variável a na estrutura y.
3/12/2009
82
Comandos
Serรฃo citados a seguir vรกrios comandos separados por รกreas, com a finalidade de auxiliar em programas mais complexos.
3/12/2009
83
Formato Numérico:
Operações Básicas:
3/12/2009
84
Operações Relacionais:
Operações entre Vetores:
3/12/2009
85
Detalhes do Gráfico:
Anotações no Gráfico:
3/12/2009
86
Comandos para Plotar Grรกficos Bidimensionais:
3/12/2009
87
Comandos para Plotar Grรกficos Tridimensionais e Contornos:
3/12/2009
88
Operadores Lógicos:
Comentários e Pontuações:
3/12/2009
89
Algumas Funções Matemáticas:
3/12/2009
90
Construção de Vetores:
Funções Relacionadas a Matrizes:
3/12/2009
91
Programa Desafio
O programa a seguir tem o intuito de despertar dúvidas com relação a programação, para assim poder resolve-las da melhor forma possível.
3/12/2009
92
Programa 2:
Criar um programa que faรงa o seguinte: - Plotar uma matriz aleatรณria 4x4 com valores de 0 a 100 apenas com valores inteiros; - Encontrar o MAIOR e o MENOR Elemento da Matriz; - Colocar os valores em ordem crescente; - Mostrar os valores na tela; - Plotar os valores em ordem crescente em um grรกfico. Todos esses dados devem estar no mesmo programa.
3/12/2009
93
Dicas: Consulte as funções rand e round, elas podem ser úteis para o inicio do problema!!! Seria interessante olhar como se faz para criar uma função e como chamá-la dentro do programa principal, mesmo não sendo necessário para este exercício!!!
3/12/2009
94
Resolução:
close all clear all clc
%Plotar uma matriz aleatória 4x4 com valores de 0 a 100 apenas com valores inteiros i=4; %Linhas j=4; %Colunas
MATRIZ=rand([i,j]); MATRIZ=MATRIZ*100; MATRIZ=round(MATRIZ);
3/12/2009
95
Resolução:
%Encontrar o MAIOR e o MENOR Elemento da Matriz!!! VetMin=min(MATRIZ); VetMax=max(MATRIZ); Menor=100; Maior=0;
3/12/2009
for a=1:1:j if Menor>VetMin(a) Menor=VetMin(a); elseif Maior<VetMax(a) Maior=VetMax(a); end end 96
Resolução:
%Colocar os valores em ordem crescente k=1; for a=0:1:100 for b=1:1:i for c=1:1:j if MATRIZ(b,c)==a Crescente(1,k)=a; k=k+1; end end end end
3/12/2009
97
Resolução:
%Mostrar os valores na tela:
fprintf('A Matriz Utilizada Foi: \n\n') MATRIZ fprintf('O MENOR valor da Matriz é: \n\n') Menor fprintf('O MAIOR valor da Matriz é: \n\n') Maior fprintf('A ordem CRESCENTE dos valores é: \n\n') Crescente
3/12/2009
98
Resolução:
%Plotar os valores em ordem crescente em um grafico!!! x=1:1:i*j; plot(x,Crescente) grid on
3/12/2009
99
Duvidas???
3/12/2009
100
OBRIGADO!!!
3/12/2009
101