Você está na página 1de 56

2

Prefácio

Vem esta publicação na sequência do trabalho feito pelo autor no âmbito da


remodelação do ensino de Métodos Numéricos, efectuado em conjunto com os
colegas Prof. Vítor Costa, Prof. José Matos, Dra Elsa Gomes e Dr. João Matos.
Quando nos decidimos tentar proporcionar aos alunos de Métodos Numéricos uma
preparação o mais actual possível quer em termos do que se faz noutras instituições
de grande prestígio, quer em termos do que os alunos poderão vir a aplicar no mer­
cado de trabalho, já suspeitávamos que as dificuldades iam ser diversas: Se por um
lado estávamos a começar numa área aonde tudo o que havia eram projectos­piloto,
por outro lado tínhamos consciência de que as condições de trabalho para os alunos
não seriam as melhores, quer devido ao diminuto ratio computador/aluno, quer à
fraca experiência que estes tinham com o software em causa. Se em relação às
primeiras muito pouco podemos fazer, em relação à última dificuldade é possível
tentar minimizar os seus efeitos nefastos. Foi esse pensamento que presidiu a este
trabalho, que tem sido actualizado todos os anos graças às sugestões e comentários
dos que tem tido contacto com ele, desde alunos a professores. Ao começá­lo,
nunca foi minha intenção ensinar os alunos a trabalharem com o MatLab. Ape­
nas pretendo que possam aprender a usar o MatLab para que saibam encontrar, se
necessário com a ajuda dos docentes, a solução para o que quer que procurem den­
tro do âmbito do software. Como tal, procurei basear estas breves linhas no que a
minha experiência me diz serem as dificuldades mais comuns e as principais linhas
desmotivadoras para alguém que contacta com o MatLab pela primeira vez. Assim
sendo, terei todo o gosto em receber os vossos comentários (mbc@isep.ipp.pt) a
estas notas para que os alunos vindouros possam receber uma versão melhorada.
Manuel Cruz

3
4
Conteúdo

1 Introdução 7
1.1 Considerações Gerais . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Aritmética Básica . . . . . . . . . . . . . . . . . . . . . . 9
1.1.2 Funções Matemáticas Elementares . . . . . . . . . . . . . 10
1.1.3 Formatos e Limites de Utilização . . . . . . . . . . . . . 10

2 Vectores e Matrizes 13
2.1 Definições e Atribuições Básicas . . . . . . . . . . . . . . . . . . 13
2.2 Casos Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Chamadas de Subvectores e Submatrizes . . . . . . . . . . . . . . 17
2.4 Operações Elementares . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.1 Adição e Subtração . . . . . . . . . . . . . . . . . . . . . 18
2.4.2 Multiplicação Vectorial . . . . . . . . . . . . . . . . . . . 18
2.4.3 Potenciação Matricial . . . . . . . . . . . . . . . . . . . . 19
2.4.4 Operações Elemento a Elemento . . . . . . . . . . . . . . 20
2.4.5 Comandos Específicos . . . . . . . . . . . . . . . . . . . 22

3 Gráficos 23
3.1 Gráficos 2­D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1 O Comando plot . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2 O Comando scatter . . . . . . . . . . . . . . . . . . . . . 27
3.1.3 Os Comandos semilogx, semilogy e loglog . . . . . . . . . 28
3.1.4 O Comando subplot . . . . . . . . . . . . . . . . . . . . 28
3.1.5 Os comando ezplot e fplot . . . . . . . . . . . . . . . . . 29
3.1.6 Outros gráficos . . . . . . . . . . . . . . . . . . . . . . . 32
3.2 Outros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.1 O comando figure . . . . . . . . . . . . . . . . . . . . . . 33
3.2.2 O comando hold . . . . . . . . . . . . . . . . . . . . . . 33
3.2.3 O comando grid . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.4 O comando ginput . . . . . . . . . . . . . . . . . . . . . 34
3.2.5 Legendas, eixos e labels . . . . . . . . . . . . . . . . . . 34

5
6 CONTEÚDO

4 Instruções Básicas de Programação 35


4.1 Definição de uma função matemática . . . . . . . . . . . . . . . . 35
4.1.1 Através de um m­file . . . . . . . . . . . . . . . . . . . . 36
4.1.2 Através do comando inline . . . . . . . . . . . . . . . . . 38
4.1.3 Definindo variáveis simbólicas . . . . . . . . . . . . . . . 39
4.2 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3 Operadores de controlo de fluxo . . . . . . . . . . . . . . . . . . 42
4.3.1 Ciclo for . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.2 Instrução if . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.3 Ciclo while . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.4 Instrução switch . . . . . . . . . . . . . . . . . . . . . . 44
4.4 Scripts e Funções . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5 Construção de funções em MatLab . . . . . . . . . . . . . . . . . 48
4.5.1 Parâmetros de entrada . . . . . . . . . . . . . . . . . . . 49
4.5.2 Parâmetros de Saída . . . . . . . . . . . . . . . . . . . . 51

5 O Help do MatLab 53

6 Alguns exercícios de aplicação 55


Capítulo 1

Introdução

O MatLab (abreviatura de Matrix Laboratory ) é uma marca de software com­


ercial desenvolvido pela Mathworks. A sua página na Internet pode ser consultada
em www.mathworks.com . Este é um software de programação interactivo, com
um output gráfico. A sua utilização está­se a tornar comum em áreas chave, tais
como a Matemática, Engenharia, Medicina, Economia etc... . Grande parte do
sucesso deste software, que tem vindo a assumir­se como substituto de algumas
linguagens de programação, deve­se a diferentes factores: desde a solidez dos al­
goritmos base, à facilidade e rapidez de cálculo, passando pelo ambiente de tra­
balho com excelentes potencialidades gráficas. Pelo exposto anteriormente parece
descabido, em cursos de Engenharia, ignorar a existência de tal software. Como
tal optou­se por fazer uma pequena demonstração para ser possível aos alunos
poderem ter um primeiro contacto com o software no âmbito da disciplina.

1.1 Considerações Gerais


A versão utilizada na preparação deste tutorial foi a versão 6.5. para Windows.
No entanto, é muito provável que a este nível, não existam grandes diferenças entre
esta versão e versões anteriores (ou posteriores) do software.
Abrindo o MatLab (versão 6.5), depara­se o utilizador com três janelas fundamen­
tais 1 :

• Command Window ­ Janela aonde se podem executar todos os comandos.


(denotada daqui para a frente como "Janela de Comando")

• Workspace ­ Janela que apresenta todas as variáveis correntemente definidas.

• Command History ­ Janela que guarda as últimas instruções executadas pelo


utilizador.

Além destas três janelas, vale a pena referir ainda mais dois items
1 Se tal não acontecer, faça View > Desktop Layout > Default

7
8 CAPÍTULO 1. INTRODUÇÃO

• Launch Pad ­ Símbolo(do MatLab) no canto inferior esquerdo, que contém


todos as toolboxes e seu conteúdo, que são fornecidas com o software.

• Current Directory ­ Janela que apresenta todos os ficheiros gravados no di­


rectório de trabalho. (Por defeito: MatLabR../.../Work )
Tudo isto pode ser visto na figura seguinte.

Figura 1.1: Ambiente do MatLab 6.5

Se pretender fechar agora o MatLab, basta para tal digitar o comando

>>quit

na janela de comando. Aproveita­se também esta referência para indicar que,


daqui para a frente sempre que se referir que deve ser executada uma instrução na
janela de comando, se pressupõe que a tecla enter é pressionada após a introdução
dessa instrução. (Sem ofensa para quem este comentário é por demais evidente.)
Querendo guardar todos comandos digitados na sessão num ficheiro, basta fazer,
no início da sessão, diary nomedoficheiro. Por exemplo, digitando na janela de
comando,
1.1. CONSIDERAÇÕES GERAIS 9

>>diary anum01

o MatLab guardará todos os comandos e respectivos resultados (efectuados poste­


riormente) num ficheiro de nome anum01 que por defeito é guardado no directório
Work. Depois de encerrar a sessão, pode aceder a este ficheiro. Para o abrir use
um editor de texto (por exemplo o Notepad).

1.1.1 Aritmética Básica


As operações aritméticas elementares2 (com números reais ou complexos) do
MatLab são definidas por:

Operaçäo Símbolo
Soma +
Subtracção ­
Multiplicação ∗
Divisão �
Potenciação ∧

Tabela 1.1: Operações aritméticas elementares

Existe ainda outro operador, chamado backslash e representado pelo símbolo


\ que faz a divisão da direita para a esquerda.

Exemplo 1.1 O comando seguinte representa a divisão usual.

>>x=6/3

>>x=
2

Exemplo 1.2 O comando seguinte representa a divisão da direita para a esquerda.

>>y=6\3

>>y=
0.5

Além disso o operador \ tem também interesse nas operações com matrizes, como
será referido quando se falar de sistemas de equações lineares.
2 Para mais informações digite na janela de comando:

»helpmatlab/ops
10 CAPÍTULO 1. INTRODUÇÃO

1.1.2 Funções Matemáticas Elementares


Sendo o MatLab uma poderosa ferramenta de cálculo e programação, existem
várias funções matemáticas elementares3 definidas internamente no MatLab. Na
tabela seguinte apresentam­se alguns exemplos:

Função Operador
Seno sin
Coseno cos
Tangente tan
Secante sec
Exponencial exp
ln log
log10 log10
Valor absoluto abs

Tabela 1.2: Algumas funções matemáticas elementares

Nota: As funções trigonométricas definidas em MatLab supõem que o argumento


é introduzido em radianos.

Por exemplo, o comando

Exemplo 1.3 Para calcular o valor da expressão | sin(eπ )|, basta executar o co­
mando:
>>k=abs(sin(exp(pi)))

que devolve o valor,

>>k=0.9126

1.1.3 Formatos e Limites de Utilização


