Computação e Programação
1
Aula prática Nº 11
Introdução ao MatLab
O que é o MatLab?
O MatLab é um sistema para cálculo cient ífico que proporciona um ambiente de fácil
utilização com uma notação intuitiva mas poderosa. Permite a realização de algoritmos
numéricos sobre matrizes com o mínimo de programação. Além disso, no ambiente
MatLab é possível a criação e manipulação de matrizes sem a necessidade de
dimensionamento prévio e a manipulação das variáveis pode ser realizada de forma
interactiva. O termo “MatLab" tem origem na conjugação dos termos “MATrix" e
“LABoratory".
Figura 1 - Exemplos de aplicações do MatLab: gráfico 2D, processamento de imagens e gráficos 3D
Para iniciar o programa MatLab seleccionar as seguintes opções de menu:
Start → Programs → MatLab 7.0
1
Computação e Programação
Aula prática Nº 11
Execute o programa. O desktop apresentado na Figura 2 deverá aparecer no ecrã.
Figura 2 – Imagem do desktop por defeito do MatLab. A aparência exacta do desktop pode diferir
ligeira mente em diferentes tipos de computador.
A interface apresenta na barra de comandos superior diversas opções, incluindo help, no
qual se pode observar os diferentes comandos da linguagem, como será visto mais
adiante.
Os comandos são executados no MatLab pela linha de comando, através da prompt
" >>" e, após a confirmação através da tecla <Enter>.
O comando HELP
Para esclarecer a maior parte das dúvidas acerca da utilização de uma dada função do
Matlab o comando help é de grande utilidade. Se se pretender, por exemplo, informação
sobre a função sin, basta fazer
>> help sin
obtendo-se a seguinte descrição
SIN Sine.
SIN(X) is the sine of the elements of X.
O Matlab possui todas as funções organizadas em grupos e a própria estrutura de
directórios onde o Matlab é armazenado em disco reflecte esse facto. Por exemplo,
todas as funções de álgebra linear estão armazenadas no directório matfun. Para obter
uma lista completa deste tipo de funções basta fazer
>>help matfun
2
Computação e Programação
Aula prática Nº 11
Como não é fácil decorar os nomes de todas as categorias de funções, existe uma janela
de ajuda mais organizada, bastando para tal escrever o comando
>>helpwin
O comando LOOKFOR
Quando se pretende encontrar uma função para resolver um problema, mas desconhecese se existirá alguma adequada no Matlab, o comando lookfor permite pesquisar as
primeiras linhas do “help" de todas funções da instalação do Matlab. Esta pesquisa é
adequada para resolver a maior parte das situações uma vez que a primeira linha do
“help" de uma função contém sempre uma descrição sumária da sua funcionalidade. O
seguinte exemplo procura pela palavra “inverse".
>>lookfor inverse
Se se pretender que a função lookfor pesquise todas as linhas do “help", pode-se
utilizar a opção -all, tal como o seguinte exemplo ilustra.
>>lookfor -all inverse
O sistema Matlab
O sistema Matlab é constituído pelas seguintes partes:
A linguagem: Permite a manipulação e criação de matrizes de forma rápida e intuitiva.
Diferentes soluções para um problema podem ser testadas numa fracção do tempo que
levaria com outras linguagens (C ou Fortran por ex.). Possui um conjunto muito vasto
de funções que permitem resolver problemas complexos de forma eficiente.
O ambiente de trabalho: O Matlab proporciona um ambiente de trabalho que permite a
gestão e visualização das variáveis, ler e gravar variáveis em disco e gerar programas
em linguagem Matlab, possibilitando assim a automatização de cálculos complexos.
Gráficos: As funções de criação, visualização e manipulação de gráficos são muito
fáceis de usar e permitem a criação de gráficos 2D e 3D. O ajuste de escala é automático
e o utilizador pode começar a utilizar as funções de geração de gráficos pouco tempo
depois do primeiro contacto com o ambiente do Matlab.
"Toolboxes": O Matlab disponibiliza um conjunto de pacotes de funções para as mais
variadas áreas de cálculo cient ífico, sendo estes denominados “toolboxes". Existem
“toolboxes" para estatística, processamento de sinal, processamento de imagem,
controlo, cálculo simbólico, etc.
2
Arrays no MatLab
Um array é uma estrutura de dados organizada em linhas e colunas e identificado por
um nome unívoco. Valores individuais de um array são acedidos, incluindo o nome do
array seguido de subíndices entre parêntesis que identificam a linha e a coluna do valor
particular. O termo “vector” é geralmente usado para descrever um array com uma
3
Computação e Programação
Aula prática Nº 11
dimensão, e o termos “matriz” é geralmente usado para descrever um array com duas ou
mais dimensões.
Atribuição
A atribuição de um valor a uma variável pode ser realizada da seguinte forma:
>> x = 8
(não é necessário declarar a variável)
O MatLab responderá com
x =
8
Se o mesmo comando for digitado com o ";" no final da expressão
>> x = 8;
nada será exibido além do prompt de espera de um novo comando. Porém, ao digitar a
variável "x" e pressionar o <Enter>, aparecerá o conteúdo actual de "x":
x =
8
Criação de Matrizes
Uma matriz, por exemplo, pode ser criada através do comando:
>> A = [1 1 1; 2 2 2; 3 3 3]
ou
>> A = [1 1 1
2 2 2
3 3 3]
e o resultado, para ambos os casos, será
A =
1 1
2 2
3 3
1
2
3
Assim, o elemento a11 = 1 é o primeiro elemento da linha 1, coluna 1 da matriz A.
Quando são atribuídos valores às variáveis, estas guardam os valores até que novos
valores sejam atribuídos ou o programa seja encerrado. Para limpar o conteúdo das
variáveis, existe o comando "clear":
>> clear;
Comandos anteriormente submetidos ao MatLab podem ser recuperados e reexecutados a qualquer momento, usando-se a tecla de "seta para cima".
4
Computação e Programação
Aula prática Nº 11
Índices
O elemento da linha i e da coluna j de uma matriz A é designado por A(i; j). Por
exemplo o elemento da linha 1 e coluna 3 da matriz A é designado por A(1; 3). Em
notação Matlab, para obter o elemento A(1; 3) definida anteriormente, pode-se escrever
>>A(1,3)
e obtém-se
ans= 3
Para alterar o valor do elemento A(1; 3) para 7 basta fazer
>>A(1,3)= 7
Os índices das matrizes são números inteiros positivos pertencentes ao intervalo
[1 … N] em que N depende da memória disponível, e podem ser vectores declarados
anteriormente. Se pretendermos por exemplo, extrair a segunda linha da matriz A
podemos fazer
>>v= A(2,[1 2 3])
v=
4 5 6
ou declarando primeiro um vector para os índices das colunas
>>k= [1 2 3]
>>v= A(2,k)
v=
4 5 6
3
Utilização da ferramenta de Debug:
É muito mais comum fazer erros num programa que contém funções, estruturas e ciclos,
do que quando escrevemos um programa simples e sequencial. Mesmo garantindo que o
programa foi elaborado seguindo todas as regras de projecto, é quase totalmente
garantido que o programa conterá erros na primeira vez que for corrido. O MatLab
possui uma ferramenta de debug e para explorá-la vamos utilizar um programa simples:
% Ficheiro script: calcula_raizes.m
% Este programa calcula as raizes uma equacao quadratica da
% forma a*x^2 + b*x + c = 0, sejam elas reais ou complexas.
%
Data
Programador
Descricao da alteracao
%
====
=============
=====================
% 15/04/06
Joao M. C. Sousa
Codigo original
5
Computação e Programação
Aula prática Nº 11
%
% Definicao das variavais:
%
a
-- Coeficiente em x^2
%
b
-- Coeficiente em x
%
c
-- Termo constante
%
discriminante -- Discriminante
%
parte_imag
-- Parte imaginaria da equacao
%
raizes complexas)
%
parte_real
-- Parte real da equacao (para
%
complexas)
%
x1
-- Primeira solucao da equacao
%
raizes reais)
%
x2
-- Segunda solucao da equacao
%
raizes reais)
(para
raizes
(para
(para
% Pergunta ao utilizador os coeficientes da equacao
disp('Este programa calcula as raizes de uma equacao');
disp('quadratica da forma a*x^2 + b*x + c = 0.' );
a = input('Introduza o coeficiente a: ');
b = input('Introduza o coeficiente b: ');
c = input('Introduza o coeficiente c: ');
% Calcula o discriminante
discriminante = b^2 - 4 * a * c;
% Calcula as raizes dependendo do valor do discriminante
if discriminante > 0 % ha duas raizes reais
x1 = (-b + sqrt(discriminante)) / (2*a);
x2 = (-b - sqrt(discriminante)) / (2*a);
disp('Esta equacao tem duas raizes reais:');
fprintf('x1 = %f\n', x1);
fprintf('x2 = %f\n', x2);
elseif discriminante == 0 % ha uma raiz dupla
x1 = -b / (2*a);
disp('Esta equacao tem uma raiz dupla:');
fprintf('x1 = x2 = %f\n', x1);
else % existem duas raizes complexas
parte_real = -b / (2*a);
parte_imag = sqrt(abs(discriminante)) / (2*a);
disp ('Esta equacao tem raizes complexas:');
fprintf('x1 = %f +i %f\n', parte_real, parte_imag );
fprintf('x1 = %f -i %f\n', parte_real, parte_imag );
end
Queremos saber o que acontece se corrermos o programa. Para isso podemos adicionar
“breakpoints”, clicando com o botão direito do rato nas linhas em que temos interesse e
escolhendo a opção “Set/Clear Breakpoint”. Quando utilizamos um “breakpoint” numa
linha, aparece um ponto vermelho à sua esquerda. Uma vez criados os “breakpoints”
desejados, pode correr-se o programa, escrevendo o nome do programa na janela de
comandos. O programa correrá até encontrar o primeiro”breakpoint”. Aparecerá uma
seta verde na linha one o programa parou a execução. Neste ponto o programador pode
examinar e modificar qualquer variável do programa no “workspace”. Quando o
6
Computação e Programação
Aula prática Nº 11
programador estiver satisfeito pode continuar a correr o programa linh a linha
pressionando a tecla F10 ou pode correr o programa até ao próximo “breakpoint”
pressionado a tecla F5. É sempre possível observar os valores de qualquer variável em
qualquer ponto do programa.
4
Problemas de programação
1.
A maioria dos microfones desenhados para serem utilizados em palco é
microfones direccionais, que são construídos especificamente para realçar o sinal
recebido do cantor que está á frente do microfone e para o ruído provocado pela
audiência por trás do microfone. O ganho deste tipo de microfones varia em função do
ângulo de acordo com a seguinte equação:
EQUAÇÂO
Onde g é a constante associada a cada microfone, e θ é o ângulo formado pelo eixo do
microfone com a origem do som.
Assuma que g é igual a 0.5 para um dado microfone, e faça um gráfico do ganho do
microfone como função da direcção do som.
%
%
%
%
%
%
%
%
%
%
%
%
%
Ficheiro Script: microfone.m
Este programa faz o grafico padrao do ganho de um
microfone cardioide
Data
====
04/05/06
Programador
==========
Susana Vieira
Descricao da alteracao
=====================
Original code
Definicao das variaveis::
g
-- constante de ganho do microfone
ganho -- Ganho como função do angulo
theta -- Angulo do eixo do microfone (radians)
% Calcula o ganho versus o angulo
g = 0.5;
theta = 0:pi/20:2*pi;
ganho = 2*g*(1+cos(theta));
% Desenha o ganho
polar (theta,ganho,'r-');
title ('\bfGanho versus anglo \theta');
7
Computação e Programação
Aula prática Nº 11
2.
Num gás ideal todas as colisões entre moléculas são perfeitamente elásticas. É
possível pensar nas moléculas de um gás ideal como sendo bolas de snooker de rigidez
perfeita, que colidem e separam-se sem perder energia ciné tica.
Os gases ideais podem ser caracterizados por três grandezas: pressão absoluta (P),
volume (V) e temperatura absoluta (T). A relação entre estas grandezas para um gás
ideal, é conhecida como a Lei dos Gases Ideais:
EQUAÇÂO
Onde P é a pressão dos gases em kilopascais (kPa), V é o volume do gás em litros (L), n
é o número de moléculas do gás em unidades de moles (mol), R é a constante universal
dos gases ideais (8.314 L.kPa/mol.K) e T é a temperatura absoluta em Kelvin (K).
(Nota: 1 mol = 6.02 E23 moléculas)
Assuma que uma amostra de um gás ideal contém 1 mole de moléculas à temperatura de
273 K.
a) Como varia o volume do gás conforme a sua pressão varia entre 1 e 1000 kPa?
Faça o gráfico da pressão versus o volume para este gás para as condições
descritas. Use uma linha vermelha com espessura de 2 pixels.
b) Suponha que a temperatura do gás aumenta para 373 K. Como é que o volume
deste gás varia agora com a pressão? Faça o gráfico da pressão versus o volume
deste gás, na mesma figura utilizada anteriormente. Use uma linha de traço
interrompido azul, com espessura de 2 pixels.
Inclua um título no gráfico e uma legenda para cada um dos eixos, x e y, assim como
uma legenda para cada uma das linhas utilizadas.
%
%
%
%
%
%
%
%
%
%
%
%
%
%
Ficheiro Script: gas_ideal.m
Este programa faz o grafico da pressao versus o volume
de um gas ideal
%
n
R
T
Inicializar nRT
= 1;
= 8.314;
= 273;
Data
====
04/05/06
Programador
==========
Susana Vieira
Descricao da alteracao
=====================
Codigo Original
Definicao das variaveis:
n
-- Numero de atomos (mol)
P
-- Pressao (kPa)
R
-- Contante dos gases ideais (L kPa/mol K)
T
-- Temperatura (K)
V
-- volume (L)
% Moles de atomos
% Contante dos gases ideais
% Temperatura (K)
% Cria o array de pressoes de entrada.
8
Computação e Programação
Aula prática Nº 11
P = 1:0.1:1000;
% Calcula os volumes
V = (n * R * T) ./ P;
% Cria o primeiro grafico
figure(1);
loglog( P, V, 'r-', 'LineWidth', 2 );
title('\bfVolume vs Pressao num Gas Ideal');
xlabel('\bfPressao (kPa)');
ylabel('\bfVolume (L)');
grid on;
hold on;
% Aumenta a temperatura
T = 373;
% Temperatura (K)
% Calcula os volumes
V = (n * R * T) ./ P;
% Adiciona uma segunda linha ao grafico
figure(1);
loglog( P, V, 'b--', 'LineWidth', 2 );
hold off;
% Adiciona uma Legenda
legend('T = 273 K','T = 373 K');
9
Download

Introdução ao Matlab 7