O resultado do exemplo 1.3 poderá constituir alguma surpresa, pelo diminuto
número de algarismos significativos apresentados. Na realidade o MatLab tem
vários formatos para a apresentação dos resultados4 , embora todos os cálculos se­
jam efectuados em dupla precisão. Assim, pode o utilizador escolher qual o for­
mato que mais se adequa ao problema em que está a trabalhar. No caso anterior,
3 Para mais informações digite na janela de comando:

»helpmatlab/elmat ou
»help specfun
4 Para mais informações digite na janela de comando:

»help format
1.1. CONSIDERAÇÕES GERAIS 11

para conhecer mais algarismos do resultado basta executar o comando

>>format long

o que faz com que a partir desse momento todos os resultados sejam apresenta­
dos com 15 dígitos. Pedindo agora o valor de k, (a variável definida no exemplo
anterior),

>>k

obtém­se,

k=
0.91257759866928

Outro ponto a ter atenção refere­se aos limites de utilização do programa.


Usando representação em vírgula flutuante, o maior número que o MatLab con­
segue representar é

>>realmax

ans=
1.797693134862316e+308

acima deste número real, o MatLab entra em overflow devolvendo o resultado inf.
Por outro lado, o menor número representável neste sistema antes de entrar em
underflow, é o

>>realmin

ans=
2.225073858507201e­308

Na realidade, dependendo do processador usado, o MatLab poderá conseguir rep­


resentar números reais de ordem mais baixa (chamados de números subnormais), o
menor deles aproximadamente igual a 4.9407 × 10−324 a que corresponde o valor
de eps*realmin. O valor de eps,

>>eps

ans=
2.220446049250313e­016

representa a distancia entre 1 e o valor imediatamente a seguir na representação


12 CAPÍTULO 1. INTRODUÇÃO

em vírgula flutuante. Esta representação foi normalizada em 1985 pelo IEEE


(através do relatório Binary Floating Point Arithmetic Standard 754­1985), de­
senvolvendo assim um sistema standard que permitiu a uniformização da represen­
tação numérica em computadores.
Estas noções são da maior importância para poder interpretar alguns resultados
mais inesperados, que poderão aparecer ao longo do curso.
Capítulo 2

Vectores e Matrizes

Uma das vantagens deste software é o facto de ser uma linguagem vectorial.
Isto significa que, por defeito, todas as variáveis definidas são entendidas como
sendo vectores (ou matrizes). Como tal deverá o novo utilizador relembrar alguns
conceitos de álgebra linear, não perdendo nunca de vista o facto acima referido.
Comece­se então por referir alguns procedimentos básicos.

2.1 Definições e Atribuições Básicas


Os parêntesis rectos no início de uma atribuição, significam que estamos a
definir uma estrutura vectorial. Depois existem duas alternativas:
• Separam­se dois elementos consecutivos por um espaço (ou por uma vír­
gula), o que significa que se está a mudar de coluna levando assim à criação
de um vector linha.

• Separam­se dois elementos consecutivos por um ponto e vírgula (ou por


um "enter­ mudança de linha), o que significa que se está a mudar de linha
levando assim à criação de um vector coluna.

• Juntando as duas informações anteriores cria­se facilmente uma matriz.

Exemplo 2.1 Para criar um vector linha,vl, formado pelos números 1,2,4 e 7 basta
fazer:

>>vl=[1,2,4,7]

ou

>>vl=[1 2 4 7]

Exemplo 2.2 Para criar um vector coluna,vc, formado pelos números 1,2,4 e 7
basta fazer:

13
14 CAPÍTULO 2. VECTORES E MATRIZES

>>vc=[1;2;4;7]

ou

>>vl=[1
2
4
7]

Conjugando agora o exemplificado nos dois exemplos anteriores,

Exemplo 2.3 Para criar uma matriz,


⎛ ⎞
1 2 4 7
⎜ 3 11 12 13 ⎟
A=⎜ ⎝ 5

9 10 14 ⎠
8 15 16 18

basta fazer:

>>vl=[1,2,4,7;3,11,12,13;5,9,10,14;8,15,16,18]

Para transpor o vector ou a matriz, i.e., trocar o elemento ai j com o elemento a ji ,


basta usar o operador ’.

Exemplo 2.4 Para criar uma matriz B=AT


basta fazer:

>>B=A

Caso se pretenda visualizar um vector ou matriz já definidas anteriormente, basta


escrever o nome delas na janela de comando. Também se pode visualiza­las (e
altera­las) fazendo duplo clique no workspace1 e alterando os elementos necessários.
Uma referência para os nomes das variáveis definidas pelo utilizador. Estes podem
ter até 32 caracteres (alfanuméricos) de comprimento e são "case­sensitive"(por
exemplo, A=a).� Assim sendo, é recomendado que se tenham cuidados de con­
gruência na atribuição de nomes às variáveis. (Por exemplo, matrizes definidas por
letras maiúsculas e vectores com minúsculas).

Exemplo 2.5 Para tabelar a função x, x=0:1:10, pode­se usar a sequência:

>>TabelaRaiz(:,1)=0:1:10 ;
>>TabelaRaiz(:,2)=sqrt(TabelaRaiz(:,1));
1 Relembre o referido na secção1.1, página 7
2.2. CASOS ESPECIAIS 15

Para melhor compreensão dos comandos executados, passa­se a explicar a sequên­


cia dos mesmos:

• O comando 0:1:10 cria um vector linha, cujos elementos variam de 0 até


10 por passos de 1.

• Como se pretende colocar esse vector linha na primeira coluna da tabela


(TabelaRaiz(:,1)=), é necessário efectuar a transposição o que é feito através
do operador ’.

• Por fim, para colocar na segunda coluna da tabela, o valor da raiz quadrada
do elemento correspondente da primeira coluna, basta fazer
TabelaRaiz(:,2)=sqrt(TabelaRaiz(:,1));
aonde sqrt é o comando que corresponde à função raiz quadrada.

2.2 Casos Especiais


Se for necessário definir um vector cujos elementos são igualmente espaçados
de uma determinada quantidade, pode­se usar o comando ’:’. A sintaxe deste co­
mando é a seguinte:
nomedavariavel=a:h:b
onde:

• a­primeiro elemento do vector

• h­espaçamento entre os elementos que fazem parte do vector

• b­valor que determina o ultimo elemento do vector.

O vector assim definido tem como último elemento o valor de b, caso o espaça­
mento h permita, começando em a, terminar exactamente em b. Caso contrário, o
último elemento do vector é último elemento da sucessão a,a+h,a+2h,... imediata­
mente antes de b.

Exemplo 2.6 O comando,

>>tempo=1:0.2:2

dá origem a,

>>tempo=
1 1.2 1.4 1.6 1.8 2

Exemplo 2.7 O comando,

>>tempo=1:0.3:2
16 CAPÍTULO 2. VECTORES E MATRIZES

dá origem a,

>>tempo=
1 1.3 1.6 1.9

Note­se que este comando substitui o habitual ciclo for, para este tipo de casos.
Embora este ciclo esteja também disponível em MatLab, deve ser substituído por
este comando sempre que possível, pois é bastante mais eficiente.
Da mesma forma também é possível utilizar esta sintaxe para criar vectores com
estruturas especiais, como podemos ver no exemplo seguinte.

Exemplo 2.8 Criação de um vector p de comprimento 9, com o valor 1 no primeiro


e último elemento, o valor 4 nos elementos pares e 2 nos restantes elementos.

>>p(1)=1;2
>>p(9)=1;
>>p(2:2:8)=4;
>>p(3:2:7)=2

dá origem a,

>>p=
1 4 2 4 2 4 2 4 1

Outro caso particular na criação de vectores com utilização frequente é o que cor­
responde à instrução linspace. Esta instrução, que permite criar um vector com n
elementos igualmente espaçados, tem a sintaxe:
nomedavariavel=linspace(a,b,n)
onde:

• a­primeiro elemento do vector

• b­último elemento do vector.

• n­número de elementos do vector.

Exemplo 2.9 O comando,

>>ls=linspace(1,2,5)

2 Neste exemplo foram introduzidas informalmente duas noções que são importantes:

Primeiro, os indices dos vectores (e matrizes) em MatLab começam em 1 (por exemplo, o primeiro
elemento de um vector x é o elemento x(1)). Segundo, caso não seja necessário visualizar imediata­
mente o resultado de uma instrução, pode­se omiti­lo (na janela de comando) colocando um ; no
final da instrução.
2.3. CHAMADAS DE SUBVECTORES E SUBMATRIZES 17

dá origem a,

>>ls=
1 1.25 1.5 1.75 2

2.3 Chamadas de Subvectores e Submatrizes


O MatLab guarda as componentes do vector indexadas por pelos inteiros pos­
itivos. Assim o elemento n do vector x pode ser chamado através do comando
x(n).
Exemplo 2.10 O comando,

>>ls(2)

dá origem a,

>>ans=
1.25
Em matrizes tudo se passa de forma semelhante: O comando A(i,j) chama o ele­
mento da i­ésima linha, j­ésima coluna da matriz A.
Exemplo 2.11 Relembrando a matriz B atrás definida,

>>B(2,3)

>>ans=
9
Podem­se também chamar vários elementos ao mesmo tempo através de uma con­
jugação dos comandos vistos anteriormente.
Exemplo 2.12 Para criar uma matriz C, composta pelos elementos da matriz A
que estão na primeira e segunda linha e na terceira e quarta coluna, basta fazer

>>C=A(1:2,3:4)

>>C=
4 7
12 13
Outro facto que merece aqui uma referência, é a chamada e extracção de vectores a
partir de matrizes. Assim, para criar um novo vector a partir de uma linha (ou col­
una) de uma matriz basta utilizar o comando ’:’ Este comando quando executado
na chamada de uma matriz, significa que se estão a chamar todas as linhas e/ou
colunas dessa matriz.
18 CAPÍTULO 2. VECTORES E MATRIZES

Exemplo 2.13 Criar uma matriz D, constituída pelos elementos de todas as linhas
da matriz A e das terceira e quarta colunas.

>>D=A(:,3:4)

>>D=
4 7
12 13
10 14
16 18

2.4 Operações Elementares


2.4.1 Adição e Subtração
Desde que tenham a mesma dimensão3 , basta usar os sinais + ­, para efectuar
estas operações no MatLab.

Exemplo 2.14 >>x=[1,0,3,7];

>>y=4:2:10;

>>z=x+y

>>z=
5 6 11 17

>>t=[3,4];

>>v=x+t

>>v=
???Error using=⇒ +
Matrix dimension must agree.

2.4.2 Multiplicação Vectorial


4
Neste tipo de operações é necessário algum cuidado com a sua aplicação. As­
sim sendo, relembre­se que uma multiplicação vectorial só é possível se o número
de colunas da primeira parcela for igual ao número de linhas da segunda parcela.
3
Excepto se um deles tiver dimensão 1x1, isto é, se for uma constante.

possível em algumas situações efectuar a operação de divisão entre matrizes e vectores. No
entanto essa operação sai do âmbito deste tutorial, pelo que não foi incluída nestas notas básicas.
Para mais informações basta fazer help slash na janela de comando.
2.4. OPERAÇÕES ELEMENTARES 19

Como resultado dessa multiplicação obtém­se uma matriz com o número de linhas
da primeira parcela e o número de colunas da segunda.

Exemplo 2.15 >>A=[1,0,3;0,0,4;1,1,3];

>>B=[4,1;1,2;0,4];

>>C=A*B

>>C=
4 13
0 16
5 15

>>D=B*A

>>D=
???Error using=⇒ *
Inner matrix dimension must agree.

2.4.3 Potenciação Matricial


A potenciação de matrizes, no MatLab representada pelo operador , deve ser
entendida como uma multiplicação vectorial da matriz por ela própria. Neste con­
texto fica claro que tal só será possível se a matriz for quadrada e que tal operação
não se aplica a vectores.

Exemplo 2.16 Relembre os elementos definidos no exemplo2.15. Então,

>>A^2

>>ans=
4 3 12
4 4 12
4 3 16

>>B^2

>>B=
???Error using=⇒ ∧
Matrix must be square.

Ainda neste contexto, chama­se a atenção para o cálculo da inversa de uma


matriz que no MatLab pode ser efectuada através de A−1 ou do comando inv.
20 CAPÍTULO 2. VECTORES E MATRIZES

2.4.4 Operações Elemento a Elemento


Este tipo de operações vai ser largamente utilizado no âmbito da disciplina de
Análise Numérica. Como tal é também importante que se entenda de forma clara
este tipo de operações, que consistem essencialmente em tratar um vector como um
conjunto de elementos simples e efectuar as operações elemento a elemento. Para
as efectuar é necessário acrescentar um ponto antes da operação que se pretende
efectuar. Por exemplo, ao fazer x.*y, se os vectores (ou matrizes) x e y tiverem a
mesma dimensão o MatLab multiplica o 1o elemento de x pelo primeiro elemento
de b, até ao último elemento de x vezes o último elemento de b. Da mesma forma
se efectuam x./y, x.∧y e x.∧k, onde k∈ R
Exemplo 2.17 Relembre os elementos definidos nos exemplos 2.14 e 2.15. Então,
x*y x.*y x./y, A.∧2, B∧2 e B.∧2 dão origem aos seguintes resultados:

>>x*y

>>ans=
???Error using=⇒*
Inner matrix dimension must agree.

>>x.*y

>>ans=
4 0 24 70

>>x./y

>>ans=
0.25 0 0.375 0.70

>>A^2

>>ans=
4 3 12
4 4 12
4 3 16

>>A.^2

>>ans=
1 0 9
0 0 16
1 1 9
2.4. OPERAÇÕES ELEMENTARES 21

>>B^2
???Error using=⇒ ∧
Matrix must be square.

>>B.^2

>>ans=
16 1
1 4
0 16

Problema 2.1 Sejam: ⎛ ⎞


3 0 1
A=⎝ 2 5 0 ⎠
0 1 0
⎛ ⎞
1 2
B=⎝ 2 3 ⎠
1 1
� �
x = 12 0 7
⎛ ⎞
9
y=⎝ 3 ⎠
5
Sem fazer cálculos verifique se é possivel efectuar as seguintes operações. Em caso
afirmativo, use o MatLab para comprovar os resultados.

1. A*B

2. B*A

3. A*x

4. A*y

5. x*A

6. y*A

7. x*A*y

8. yT *A*y

9. x*y

10. xT *y

11. A2
22 CAPÍTULO 2. VECTORES E MATRIZES

12. B3

13. x2

14. x*A2 *y

É importante entender bem o porquê dos resultados acima antes de prosseguir.


Muitos dos problemas sentidos pelos alunos na utilização do MatLab, deve­se a
uma deficiente compreensão deste tipo de problemas.

2.4.5 Comandos Específicos


Sendo o MatLab um software baseado numa linguagem vectorial, existem
várias rotinas internas optimizadas para manipulação de vectores e matrizes. Na
tabela seguinte apresentam­se alguns5 desses comandos com utilização usual no
âmbito deste livro. No entanto, a descrição dos comandos é apenas informativa.
Na verdade os comandos podem devolver parâmetros adicionais que não foram
referidos, sendo por isso importante fazer help nome do comando , na janela de
comando, para poder obter um pleno aproveitamento das potencialidades dos mes­
mos.

Operador Descrição
sum(x) Soma de todos os elementos do vector x
prod(x) Produto de todos os elementos do vector x
max(x) Devolve o maior elemento do vector x
min(x) Devolve o menor elemento do vector x
sort(x) Ordena por ordem crescente todos os elementos do vector x
norm(x) Devolve o valor da norma (2) de x.
det(A) Devolve o valor do determinante de A
eig(A) Devolve os valores próprios de A

Tabela 2.1: Algumas funções matemáticas elementares

A descrição dos comandos referidos na tabela é apenas informativa. Na ver­


dade os comandos podem devolver parâmetros adicionais que não foram referidos,
sendo por isso importante fazer help nome do comando , na janela de comando,
para poder obter um aproveitamento pleno das potencialidades dos mesmos.

5 Para mais informações digite na janela de comando:

»help/elfun
Capítulo 3

Gráficos

As capacidades gráficas do MatLab são muito potentes e versáteis. A criação


de figuras de vários tipos faz­se com facilidade e é bastante intuitiva o que, em
conjugação com a quantidade de parâmetros ajustáveis às necessidades do uti­
lizador, torna este software bastante acessível e adequado para as principais áreas
da Matemática e Engenharia que fazem uso de computação gráfica. Neste capítulo
dão­se as primeiras luzes sobre os gráficos mais utilizados em Métodos Numéricos
a duas dimensões.

3.1 Gráficos 2­D


Existem vários tipos de gráficos em MatLab. Nesta breve introdução só vão
ser referidos os tipos mais utilizados a um nível básico(2D). No entanto, usando
o caminho MatLab⇒help⇒MatLab⇒using MatLab⇒Graphics pode ser utilizada
uma abordagem mais aprofundada para este assunto. Outra alternativa é usar o
comando de ajuda na janela de comando, help graph2d
O comando típico para representar graficamente um conjunto de pontos armazena­
dos em dois vectores x e y é: tipodegráfico(x,y). Eventualmente podem­se acres­
centar mais parâmetros que contêm as opções do gráfico tal como o tipo de linha
e/ou cor e/ou marcador, conforme a tabela abaixo.
Existem no entanto outras opções que podem ser também alteradas tais como a
espessura da linha, os eixos, escalas, marcações, títulos, etc... . Tudo isso pode ser
alterado de duas formas: Ou na janela do gráfico, fazendo Edit⇒Figure Properties,
ou através do comando próprio na janela de comando.
Vão agora ser criados dois vectores numéricos que servirão para as diferenças entre
alguns tipos de gráficos mais usuais.
Exemplo 3.1 Crie três vectores, de nomes x, y e z, que contenham os valores de
{x,ex *|cos(x)|,ex *sin(x)}, x=0:0.1:2π.

>>x=(0:0.1:2*pi);

23
24 CAPÍTULO 3. GRÁFICOS

Símbolo Marcador
. ponto
o circulo
Simbolo Côr x cruz
b azul * asterisco Símbolo Tipo de Linha
g verde s quadrado
­ contínua
r vermelho d losângulo
: pontos
c ciano v triângulo
­. traço­ponto
m magenta � triângulo
­­ tracejada
y amarelo v triângulo
k preto < triângulo
> triângulo
p pentágono
h hexágono

Tabela 3.1: Opções do comando plot

>>y=exp(x).*abs(cos(x));

>>z=exp(x).*sin(x);

Como referido no exercício2.8, o símbolo ; é usado para evitar que apareçam os


elementos criados pela instrução precedente na janela de comando. No entanto,
executando o comando whos na janela de comando ou observando o workspace,
verifica­se que a tabela foi criada.

3.1.1 O Comando plot


O comando plot, é o mais geral de todos os gráficos a duas dimensões. Seguem­
se algumas utilizações deste comando:

• plot(x,y) ­ Este comando cria um gráfico que une os pontos de coordenadas


{x(i),y(i)} com uma linha recta. Por defeito cria a linha a azul, e não dá
realce aos pontos.

• plot(x,y,op) ­ Igual ao anterior, só que permite ao utilizador especificar o tipo


de linha e/ou o marcador dos pontos numa string op , conforme a tabela 3.1.

• plot(y) ­ Se y for um vector complexo representa a parte real e a parte com­


plexa de cada um dos pontos (o que é equivalente a plot(real(y),imag(y))).
Caso contrário representa os valores de y, em função do seu índice no vector.

• plot(x1,y1,op1,x2,y2,op2,...) ­ Faz a sobreposição do gráficos de x1,y1 com


as opções op1, com o gráfico de x2,y2 segundo as opções op2, etc...
3.1. GRÁFICOS 2­D 25

Exemplo 3.2 Para os dados criados no exercício anterior, as figuras seguintes


representam alguns gráficos obtidos.
500

450

400

350

300

250

200

150

100

50

0
0 1 2 3 4 5 6 7

Figura 3.1: plot(x,y)

500

450

400

350

300

250

200

150

100

50

0
0 1 2 3 4 5 6 7

Figura 3.2: plot(x,y,’rs­’)

Repare­se na diferença entre as figuras 3.1 e 3.3 ao nível do eixo dos xx.
26 CAPÍTULO 3. GRÁFICOS

500

450

400

350

300

250

200

150

100

50

0
0 10 20 30 40 50 60 70

Figura 3.3: plot(y)

500

400

300

200

100

−100

−200
0 1 2 3 4 5 6 7

Figura 3.4: plot(x,y,’r­d’,x,z,’bs–’)


3.1. GRÁFICOS 2­D 27

Ao usar o comando plot existem outras propriedades que podem ser ajustadas.

• LineWidth ­ especifica a largura (em pontos) da linha

• MarkerEdgeColor ­ especifica a cor do marcador ou a cor das arestas dos


marcadores "cheios"(circulo, quadrado, losangulo, pentágono, hexágono, e
dos quatro triângulos).

• MarkerFaceColor ­ especifica a cor da face dos marcadores cheios.

• MarkerSize ­ especifica o tamanho dos marcadores em pontos.

Exemplo 3.3 Executando a instrução abaixo, obtém­se uma linha que une os pon­
tos de coordenadas (x,y) de largura 2, com os pontos representados por losangulos
(de tamanho 5) realçados a vermelho e com contorno amarelo.

>>plot(x,y,’­cd’,’LineWidth’,2,’MarkerEdgeColor’,’y’,’MarkerFaceColor’,’r’,’MarkerSize’,5)

3.1.2 O Comando scatter


Este comando, cria um gráfico que representa apenas os pontos cujas coor­
denadas constam dos argumentos de entrada. Como habitualmente, têm algumas
opções que podem ser activadas pelo utilizador. Na figura abaixo, usou­se a opção
"filled", o que faz com que os marcadores sejam representados a cheio. Para mais
informações digite help scatter, na janela de comando.

Exemplo 3.4
500

450

400

350

300

250

200

150

100

50

0
0 1 2 3 4 5 6 7

Figura 3.5: scatter(x,y,’filled’)


28 CAPÍTULO 3. GRÁFICOS

3.1.3 Os Comandos semilogx, semilogy e loglog


Estes comandos dão origem a gráficos que são semelhantes em estrutura e
opções ao plot, tendo como principal diferença o facto de um dos eixos (ou os
dois no comando loglog) ser representado em escala logarítmica (de base 10). Ev­
identemente, que caso os valores em causa sejam negativas, tal não é passível de
ser representável e como tal esses dados são ignorados.
Como um gráfico com escala logarítmica representa como rectas as relações do tipo
exponencial, então pode­se já imaginar algumas aplicações práticas deste tipo de
gráficos. Observando o exemplo 3.5, as diferenças entre esse gráfico e a figura 3.1,
indiciam também outras vantagens deste tipo de gráficos em situações particulares.

Exemplo 3.5 Na figura 3.6, pode­se ver um gráfico do tipo semilogy aplicado aos
conjuntos x,y do exemplo 3.1.

3
10

2
10

1
10

0
10

−1
10
0 1 2 3 4 5 6 7

Figura 3.6: semilogy(x,y,’LineWidth’,2)

3.1.4 O Comando subplot


Por vezes é bastante útil poder visualizar vários gráficos na mesma janela. No
MatLab é possível fazê­lo através do comando subplot. Este comando,que tem a
3.1. GRÁFICOS 2­D 29

forma geral subplot(m,n,p), divide a janela gráfica em m×n subgráficos, colocando


o gráfico actual na posição p. O índice da posição é indexado da direita para es­
querda e de cima para baixo.
Para melhor compreender o que foi agora descrito, veja­se o seguinte exemplo.

Exemplo 3.6 Na figura 3.7, estão representados os 6 gráficos até agora apresen­
tados neste capítulo, fazendo uso do comando subplot. As instruções para a sua
representação, foram:

>>subplot(3,2,1)
>>plot(x,y)
>>title(’plot(x,y)’)
>>subplot(3,2,2)
>>plot(x,y,’rs­’)
>>title(’plot(x,y,rs­)’)
>>subplot(3,2,3)
>>plot(y)
>>title(’plot(y)’)
>>subplot(3,2,4)
>>plot(x,y,’r­d’,x,z,’bs­­’)
>>title(’plot(x,y,r­d,x,z,bs­­)’)
>>subplot(3,2,5)
>>scatter(x,y,’filled’)
>>title(’scatter(x,y,filled)’)
>>subplot(3,2,6)
>>semilogy(x,y,’LineWidth’,2)
>>title(’semilogy(x,y),LineWidth,2’)

3.1.5 Os comando ezplot e fplot


Pensando em termos de gráficos de funções, é natural que uma dúvida assalte
de imediato o pensamento do leitor depois de acabar de ler o capítulo anterior: A
"qualidade"do gráfico desenhado pelo MatLab vai depender do número de pontos
criados no vector de abcissas x. Isto é, quantos mais pontos forem considerados em
x (fazendo depois y=f(x)), mais preciso vai ser o gráfico desenhado. No entanto,
para o esboço que é necessário na maioria das vezes, não é prático ter de decidir se
é melhor usar uns milhares de pontos, ou se basta apenas umas dezenas de pontos
da função para se obter o objectivo pretendido. Além disso, esta última questão
não tem uma resposta simples "à priori", pois esta depende de vários factores que
podem não ser facilmente detectáveis, como por exemplo o número de mínimos
e máximos locais, pontos de descontinuidade, domínio, etc... Neste contexto, os
comandos ezplot e fplot são ferramentas que permitem ao utilizador construir de
uma forma fácil o gráfico de uma função real.
30 CAPÍTULO 3. GRÁFICOS

plot(x,y) plot(x,y,rs−)
600 600

400 400

200 200

0 0
0 2 4 6 8 0 2 4 6 8
plot(y) plot(x,y,r−d,x,z,bs−−)
600 600

400
400
200
200
0

0 −200
0 20 40 60 80 0 2 4 6 8
scatter(x,y,filled) semilogy(x,y),LineWidth,2
4
600 10

2
400 10

0
200 10

−2
0 10
0 2 4 6 8 0 2 4 6 8

Figura 3.7: Uso do comando subplot

A estrutura do ezplot consiste na sua forma mais básica numa sequência da forma,
ezplot(’fun’,[a,b]), onde ’fun’ é a expressão que define a função dentro de plicas
(que pode eventualmente ser substituída por uma function handle1 ). Quando o
[a,b] não está definido, o MatLab assume por defeito o [­2π,2π]. Este comando
resolve na maioria dos casos o problema de desenhar um gráfico de uma forma
fácil e intuitiva.

Exemplo 3.7 Verifique que a função cos(log(x)+1) muda de sinal em [1,8].


Para responder a esta questão basta verificar que o gráfico da função f(x)=cos(log(x)+1)
satisfaz a questão formulada.

>>ezplot(’cos(log10(x)+1)’,[1,8])

1 Ver capítulo .... mais à frente


3.1. GRÁFICOS 2­D 31

cos(log (x)+1)
10
0.6

0.5

0.4

0.3

0.2

0.1

−0.1

−0.2

−0.3

1 2 3 4 5 6 7 8
x

Figura 3.8: Uso do comando ezplot

No entanto, o uso do ezplot pode às vezes não ser suficiente. Por exemplo, quando
se pretende que o gráfico tenha uma determinada precisão ou a função varia muito
rapidamente, este comando pode não ser útil, pois não permite ao utilizador acres­
centar mais pontos ao gráfico para o tornar mais preciso. Neste caso, o comando
fplot pode trazer grandes vantagens pois permite ao utilizador, entre outras opções,
definir qual a precisão que pretende no gráfico. O comando fplot é geralmente
utilizado na forma fplot(’fun’,[a,b],tol) onde ’fun’ e [a,b] sejam como no caso do
ezplot (embora seja obrigatório definir [a,b] no fplot) e tol é um parâmetro que
define qual a tolerância do erro relativo admitido (caso este parâmetro não seja
definido pelo utilizador é tomado o valor predefinido de 0.002).

Exemplo 3.8 Comparação entre os comandos ezplot e fplot com a função cos(1/x)
em [­0.5,0.5].

>>subplot(2,1,1)
>>ezplot(’cos(1/x)’,[­0.5,0.5])
>>subplot(2,1,2)
>>fplot(’cos(1/x)’,[­0.5,0.5])

No exemplo anterior é notória a diferença de resolução entre os dois gráficos, prin­


cipalmente em torno de x=0, o que ilustra bem o foi referido acerca da diferença
entre os dois comandos.
32 CAPÍTULO 3. GRÁFICOS

cos(1/x)

0.5

−0.5

−1

−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5
x

0.5

−0.5

−1
−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5

Figura 3.9: Comparação dos comandos ezplot e fplot (resp.)

3.1.6 Outros gráficos

Existem muitos outros gráficos a duas dimensões disponíveis em MatLab. No


entanto, os que foram aqui apresentados são habitualmente os mais utilizados em
métodos numéricos não havendo por isso interesse em desenvolver tópicos especí­
ficos para os outros tipos de gráfico disponíveis. No entanto, a tabela abaixo repre­
senta mais alguns gráficos 2­D que existem na versão R13 do MatLab. De qualquer
das formas o utilizador pode consultar o help para obter mais informações.

Gráfico Descrição
errorbar Gráficos com erros associados
polar Gráficos em coordenadas polares
plot3 Gráficos de linhas e pontos em 3­D
plotyy Gráficos com eixo dos yy marcados à direita e à esquerda
ezpolar Gráficos de uso intuitivo para coordenadas polares
bar Gráficos de barras
hist Histograma
sphere Gera Esfera
cylinder Gera Cilindro
comet Gráfico x­y animado
3.2. OUTROS COMANDOS 33

3.2 Outros comandos


Nesta secção apresentam­se comandos que poderão ser úteis não só para grá­
ficos a duas dimensões, mas também para outro tipo de objectos. No entanto, e
sempre que possível, dar­se­á relevância à sua aplicação aos gráficos 2­D pois são
os que mais se enquadram na óptica deste livro.

3.2.1 O comando figure


Normalmente quando se usa um comando gráfico o MatLab activa a janela
corrente (por defeito a figure No. 1) e faz o desenho do gráfico nessa janela apa­
gando o anterior. O comando figure pode ser usado para criar uma nova janela
de forma a ser possível desenhar outro gráfico numa janela diferente. A este nível
consider emos apenas a forma mais simples ou seja, a nomenclatura figure(h), onde
h é um inteiro positivo.

Exemplo 3.9 Os comandos seguintes permitem criar os gráficos das funções sen(x)
e cos(x) (no intervalo [­2π,2π]) em duas janelas diferentes.

>>fplot(’sin(x)’,[­2*pi,2*pi])
>>figure(2)
>>fplot(’cos(x)’,[­2*pi,2*pi])

3.2.2 O comando hold


Pode ser também necessário sobrepor ao gráfico corrente, (pode­se saber qual
a janela activa, caso exista mais do que uma disponível, usando o comando gcf ),
outros gráficos. Para tal basta utilizar o comando hold on. Depois de activado,
todos os gráficos são sobrepostos na janela activa. Quando se pretender parar,
basta desactivar o comando hold através de hold off.

3.2.3 O comando grid


Este comando permite activar uma grelha na janela activa. A sua sintaxe é
apenas grid on ou grid off consoante se pretenda activar ou desactivar a grelha.

Exemplo 3.10 Os comandos seguintes permitem sobrepor os gráficos das funções


sen(x) e cos(x) (no intervalo [­2π,2π]) na mesma janela conforme se pode verificar
na figura 3.10

>>fplot(’sin(x)’,[­2*pi,2*pi])
>>hold on
>>fplot(’cos(x)’,[­2*pi,2*pi])
>>grid on
34 CAPÍTULO 3. GRÁFICOS

0.8

0.6

0.4

0.2

−0.2

−0.4

−0.6

−0.8

−1
−6 −4 −2 0 2 4 6

Figura 3.10: Uso dos comandos hold e grid

3.2.4 O comando ginput


Caso se pretenda saber as coordenadas aproximadas de pontos de um gráfico,
tal é possível usando em MatLab o comando ginput. Para o utilizar basta escrever
na janela de comando
>>C=\emph{ginput}
ou alternativamente
>>C=\emph{ginput(n)}
onde C é o nome da variável que conterá as coordenadas pedidas e n∈N. O argu­
mento n significa que se pretendem saber as coordenadas de n pontos do gráfico.
Após digitar o comando, a janela do gráfico fica activa e colocando o apontador
do rato sobre ela, aparecerá um sistema de eixos móveis com uma "mira"na inter­
secção. Clicando com o botão esquerdo do rato nos pontos dos quais se pretendem
saber as coordenadas, o MatLab transfere­as para a variável C. Caso não se especi­
fique o número de coordenadas, então o processo só acaba quando pressionarmos a
tecla enter. As coordenadas devolvidas têm sempre duas componentes, referentes
às coordenadas x e y, respectivamente.

3.2.5 Legendas, eixos e labels


Existem muitos outros comandos que podem ser úteis para a formatação de
gráficos tais como: legend, axis, xlim, ylim, xlabel ou ylabel. No entanto, como tal
comandos saem do âmbito desta introdução, fica apenas a referência com a certeza
de que a leitura de help nomedocomando será elucidativo acerca da natureza e
aplicabilidade dos mesmos.
Capítulo 4

Instruções Básicas de
Programação

A programação em Métodos Numéricos é importante por dois motivos: primeiro


para poder detectar erros em algoritmos já implementados, o que não é tão invulgar
como à primeira vista poderia parecer. Em segundo lugar porque a programação
permite, além de implementar novos métodos e suas variantes, uma simplificação
e automatização do trabalho a efectuar. No entanto, fica aqui uma chamada de
atenção para a análise crítica dos resultados, processo que nunca deverá ser negli­
genciado sob pena de se estarem a tirar conclusões erradas o que poderá conduzir
a situações embaraçosas. Pelas razões expostas, neste capítulo serão apresentadas
algumas das principais instruções para ser possível programar em MatLab a um
nível básico.

4.1 Definição de uma função matemática

A primeira ferramenta essencial a quem pretende trabalhar com MatLab em


Métodos Numéricos, é a construção de funções matemáticas. Embora o MatLab
já contenha a maioria das funções matemáticas elementares (consoante a ampli­
tude da definição!), é prático em muitos casos o utilizador definir ele próprio a sua
função pois o tempo gasto a construí­la vai ser na maioria das vezes compensado
pela economia temporal que obterá ao implementá­la na resolução de um determi­
nado método.
Para definir funções matemáticas em MatLab existem várias formas diferentes, que
variam em complexidade e em amplitude de utilização. A adequação de cada uma
delas ao problema em causa, só é possível se o utilizador/programador entender
bem as diferenças entre cada um dos métodos de definição. É isso que se pretende
explicar nas subsecções seguintes.

35
36 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

4.1.1 Através de um m­file


Esta é a forma mais básica de definir uma função. Consiste em criar um ficheiro
(m­file), que terá o nome da função a ser implementada os parâmetros de entrada
e de saída (o que no caso de uma função real de variável real se resumem a um de
entrada e um de saída). Este tipo de ficheiro, será também usado para a construção
de rotinas de implementação de métodos pelo que a compreensão da sua estrutura
se reveste de grande importância.
Um m­file, que consiste num conjunto de instruções que são chamadas todas em
conjunto pela ordem que foram digitadas, pode ser de dois tipos diferentes:function
ou script1 . A sua diferença é básica, mas deveras importante: enquanto a primeira
devolve um ou mais resultados (parâmetros de saída) em função de um ou mais
argumentos (parâmetros de entrada), a segunda consiste apenas num conjunto de
instruções que pode ou não produzir resultados, mas que não obriga (à partida) o
utilizador a introduzir parâmetros de entrada. Como parece óbvio, nesta secção
vai­se falar da estrutura function.
Para definir uma função através de uma m­file, deve­se primeiro abrir o editor de
texto do MatLab. Para tal, comece­se por abrir o menu file (em cima do lado es­
querdo da janela principal do MatLab), e escolha­se new , m­file. Fica­se agora
com o editor de MatLab aberto. A estrutura básica da instrução function é:

function [s1,s2,...,sn]=nomedafunção(e1,e2,...,em)
%Comentários para serem lidos ao fazer help nomedafunção

instruções da função

Tabela 4.1: Estrutura básica do comando function

onde,
• s1,...,sn ­ parâmetros de saída da função
• e1,...,ek ­ parâmetros de entrada da função
Depois de definir as instruções deve­se guardar (save as) a função com o nome que
se lhe pretende chamar. Deve­se neste ponto ter o cuidado de não usar um nome já
anteriormente definido. De seguida, o directório aonde a função foi guardada (por
defeito o MatLab usa o directório C:\...\MATLAB6p5\work) deve ser adicionado
(caso ainda não esteja) aos directórios aonde o programa vai procurar ficheiros ­
na janela file, fazer set path, e de seguida add folder. De seguida apresenta­se um
exemplo básico.
Exemplo 4.1 Construir a função f1, que dado um vector de valores numéricos x,
2
devolva para cada um deles o valor de ecos(x ) .
1 Este assunto será abordado mais em pormenor na secção 4.4
4.1. DEFINIÇÃO DE UMA FUNÇÃO MATEMÁTICA 37

Resolução: Abrir o editor de texto do MatLab, conforme o explicado acima, e no


ficheiro que será guardado com o nome f1, escrever,
function [y]=f1(x)
%Esta função retorna em y o valor de exp(cos(x∧ 2))

y=cos(exp(x.∧ 2));

Mais uma vez foi o leitor confrontado com a utilização da multiplicação elemento a
elemento. Tal operação utiliza­se para ser possível dar como entrada da função um
conjunto de valores (armazenados num vector) e receber como resposta a imagem
desse conjunto pela função. O ; utiliza­se para que quando a função for chamada
não apresente os valores de y na janela de comando, armazenando­os directamente
no workspace.
Executando na janela de comando,

>>s=0:0.25:2;
>>t=f1(s);

o MatLab cria um vector t no workspace que contém a imagem dos pontos contidos
2
em s (i.e,0,0.25,0.5,...,1.75,2) pela função f1, (i.e., pela função ecos(x ) ).
A partir deste momento, e a não ser que o m­file de nome f1 seja apagado do disco,
pode­se repetir esta instrução, bastando só explicitar o argumento.
As primeiras linhas de comentário da função, são as que são apresentadas quando
se faz help nomedafunção. No caso da função f1,

>>help f1

devolve,

>>help f1
Esta função retorna em y o valor de exp(cos(x$^\wedge$2))

Uma das principais vantagens deste tipo de definição de função é que, ao con­
trário do que acontece com outras definições, apenas exige a existência em disco
do MatLab sem necessitar de qualquer toolbox adicional. Além disso, também
é um bom processo do utilizador se habituar a construir programas básicos, que
poderão fornecer alguma base para a execução de rotinas mais complexas.
No entanto, este tipo de definição tem alguns pontos negativos, como seja a impos­
sibilidade de tratar a função como um objecto matemático, o que impossibilita o
cálculo de derivadas, integrais etc... Além disso não é um método simples para uso
temporário, i.e, se o utilizador pretender usar a função uma só vez terá de a apagar
(literalmente) do disco, pois não será prático cada vez que se definir uma função
38 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

para fazer meia dúzia de cálculos ter de inventar um novo nome para ela.

4.1.2 Através do comando inline


. Uma das formas de criar uma função matemática de forma rápida e intuitiva
é usar o comando inline. Este comando permite que o utilizador crie uma função
(matemática) directamente a partir da janela de comando. A sintaxe principal do
comando é:
onde,

nomedafunção=inline(expressão)

ou então,

nomedafunção=inline(expressão,arg1,arg2,arg3,...)

Tabela 4.2: Estrutura básica do comando inline

expressão é a expressão matemática a ser avaliada, que é introduzida sob a forma


de string, ou seja, dentro de plicas(’). Habitualmente isto é suficiente para o
MatLab detectar quais as variáveis, e cria então um "objecto inline"já com as var­
iáveis definidas explicitamente. Caso tal não aconteça ou o utilizador pretenda que
as variáveis venham escritas por outra ordem, pode utilizar a segunda estrutura
definida na tabela 4.2.
Exemplo 4.2 Implemente a função
f (x, θ, α) = cos(αx + θ).
Resolução: Basta utilizar o comando inline. Assim sendo, fazendo na janela de
comando,

>>f=inline(’cos(alfa*x+theta)’)
f=
inline function
f(alfa,theta,x) = cos(alfa*x+theta)

no entanto a ordem das variáveis não vem como foi pedida. Se isso fizer difer­
ença, pode­se utilizar o comando:

>>f=inline(’cos(alfa*x+theta)’,’x’,’theta’,’alfa’)
f=
inline function
f(x,theta,alfa) = cos(alfa*x+theta)

É importante referir que, usando o comando inline, as operações aritméticas *,/ e ∧


são definidas internamente como sendo operações elemento­a­elemento (na reali­
4.1. DEFINIÇÃO DE UMA FUNÇÃO MATEMÁTICA 39

dade isso é feito através da rotina vectorize.m). Como tal, usando o comando inline
não há necessidade de colocar o .(ponto) antes daquelas operações.
A função f agora definida, pode ser usada como habitualmente. Por exemplo,

>>y=f(1,pi/2,pi/4)
y=
­0.70710678118655

(Consegue verificar se está correcto?). É também possível passar conjuntos de


valores (em vectores) como argumentos de um objecto inline como no problema
seguinte.

Problema 4.1 Usando a função f definida no exercício 4.2, se executar as in­


struções,

>>x=[0,2,3,4];
>>y=f(x,0,pi/12);

quais os valores que estão em y? Responda sem utilizar o MatLab.

No entanto, esta forma de definir uma função matemática, embora de fácil imple­
mentação, não tira partido total2 das capacidades do MatLab como por exemplo
em termos de derivação ou integração. Vai ser agora introduzida uma nova forma
de definir funções matemáticas, que permite usar essas capacidades de forma fácil
e intuitiva.

4.1.3 Definindo variáveis simbólicas


3 Esta forma de definir funções corresponde em definir as variáveis que fazem
parte da função como sendo variáveis simbólicas. Depois disto, a toolbox sim­
bólica do MatLab, permite que se possam calcular derivadas em ordem a cada uma
das variáveis, integrar etc...
Uma das formas de definir as variáveis e a função é a seguinte:

syms var1 var2 ... varn


nomedafunção=(expressão)

Tabela 4.3: Estrutura básica de funções com variáveis simbólicas

onde,

• var1,var2,...,varn ­ variáveis da função


2 Pelo menos de forma directa, pois é possível fazê­lo usando a instrução sym
3 Exige que esteja instalada a Symbolic Toolbox
40 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

Depois da função definida desta forma basta usar o comando subs para poder sub­
stituir a variável por uma constante (ou por um vector de valores). A estrutura deste
comando, é a seguinte:

y=subs(nomedafunção,{var1,var2,...,varn},{p1,p2,...,pn})

Tabela 4.4: Estrutura básica do comando subs

onde,
• var1,var2,...,varn ­ variáveis da função

• p1,p2,...,pn ­ valor(es) atribuído(s) às variáveis.

• y­ valor(es) da função no(s) ponto(s)


Como este livro é escrito no ambito dos Métodos Numéricos, faz algum sentido
fazer a seguinte observação: o parâmetro de saída y em 4.4 não é um vector
numérico, mas sim um objecto simbólico. Assim, e neste contexto, para evitar
eventuais problemas na implementação de rotinas aconselha­se a transformar logo
o parâmetro de saída num vector numérico através do comando double como pode
ser visto no exemplo seguinte.
Exemplo 4.3 Implemente a função
f (x, θ, α) = cos(αx +θ) utilizando variáveis simbólicas e estime o valor de cos(π/4)
Resolução: Defina­se primeiro as variáveis simbólicas,

>>syms alfa x theta

que aparecem agora na janela do workspace. Defina­se agora a função através


de,

>>f=cos(alfa*x+theta)
f=
cos(alfa*x+theta)

Para estimar cos(π/4) usando a função f, basta tomar (por exemplo), α = π/4
, x=1 e θ = 0.

>>x0=1
>>alfa0=pi/4
>>theta0=0

Executando agora,
4.2. OPERADORES 41

>>y=double(subs(f,{alpha,x,theta},{alfa0,x0,theta0}))
y=
0.70710678118655

2
que é uma aproximação de 2 , como era esperado.

Como já foi referido, uma das vantagens da definição de uma função na forma
simbólica é que se pretendermos calcular a derivada parcial da função em ordem a
uma das variáveis, basta utilizar a instrução diff. Por exemplo, usando as variáveis
definidas no exemplo 4.3,

>>dfdx=diff(f,x)
dfdx=
­sin(alfa*x+theta)*alfa

Além deste exemplo, existem muitas outros operadores definidos para funções
definidas como estruturas simbólicas, (por exemplo: o comando int, que permite
calcular integrais, ou o comando Taylor, que retorna o polinómio de Taylor) que se
podem encontrar utilizando o comando help symbolic, que dá mais algumas infor­
mações acerca das funcionalidades principais desta toolbox. No entanto este tipo
de comandos serão objecto de estudo mais aprofundado em capítulos subsequentes.

4.2 Operadores
Os operadores de relação e operadores lógicos são uma parte importante em
programação. Os símbolos que os definem em MatLab estão representados na
tabela 4.5 Conhecidos os operadores lógicos em MatLab, vão agora ser apresen­

Relação Símbolo
Igual ==
Menor <
Maior >
Menor ou igual <=
Maior ou igual >=
Diferente ∼=
E &
Ou |
Não ∼

Tabela 4.5: Operadores lógicos e de relação.

tadas os ciclos principais de programação.


42 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

4.3 Operadores de controlo de fluxo


4.3.1 Ciclo for
Esta instrução executa um conjunto de instruções durante um número previa­
mente determinado de vezes. A sua sintaxe em MatLab é,
Esta instrução tanto pode ser executada numa m­file como na janela de comando.Na

for variavel=expressão

instruções

end

Tabela 4.6: Estrutura básica de um ciclo for

janela de comando, é possível executar o exemplo seguinte.


Exemplo 4.4 Criar uma matriz (A)3×3 cujos elementos da diagonal
(aii )1≤i≤3 = 2i e com todos os outros elementos nulos.

>>for i=1:3
A(i,i)=2^i
end
A=
2 0 0
0 4 0
0 0 8
Noutras linguagens é costume usar frequentemente esta instrução. No entanto,
sempre que possível, em MatLab é preferível usar comandos vectorizados. Por
exemplo, em vez de fazer,

>>for i=1:100
x(i)=i
end

é preferível fazer (em termos de rapidez!)

>>x=1:1:100

4.3.2 Instrução if
Esta instrução verifica o valor lógico de uma proposição, e consoante esse valor
poderá executar um conjunto de instruções.
4.3. OPERADORES DE CONTROLO DE FLUXO 43

if expressão1
instruções1

elseif expressão2
instruções2

else
instruções3

end

Tabela 4.7: Estrutura básica da instrução if

Exemplo 4.5 As instruções seguintes,

>>k=4;
>>for m=1:k
for n=1:k
if m= =n
A(m,n)=2
elseif (abs(m­n)= =2)
A(m,n)=1
else
A(m,n)=0
end
end
end

dão origem à matriz:


(consegue escrevê­la sem ver a solução e sem usar o MatLab?)

A=
2 0 1 0
0 2 0 1
1 0 2 0
0 1 0 2

4.3.3 Ciclo while

Trata­se de uma instrução que faz executar um conjunto de instruções enquanto


uma ou mais expressões obedecerem (ou não) a determinadas condições.
44 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

while expressão1

instruções

end

Tabela 4.8: Estrutura básica de um ciclo while

Exemplo 4.6 Este exemplo ilustrativo da instrução while começa com um número
aleatório entre 0 e 1, e verifica quantas vezes é necessário duplicá­lo para se obter
um número maior que 1.

>>k=rand(1)
>>i=0
>>while k<=1
k=k*2;
i=i+1
end

4.3.4 Instrução switch


Este conjunto de instruções avalia um determinado parâmetro e depois executa
um conjunto de instruções em função do valor desse parâmetro.

switch expressão1

case expressão1 de teste


instruções1

case expressão2 de teste


instruções1
..
.
otherwise
instruções1

end

Tabela 4.9: Estrutura básica da instrução switch

Exemplo 4.7 Dado um número de 1 a 4, o conjunto de instruções seguintes fazem


que o computador retorne esse valor multiplicado respectivamente por 4, 3, 2, ou
1.Caso o número introduzido seja diferente dos anteriores devolve 0.
4.4. SCRIPTS E FUNÇÕES 45

>>x=input(’introduza um numero!’)
>>switch x
case 1 % se x=1
x=x*4
case 2 % se x=2
x=x*3
case 3 % se x=3
x=x*2
case 4 % se x=4
x=x*1
otherwise % caso contrário
x=0
end

4.4 Scripts e Funções


Scripts e funções são conjuntos de código que são guardados em ficheiros
próprios do MatLab, de nome m­files, e que depois de chamados na janela de
comando executam essas instruções com eventual recurso a variáveis auxiliares. A
principal diferença entre os scripts e as funções é que os primeiros, não aceitam ar­
gumentos de entrada nem devolvem argumentos de saída usando apenas (eventual­
mente) dados definidos no workspace. As funções, pelo contrário, têm argumentos
de entrada e argumentos de saída e todas as variáveis que não sejam nenhum dos
parâmetros anteriores têm de ser definidas internamente no código de função.
No fundo, os scripts não são mais do que repetições do código que se executa na
janela de comando. Assim sendo têm uma relação directa com todas as variáveis
definidas no workspace podendo aceder a elas e modificá­las em qualquer altura.
Pelo contrário, a única ligação que as funções têm com o "exterior"do código é
dada pelos parâmetros de entrada e de saída4 (os primeiros no sentido de recolher
informação, e os segundos no sentido de devolver informação).
Apresentam­se agora duas m­files, uma função ­ fmpot.m, e um script­ smpot.m,
que executam o algoritmo (simplificado) do método da potência (ver por exem­
plo em [1]. Este método, usado para determinar aproximações do valor e vector
próprio dominante de uma matriz quadrada A∈ Rn×n , consiste genericamente em,
dada um vector inicial x∈ Rn×1 , pré­multiplicá­lo pela matriz A, obtendo assim
um novo vector y∈ Rn×1 que depois de normalizado,

y
y=
�y�

4 Relembre a tabela 4.1


46 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

, é usado como sendo o novo vector x, iterando­se assim o processo até que, por
exemplo, a diferença (elemento a elemento) entre duas aproximações sucessivas (x
e y) do vector próprio dominante sejam menor que um determinado valor (definido
pelo utilizador). Deve­se também usar um parâmetro extra k, para limitar o número
de iterações que a rotina pode executar evitando assim que esta possa entrar em ci­
clo infinito.
Este processo teoricamente converge se o valor próprio dominante for simples.
Veja­se então uma função em MatLab que implemente este método:

Rotina 4.1 fmpot.m


function [valor_proprio,vector_proprio,i]=fmpot(A,x,k)
% Esta funçao implementa o metodo da potencia simplificado.
%————­Parametros de entrada————————
%A ­matriz quadrada
%x ­ vector inicial
%k ­ numero maximo de iteraçoes
%————­Parametros de entrada————————
%valor_proprio ­ aproximaçao do valor proprio dominante
%vector_proprio ­ aproximaçao do vector proprio dominante
%i ­ numero de iteraçoes utilizadas ate obter precisao de 10∧ ­15).
%——————–OBSERVAÇAO—————————­
%Se i=k a precisao pode nao ter sido atingida.
%———————Exemplo——————————
%A=magic(3), x=[1;0;0], k=100
%[valor_proprio,vector_proprio,i]=fmpot(A,x,k)
%Manuel Cruz, 2004

i=0;
y=(A*x);
y=y/norm(y,2);
while(i <= k)&(max(abs(y − x)) > 10 ∧ ­15)
i=i+1;
x=y;
y=A*x;
y=y/norm(y,2); end
valor_proprio=max(A*y./y);
vector_proprio=y;
%Fim de função
Gravando esta rotina num directório (se necessário rever a secção 4.1.1) e criando a
matriz A e o vector x na janela de comando, (como exemplo pode usar, A=magic(3)
e x=[1;0;0] e k=100), pode executar a rotina fazendo,

>>A=magic(3)
4.4. SCRIPTS E FUNÇÕES 47

>>x=[1;0;0]
>>[valp,vecp,i]=fmpot(A,x,100)

obtendo,

valp=
15.00000000000001
vecp=
0.57735026918963
0.57735026918963
0.57735026918963
i=
31

O que significa que a função devolveu como vector próprio o array vecp, como
valor próprio valp e que demorou 31 iterações (este valor foi guardado em i) a
encontrar esta aproximação. Para verificar a qualidade da aproximação (relembre
que o par (λ,x) são respectivamente valor e vector próprio de uma matriz A se Ax­
λx=0) basta fazer na janela de comando,

>>A*vecp­valp*vecp

e verificar se o resultado é próximo do vector nulo.


De seguida apresenta­se um script que implementa também este método,

Rotina 4.2 scriptmpot.m


% Este script dada uma matriz quadrada A, um vector x e um %inteiro k, faz a
multiplicaçao y=A*x enquanto %max(abs(y­x))>10∧ ­15) no maximo k vezes.
%Manuel Cruz, 2004

i=0;
y=(A*x);
y=y/norm(y,2);
while(i <= k)&(max(abs(y − x)) > 10 ∧ ­15)
i=i+1;
x=y;
y=A*x;
y=y/norm(y,2); end
valor_proprio=max(A*y./y);
vector_proprio=y;
%Fim de script
A forma de executar este script é, depois de o guardar num directório apro­
priado (tal como foi feito para a função fmpot.m) é necessário criar as variáveis
48 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

(A,x,i) na janela de comando, tal como foi feito anteriormente, e depois escreve­se
o nome do script na janela de comando.

>>A=magic(3)
>>x=[1;0;0]
>>k=31
>>scriptmpot

Os resultados obtidos, estarão disponíveis no Workspace e pode­se visualizá­los


fazendo duplo clique sobre o ícon correspondente, ou então digitando o seu nome
na janela de comando. Chama­se a atenção para que o não aparecimento de qual­
quer dado na janela de comando se ficou a dever à utilização de ; no fim de cada
uma das instruções que compõe o script. Caso não se terminem as instruções dessa
forma todos os resultados (intermédios ou não) aparecerão na janela de comando.
Caso este ponto não tenha ficado claro, aconselha­se a execução deste script sem ;
para perceber bem as diferenças.
Quanto às diferenças mais evidentes entre os dois tipos de m­file podem­se salien­
tar:

• No script as variáveis necessárias à execução do código (neste caso A,x,i) de­


vem ser definidas (com o mesmo nome que vão ser utilizadas) pelo utilizador
antes da chamada da rotina. Na função, estas podem ser definidas quando
da execução da rotina e até mesmo com outros nomes, desde que estes se­
jam colocados pela ordem correcta nos parâmetros de entrada da função (por
exemplo, [valor_proprio,vector_proprio,i]=fmpot(magic(3),[1;0;0],100))

• O script retorna todas as variáveis internas criadas durante a execução do


código, colocando­as no workspace. Já a função, só retorna as variáveis
que são consideradas parâmetros de saída ( se necessário rever 4.1). No
entanto, pode­se renomear essas variáveis ao chamar a rotina. (por exemplo,
[vp,vep,j]=fmpot(magic(3),[1;0;0],100)).

4.5 Construção de funções em MatLab


Nesta secção indicam­se algumas regras que poderão ser úteis a quem não tem
experiência em programação de rotinas. Como tal, o conteúdo é apenas orientador
não pretendendo de forma alguma ser um manual de programação.
Ao iniciar a construção de uma rotina é aconselhável que se faça um primeiro es­
boço do que se pretende que a rotina execute sendo importante não esquecer quais
as variáveis de entrada e quais os parâmetros que poderão ter interesse serem con­
hecidos no final. Para a rotina ser robusta e eficaz, o seu autor deve ter algum treino
e à vontade na área em que está a programar, pois só assim se pode saber qual o
tipo de problemas e entraves mais comuns.
Na execução do código é perfeitamente normal que vão aparecendo erros à medida
4.5. CONSTRUÇÃO DE FUNÇÕES EM MATLAB 49

que a rotina vai sendo construída. Para os ultrapassar devem­se separar essen­
cialmente dois tipos de erros: os erros de sintaxe, que derivam de uma deficiente
utilização das rotinas e instruções do MatLab e os erros que levam a uma resolução
errada do problema proposto. Enquanto que os segundos derivam geralmente de
uma má fundamentação teórica do problema, os primeiros podem ter várias origens
(que não serão aqui enumeradas). A maneira mais fácil de os detectar e corrigir
passa geralmente por dividir o programa em pequenas partes, verificar quais as
variáveis e valores atribuídos em cada uma delas, copiá­las para o "workspace"e
executar depois na janela de comando a parte do programa que está a dar prob­
lemas. Assim é mais fácil perceber a origem do erro e fazer a correspondente
correcção.
Nas linhas seguintes serão focados alguns tópicos que fazem parte das dúvidas
comuns de quem se inicia no campo da programação em MatLab.

4.5.1 Parâmetros de entrada


Numa rotina existem duas formas de introduzir os parâmetros: Ou o utilizador
os introduz quando chama a rotina, ou então a própria rotina os vai pedindo à me­
dida que vai necessitando (por exemplo, através do comando input5 ). Enquanto que
a primeira versão é bastante mais profissional, a segunda é mais indicada quando
o uso que se pretende fazer da rotina é puramente académico, pois a utilização
da rotina fica bastante mais acessível mesmo por quem não tem grandes conhec­
imentos do assunto. Neste capítulo não será desenvolvida esta segunda forma de
desenvolver a entrada dos parâmetros pelas razões apontadas atrás. Veja­se então
as implicações que tem a primeira forma de construir uma rotina. Existem essen­
cialmente dois tipos diferentes de entradas que podem ter interesse no âmbito deste
livro: Uma função, um conjunto (vector ou matriz) de valores numéricos ou os dois
casos em simultâneo.
No segundo caso é fundamental que se verifique a congruência dimensional dos
dados. Para tal convém certificar­se que todas as operações são dimensionalmente
possíveis de serem efectuadas, e de que o resultado é o pretendido. Este é o prin­
cipal problema que aparece na utilização deste tipo de parâmetros e que não é de
difícil resolução. Já no caso das funções como parâmetro de entrada, o caso muda
de figura. Veja­se então atentamente o primeiro caso descrito.
Neste caso o utilizador deve poder introduzir apenas a função, sejam quais forem
as variáveis. Como tal e porque se supõe que à partida não estão definidas quais­
quer variáveis simbólicas no workspace, vai­se aqui explicar uma maneira geral de
proceder (embora existam outras, como por exemplo usando o comando inline. No
entanto tal forma pode não ser prática quando, por exemplo, se pretendem calcular
derivadas de funções com várias variáveis). O primeiro passo a efectuar é intro­
duzir a função que se pretende utilizar dentro de plicas. Este modo de proceder, faz
com que o MatLab entenda este parâmetro de entrada como string. Deve­se agora
5 Para mais informações faça help input na janela de comando
50 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO

transformar a string num objecto simbólico, para que se possa tratar o parâmetro
de entrada como função. A instrução que permite efectuar tal acção é o comando
sym. É agora necessário que o MatLab identifique quais as variáveis da função:
para tal pode­se utilizar a instrução findsym. Esta instrução vai verificar quais as
variáveis que estão associadas ao objecto simbólico que é dado como argumento.
Depois destes passos, fica o utilizador em posição de tratar a função sem qualquer
dificuldade. Para uma mais fácil acompanhamento deste item, vai ser usado um
exemplo.
Chame­se dparciais.m à rotina que se pretende construir. Suponha­se agora que o
objectivo desta rotina é, dada uma função calcular as derivadas parciais em ordem
a cada uma das variáveis. Uma forma de o conseguir seria construir uma rotina
como a que se segue. No entanto, analisando­a (ou testando­a) com cuidado pode­
se verificar que tem algumas falhas. Consegue descobri­las? E descobrindo­as,
consegue resolvê­las? Aqui está um bom exercício para resolver sozinho e que
com certeza lhe dará um certo à vontade na "investigação"em MatLab. Relembre
no entanto que às vezes o mais importante não é atingir o objectivo final, mas a
forma como lá se chega e, principalmente, o que se aprende durante esse processo.

Exemplo 4.8 A rotina dparciais.m calcula, dada uma função de várias variáveis,
as derivadas parciais da função em ordem a cada uma das variáveis.

Rotina 4.3 dparciais.m


function [variaveis,derparc]=dparciais(f)

% Rotina que, dada uma funçao f, calcula as


%derivadas parciais de f em ordem a cada uma das suas variaveis.
%———————­Parametros de entrada———————
% f ­ funçao (que deve ser dada entre plicas).
%———————­Parametros de saida———————
%derparc ­ derivadas parciais da funçao em ordem a cada uma das
%variaveis
%v
f=sym(f); % transforma a string f numa variável simbólica
n=0;
L=findsym(f); % procura as variaveis simbolicas de f
tf = isletter(L); %devolve 1 quando é uma variavel
sz=size(tf,2);
for i=1:sz
if tf(i)==1 %Quando é variavel
n=n+1
syms(L(i)) %transforma essa letra é uma variável
variaveis(n,1)=[L(i)]
derparc(n)=diff(f,L(i)) % calcula a derivada parcial de f em ordem a essa variavel
end
4.5. CONSTRUÇÃO DE FUNÇÕES EM MATLAB 51

end
%Fim de função

4.5.2 Parâmetros de Saída


Os parâmetros de saída devem ser cuidadosamente planeados. Uma boa rotina
sem os devidos parâmetros de saída pode ser totalmente inútil. Assim sendo, de­
pois de a rotina estar a funcionar convém pensar em quais os parâmetros de saída
que poderão vir a ter alguma utilidade para o utilizador. É importante relembrar
que esses resultados devem estar disponíveis como vectores (ou matrizes) para
poderem ser facilmente utilizáveis noutra rotina. Assim, além de uma boa repre­
sentação na janela de comando (usando por exemplo a instrução fprintf ) é fun­
damental que esses resultados também fiquem disponíveis como uma nova var­
iável (vectorial ou matricial) no Workspace e a forma de o fazer é colocá­los como
parâmetros de saída da função. Neste caso estão a ser referidos essencialmente
dados numéricos. No entanto os parâmetros de saída também podem ser strings,
gráficos, vídeos etc...
52 CAPÍTULO 4. INSTRUÇÕES BÁSICAS DE PROGRAMAÇÃO
Capítulo 5

O Help do MatLab

Este é talvez a parte do MatLab mais importante para qualquer aluno com von­
tade de ser bom a trabalhar com o programa. Por dois motivos: primeiro porque o
utilizador que domine bem esta parte do programa, consegue resolver uma grande
parte dos seus problemas. Segundo, porque pode ajudar a poupar muito trabalho,
pois existem muitas funções de utilização comum já definidas no programa, sendo
portanto um desperdício de tempo voltar a programá­las. A ajuda do MatLab fun­
ciona de duas formas distintas: uma através da ajuda que está implicitamente criada
nos comandos e funções internamente definidos. Este é o tipo de comentários que
se obtém quando se executa o comando help nomedecomando na janela de co­
mando do MatLab. Esta acção devolve uma descrição sucinta do comando e das
suas opções. É bastante útil quando se conhece o nome do comando mas não se
sabe como o utilizar. No entanto, quando não se sabe qual o comando a utilizar para
uma determinada acção, na maioria das vezes a melhor alternativa é abrir o help do
programa. Para tal, o melhor é abrir a janela do help1 e seleccionar a opção MatLab
Help. Para tal é necessário ter esta opção instalada. (Ocupa cerca de 339MB em
disco, tirando os documentos em PDF, que devem ser guardados em CD, ocupando
estes cerca de 400MB). Depois de ter a janela do help aberta, existem três opções
básicas. Ou se selecciona a opção índex, o que faz com que o programa procure um
tópico com o nome digitado, ou se selecciona a opção search. Nesta ultima opção
o MatLab procura todos os documentos que contêm a palavra ou frase digitada.
Por fim, se se quiser apreender a trabalhar numa área específica, o melhor é abrir
a opção contents, procurando depois a área em que se está a trabalhar. Para se ter
uma noção geral das potencialidades do programa, talvez o melhor seja navegar
um pouco pelo Demo que está incluído no programa (escrever demo na janela de
comando). Isto dará a um novo utilizador uma ideia das potencialidades deste pro­
grama.
Com este capítulo dá­se por terminada esta primeira parte referente ao uso básico
do MatLab para o curso de Métodos Numéricos. É importante que o utilizador
tenha consciência da grande amplitude de temas que o MatLab cobre, e que como
1A partir da versão 6

53
54 CAPÍTULO 5. O HELP DO MATLAB

tal não é um software fácil de conhecer totalmente. No entanto, tendo presente as


bases de funcionamento do programa, tudo isso vai sendo naturalmente assimilado
(à custa de algum tempo dispendido!). Quanto aos exercícios a seguir enunciados,
o seu objectivo é pôr à prova alguns dos conhecimentos básicos aqui adquiridos.
Como tal, deve tentar resolvê­los pois os assuntos que estão por detrás da sua
solução são considerados essenciais para poder progredir no âmbito deste curso.
Capítulo 6

Alguns exercícios de aplicação

Os exercícios abaixo devem ser realizados com um espírito critico, i.e., os seus
resultados devem ser cuidadosamente examinados e compreendidos. Caso tal não
aconteça é muito provável que mais cedo ou mais tarde apareçam graves dificul­
dades.

1. Defina os vectores, x=[1,2,3] e y=[4,5,6]. Calcule e explique o resultado:

(a) x+y
(b) x*y
(c) x.*y
(d) x*y’
(e) x’*y
(f) x’*y’

2. Defina uma nova matriz A, através do comando, A=magic(12)

(a) Calcule a soma de cada uma das linhas de A.


(b) Calcule a soma de cada uma das colunas de A.
(c) Crie a partir da matriz A, uma nova matriz B, composta pelos elemen­
tos da 3a ,4a e 5a coluna de A.
(d) Crie a partir da matriz A, uma nova matriz C, composta pelos elemen­
tos da 6a ,7a e 13a linha de A.
(e) Calcule, e explique as diferenças entre,
i. D=A∧ 2
ii. E=A.∧ 2

3. Qual o output produzido por:


x=0:0.01:2;
y=x.∧ 2­3;

55
56 CAPÍTULO 6. ALGUNS EXERCÍCIOS DE APLICAÇÃO

plot(x,y);
hold on
xx = [0 2];
yy = [0 0];
plot(xx,yy);
grid on
hold off

4. Represente graficamente as funções, no intervalo [­100,100].

(a) cos(x4 − 3x)


(b) ex cos(x)
(c) ex cos(| x |)
(d) Resolva as alíneas anteriores através de outros comandos.

5. Use o comando ginput, para determinar um intervalo de amplitude inferior a


0.1 que contenha um ponto de intersecção das curvas, 1 + ex e e−x .

6. Calcule o valor das seguintes funções nos pontos indicados:

(a) cos(x4 − 3x) em x = 2


(b) ex cos(x) entre x = 1 e x = 2 com espaçamento de 0.01
(c) arccos(xy) para x = 1 e y = 0.5
∂f ∂f
(d) ∂x e ∂y onde f (x, y) = arccos(xy) no ponto (1,0.5).
(e) Repita as alíneas anteriores usando 16 algarismos significativos.

7. Construa uma rotina que permita ao utilizador calcular o valor da função


definida
⎧ do seguinte modo:
⎨ x4 ,x < 0
sin(x) , 0 ≤ x ≤ π
⎩ x−π
e −1 ,x > π
8. Construa uma rotina que permita ao utilizador verificar se um dado número
entre 1 e 10000 é primo.

9. Tente descobrir através do help, como ajustar um polinómio de grau 10 a


um conjunto de 100 pontos bidimensionais. (use por exemplo os vectores
x=1:100 , y=exp(x)). Sugestão: Ajuste de curvas, traduz­se para Inglês como
"curve fitting".

10. Construa uma rotina que, dada uma função real de variável real, um con­
junto de pontos e um número inteiro positivo, n, calcule o valor da n­ésima
derivada de f no conjunto de pontos dados e apresente uma nova janela com
dois gráficos (usando por exemplo a instrução subplot): Um que contenha o
valor da função e outro o valor da n­ésima derivada nos pontos dados.

Você também pode gostar