Escolar Documentos
Profissional Documentos
Cultura Documentos
1. INTRODUÇÃO
Após iniciar uma sessão Matlab abre-se uma janela semelhante à mostrada na
Figura 1.1, designada por Matlab Desktop. A figura contém três pequenas sub-janelas,
que se podem activar/desactivar a partir da opção Desktop do menu principal:
Command Window, Current Directory Window e Command History Window. Este é
o modo de abertura padrão (por defeito) do Matlab.
No entanto, o Matlab pode por meio de funções internas, apresentar outro tipo de
janelas. No total, o Matlab pode apresentar os seguintes tipos de janelas:
Janela de Comandos (Command Window) – É a janela principal, inicializa
variáveis, e permite executar comandos e funções Matlab;
Historial de Comandos (Command History) – Janela que apresenta o
histórico dos comandos mais recentes digitados na Janela de Comandos;
Navegador de Directorias (Current Directory) – Permite alterar a directoria
de trabalho (corrente), bem como visualizar os respectivos ficheiros;
Introdução à Programação 5
Os pontos seguintes descrevem como se deve trabalhar com mais pormenor com a
Janela de Comandos e com o Editor.
Quando o sistema está preparado para receber comandos apresenta o símbolo >>
na Janela de Comandos, designado por prompt.
Quando o comando é digitado e a tecla ENTER pressionada, o comando é
executado. Normalmente, é digitado um comando por linha; contudo, se pretendermos
que vários comandos sejam digitados na mesma linha, eles devem ser separados por
vírgulas. Quando a tecla ENTER é pressionada, os comandos são executados pela
ordem com que foram digitados, da esquerda para a direita.
Um comando anteriormente digitado pode ser chamado outra vez através das
teclas de direcção do teclado (↑) e (↓). Assim que o comando desejado for exibido no
prompt, é possível modificá-lo (se necessário) e executá-lo.
Se um comando for muito extenso de modo que não caiba numa linha, pode-se
digitar reticências (…) e pressionar a tecla ENTER para continuar na próxima linha.
A continuação de um comando no Matlab pode ocupar 4.096 caracteres após a linha
inicial.
Se no final de um comando, digitar um ponto e vírgula (;) o resultado de saída é
ocultado.
Os comentários são usados para adicionar descrições ou explicar algum ponto
particular do programa. Quando o símbolo de percentagem (%) é digitado no início de
uma linha de comando, o programa considera a linha como um comentário. Significa
que, quando a tecla ENTER for pressionada, a linha não será executada. O símbolo %
seguido de um comentário, também pode ser digitado após um comando. Tal, não
produzirá qualquer efeito na execução desse comando.
Introdução à Programação 7
1.4 VARIÁVEIS
ou simplesmente,
>> expressão
>> x=6
x=
6
>> disp(x)
6
>>
Esta função é também usada para escrever texto, mostrando uma sequência de
caracteres entre plicas (string). Mostra-se um exemplo a seguir:
Para além desta função, o Matlab tem outra função de escrita de variáveis,
que permite um melhor controlo na formatação dos dados - a função fprintf - que será
estudada no ponto 4.
1
cos (x) Co-seno de x (x em radianos); se >> cosd (90)
fizer cosd (x) então x é em graus. ans =
0
tan (x) Tangente de x (x em radianos); se >> tand (180)
fizer tand (x) então x é em graus. ans =
0
sec (x), csc Secante, Co-secante e Co- >> secd (180)
(x), cot (x) tangente de x (x em radianos); se ans =
fizer secd (x), cscd (x) ou cotd (x) -1
então x é em graus.
asin (x), Arco seno, Arco co-seno e Arco >> asind (1)
acos (x), atan tangente; se fizer asind (x), acosd ans =
(x) (x), atand (x) então o ângulo 90
respectivo é em graus.
-1
1.6 AJUDA
2. MATRIZES (“ARRAYS”)
Todas as variáveis em Matlab são matrizes. Uma matriz é uma lista de valores
organizados em linhas e/ou colunas; a matriz mais simples (unidimensional) é
formada por uma linha ou por uma coluna, também denominadas vectores. As
operações estudadas no ponto anterior envolveram variáveis escalares, que são
tratadas em Matlab como matrizes especiais de dimensão 1 x 1, ou seja matrizes de
uma linha por uma coluna.
Consoante o número de linhas e colunas pode-se falar em diversos tipos de
matrizes. Uma matriz m x n é uma tabela de valores dispostos em m linhas por n
colunas. Quando uma matriz possui apenas uma única linha (m=1) denomina-se
vector linha, e se tem apenas uma única coluna designa-se por vector coluna.
As matrizes podem ser introduzidas em Matlab de diferentes maneiras:
- digitadas na Janela de Comandos;
- geradas por comandos e funções;
- criadas em ficheiros-Matlab;
- carregadas a partir de um ficheiro de dados externo.
2.1 VECTORES
Como se estudou no ponto anterior, um vector é uma matriz com uma única
linha (vector linha) ou com uma única coluna (vector coluna).
Em Matlab a forma mais simples de criar um vector, é utilizar o operador de
concatenação ( [ ] ) digitando os seus elementos entre parêntesis rectos. No caso de
um vector linha, os seus elementos estão separados por um espaço ou por uma
vírgula; no caso de um vector coluna, os seus elementos estão separados por um ponto
e vírgula ou então dever-se-á pressionar a tecla ENTER após digitar cada elemento.
No exemplo seguinte, mostram-se diferentes formas de definir o vector x; as duas
primeiras como vectores linha, e as outras duas como vectores coluna.
>> x = [1 3 5 7 9]
x=
1 3 5 7 9
>> x = [1,3,5,7,9]
x=
1 3 5 7 9
>> x = [1;3;5;7;9]
x=
1
3
5
7
9
>> x = [1
3
5
Introdução à Programação 17
7
9]
x=
1
3
5
7
9
>>
>> x = [1 3 5 7 9]
x=
1 3 5 7 9
>> x(end)
ans =
9
>> x(end-1)
ans =
7
>>
>> x = [1:2:11]
x=
1 3 5 7 9 11
>> y = [1:7]
y=
1 2 3 4 5 6 7
>> y = [1:-2:-7]
y=
1 -1 -3 -5 -7
>>
Introdução à Programação 18
1 2 3
4 5 6 ( matriz 4 x 3 )
7 8 9
10 11 12
>> x = [1 2 3
456
789
10 11 12]
Introdução à Programação 19
x=
1 2 3
4 5 6
7 8 9
10 11 12
>>
As linhas duma matriz também podem ser geradas por meio do comando linspace
ou por meio da notação de criação de vectores com incremento constante estudados
no ponto anterior. Por exemplo,
>> x = zeros(5,6)
x=
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
>> y = ones(5,6)
Introdução à Programação 20
y=
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
>> z = eye(5)
z=
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>>
>> A = [1 2 3; 4 5 6; 7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> A (2,3)
ans =
6
>> A (3,1) = 20
A=
1 2 3
4 5 6
20 8 9
>> A (2,2) - A (3,2)
ans =
-3
>>
Introdução à Programação 21
Podemos usar dois pontos ( : ) para referenciar uma gama de elementos dentro de
um vector ou matriz.
No caso de um vector, por exemplo x (m:n) referencia todos os elementos entre as
posições m e n do vector x.
>> x = [2 -3 5 8 3 45 64]
x=
2 -3 5 8 3 45 64
>> y = x(3:6)
y=
5 8 3 45
>>
3 45 89
7 -54 12
>> E = A(2:4,3:6)
E=
7 98 1 76
21 8 6 11
3 45 89 -53
>>
> x = 5:4:41
x=
5 9 13 17 21 25 29 33 37 41
>> y = x([2,4,6:9])
y=
9 17 25 29 33 37
>> A = [2:3:20;ones(1,7);1:2:13;zeros(1,7)]
A=
2 5 8 11 14 17 20
1 1 1 1 1 1 1
1 3 5 7 9 11 13
0 0 0 0 0 0 0
>> B = A([1,3],[1,3,5:7])
B=
2 8 14 17 20
1 5 9 11 13
>>
>> x = 1:5
x=
1 2 3 4 5
>> x(6:10) = 10:8:42
x=
1 2 3 4 5 10 18 26 34 42
>> y = [1 2 3]
y=
1 2 3
>> y(7) = 4
y=
1 2 3 0 0 0 4
>> w (4) = 10
w=
0 0 0 10
>>
>> x = 1:5
x=
1 2 3 4 5
>> y = 6:10
y=
6 7 8 9 10
>> z = [x y]
z=
1 2 3 4 5 6 7 8 9 10
>> z = [x;y]
z=
1 2 3 4 5
6 7 8 9 10
>>
No caso das matrizes, linhas e/ou colunas podem ser inseridas numa matriz
previamente definida, atribuindo valores aos novos elementos e juntando-os à matriz
existente. Neste caso é necessário algum cuidado, já que o tamanho das linhas ou
colunas adicionadas, deve estar de acordo com a definição da matriz original. Alguns
exemplos:
Introdução à Programação 24
>> A = [1 2 3 4 5; 6 7 8 9 10]
A=
1 2 3 4 5
6 7 8 9 10
>> A(3,:) = [11 12 13 14 15]
A=
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> B = eye(3)
B=
1 0 0
0 1 0
0 0 1
>> C = [A B]
C=
1 2 3 4 5 1 0 0
6 7 8 9 10 0 1 0
11 12 13 14 15 0 0 1
>>
>> x = 1:3:28
x=
1 4 7 10 13 16 19 22 25 28
>> x(6) = []
x=
1 4 7 10 13 19 22 25 28
>> x(4:7) = []
x=
1 4 7 25 28
>> A = [1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20]
A=
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
>> A(:,2:4) = []
A=
1 5
6 10
11 15
16 20
>>
2 6
length (A) Devolve o comprimento de um >> A=[1 3 5 7 9]
vector. A=
1 3 5 7 9
>> length (A)
ans =
5
numel (A) Devolve o número de elementos >> A=[1 2 3 4 5 6; 7 8 9
da matriz. 10 11 12]
A=
1 2 3 4 5
6
7 8 9 10 11
12
>> numel (A)
ans =
12
reshape(A,m, Rearranja uma matriz com r >> A
n) linhas e s colunas para m linhas e n A=
colunas. De notar que o produto r x s 1 2 3 4 5
deve ser igual ao produto m x n 6
7 8 9 10 11
12
>> reshape (A,3,4)
ans =
1 8 4 11
7 3 10 6
2 9 5 12
diag (x) Quando x é um vector, cria uma >> x=[1 2 3 4]
matriz quadrada contendo os x=
elementos de x na diagonal principal 1 2 3 4
>> diag(x)
ans =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
diag (A) Quando A é uma matriz, cria um >> A=[1 2 3 4;5 6 7 8;9
vector coluna a partir dos elementos 10 11 12]
na diagonal principal A=
1 2 3 4
5 6 7 8
9 10 11 12
>> diag(A)
ans =
1
6
11
>> x = [1 2 3]
x=
1 2 3
>> y = x'
y=
1
2
3
>> A = [1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> B = A'
B=
1 4 7
2 5 8
3 6 9
>>
Uma string pode conter letras, números, espaços e outros símbolos. As aspas
simples ( ‘ ) também podem ser usadas dentro de strings; para isso, são necessárias
duas aspas dentro da string, para que o Matlab interprete como uma única aspa.
Quando uma string está a ser digitada, os caracteres aparecem em roxo após a
aspa de abertura da string. Após fechar a segunda aspa, os caracteres mudam para a
cor normal.
Quando uma variável é declarada como string, os caracteres que a formam são
armazenados na forma de um vector de linhas semelhante ao que foi descrito atrás no
ponto 2.1. Cada carácter, incluindo os espaços, é um elemento do vector. Significa
isto que, uma string de uma linha é um vector linha com um número de elementos
igual à quantidade de caracteres contidas na string.
Os elementos da string são referenciados pela posição que ocupam no vector. No
exemplo seguinte, no vector cadeira o primeiro elemento é um espaço, e o quinto
elemento é a letra r.
>> cadeira(5)
ans =
r
>>
As matrizes também podem conter strings, e tal como foi feito para os números
descrito no ponto 2.2, deve-se digitar ponto e vírgula ou pressionar a tecla ENTER no
fim de cada linha. Cada linha deve ser tratada como uma string, ou seja, é necessário
colocar aspas no início e no fim de cada uma delas.
Neste caso, cada string é armazenada numa linha da matriz e os seus caracteres
são distribuídos pelas colunas correspondentes. Portanto, um vector de strings apenas
é válido se todas as strings (linhas) tiverem o mesmo comprimento. Quando se cria
um vector de strings por atribuição utilizando o operador de concatenação ( [ ] ), é
Introdução à Programação 29
necessário aumentar cada string com espaços até atingir o comprimento da maior
string. No exemplo seguinte é necessário introduzir 3 espaços na primeira linha de
modo a introduzir compatibilidade na matriz.
Uma forma mais fácil de criar vectores de linhas é recorrer à função char, que cria
um vector de linhas com o mesmo número de linhas, a partir de caracteres de entrada
com tamanhos diferentes. O Matlab adiciona automaticamente espaços de modo a
igualar as linhas menores àquela que possuir mais elementos (ou seja, a maior linha
da matriz). Na função char, as linhas devem ser separadas por vírgulas, tal como se
demonstra no exemplo seguinte:
>> x = [5 8 -4]
x=
5 8 -4
>> y = [3 -5 6]
y=
3 -5 6
>> x + y
ans =
8 3 2
>> x - y
ans =
2 13 -10
>> A = [4 -6 10;-2 15 6]
A=
4 -6 10
-2 15 6
>> B = [7 14 1;52 -2 8]
B=
7 14 1
52 -2 8
>> A + B
ans =
11 8 11
50 13 14
>> A - B
ans =
-3 -20 9
-54 17 -2
>>
Introdução à Programação 31
>> x = [5 8 -4]
x=
5 8 -4
>> x - 3
ans =
2 5 -7
2.5.2 MULTIPLICAÇÃO
>> A = [4 -6 10;-2 15 6]
A=
4 -6 10
-2 15 6
>> B = [5 1 10 2;3 -8 -1 4;7 6 -2 9]
B=
5 1 10 2
3 -8 -1 4
7 6 -2 9
>> A * B
ans =
72 112 26 74
77 -86 -47 110
>> x = [3 7]
x=
3 7
>> x * A
ans =
-2 87 72
>>
Introdução à Programação 32
>> x*z
??? Error using ==> mtimes
Inner matrix dimensions must agree.
>> dot (x,z)
ans =
104
>>
>> x =[ 1 2 3]
x=
1 2 3
>> 5*x
ans =
5 10 15
>> x*5
ans =
5 10 15
2.5.3 DIVISÃO
X = A\B.
2x + 3y + 2z = 1
3x + 4y + z = 3
5x + 4y + z = 2
O operador de divisão à direita (/) é usado, entre outras coisas, para resolver a
equação matricial XC = D, em que X e D são vectores linha.
A equação XC = D, pode ser resolvida multiplicando à direita ambos os lados da
equação pela inversa de C:
XCC-1 = DC-1
O lado esquerdo da equação é igual a,
XCC-1 = XI = X
e portanto, a solução da equação XC = D é,
X = DC-1,
X = D/C.
De seguida ilustra-se a resolução do sistema de equações anterior por meio
do operador de divisão à direita.
2 3 5
3 4 4
2 1 1
>> C = [2 3 5;3 4 4;2 1 1]
C=
2 3 5
3 4 4
2 1 1
>> D =[1 3 2]
D=
1 3 2
>> x = D*inv(C)
x=
-0.5000 1.4000 -1.1000
>> x=D/C
x=
-0.5000 1.4000 -1.1000
>>
2.5.4 EXPONENCIAÇÃO
Operação Símb
olo
Multiplicação escalar .*
Divisão escalar à direita ./
Divisão escalar à esquerda .\
Exponenciação escalar .^
Por outro lado, é de notar que na execução das função internas do Matlab quando
o argumento de entrada é uma matriz, a operação é realizada em cada elemento dessa
matriz. O resultado da execução da função é uma nova matriz, cujos elementos são o
resultado da aplicação da função sobre cada um dos elementos da matriz inicial.
A seguir mostra-se a aplicação da função sind (x), em que x é um vector com 5
elementos. O resultado é um vector com 5 elementos, resultantes da aplicação da
função sind sobre cada um dos 5 elementos da matriz inicial.
>> sind(x)
ans =
0.5000 0.8660 -0.8660 0.7071 1.0000
>>
>> A = [4 1 5 9;6 4 1 8]
A=
4 1 5 9
6 4 1 8
>> factorial(A)
ans =
24 1 120 362880
720 24 1 40320
>> log10(A)
ans =
0.6021 0 0.6990 0.9542
0.7782 0.6021 0 0.9031
>> sqrt(A)
ans =
2.0000 1.0000 2.2361 3.0000
2.4495 2.0000 1.0000 2.8284
>>
Introdução à Programação 40
3. OPERADORES
>> 7>5
ans =
1
>> 7<=5
ans =
0
>> a = 7>5
a=
1
>> x
x=
4 1 5 9
>> 4<=x
Introdução à Programação 41
ans =
1 0 1 1
>> A
A=
3 5 -2 1
7 9 0 4
>> 4<=A
ans =
0 1 0 0
1 1 0 1
>> B = [2 5 6 1;7 -4 0 8]
B=
2 5 6 1
7 -4 0 8
>> A~=B
ans =
1 0 1 0
0 1 0 1
>> C=A-B>=1
C=
1 0 0 0
0 1 0 0
>>
>> A
A=
3 5 -2 1
7 9 0 4
>> C=A<=3
C=
1 0 1 1
0 0 1 0
>> D = A(C)
D=
3
-2
0
1
>> x
Introdução à Programação 42
x=
4 1 5 9
>> t=x>=4
t=
1 0 1 1
>> z = x(t)
z=
4 5 9
>>
>> A
A=
3 5 -2 1
7 9 0 4
>> B
B=
2 5 6 1
7 -4 0 8
>> (A~=B)/3+(A.*B)
ans =
6.3333 25.0000 -11.6667 1.0000
49.0000 -35.6667 0 32.3333
>>
>> 5&0
ans =
0
>> 5|0
ans =
1
>> ~5
ans =
0
>> ~0
ans =
1
>>
>> x = [4 -5 0 10]
x=
4 -5 0 10
>> y = [1 0 4 3]
y=
1 0 4 3
Introdução à Programação 44
>> x&y
ans =
1 0 0 1
>> ~x
ans =
0 0 1 0
>> 5&x
ans =
1 1 0 1
>> ~y
ans =
0 1 0 0
>> z = ((5&0)+4+(3|0))
z=
5
>> z = 8*((5&0)+4+(3|0))
z=
40
>>
O Matlab possui ainda um outro conjunto de funções lógicas, que retornam um (1)
quando a condição que testam é verdadeira e zero (0) quando é falsa. De seguida
listam-se as mais importantes:
ENTRADA SAÍDA
A B AND OR NOT NOT XOR
A&B A|B ~A ~B xor
(A,B)
V V V V F F F
Introdução à Programação 46
V F F V F V V
F V F V V F V
F F F F V V F
Precedência Operação
1 (Mais alta) Parêntesis.
2 Exponenciação.
3 Operador lógico NOT.
4 Multiplicação e divisão.
5 Adição e subtracção
6 Operadores relacionais (>, >=, <, <=, = =, ~=)
7 Operador lógico AND (&).
8 (Mais Operador lógico OR (|).
baixa)
>> 5*4-6^2+8/4
ans =
-14
>> 5*(4-6)^2+8/4
ans =
22
>> 4+5^3*6&-2+3+6/~0
ans =
1
>> 5*4*6>=3-10|8~=-2*~7+6\18
ans =
1
>> 5*4*((6>=3)-10|8~=-2*~7+6\18)
Introdução à Programação 47
ans =
20
>>
Introdução à Programação 48
4. INSTRUÇÕES DE CONTROLO
4.1.1 INSTRUÇÃO if
end
Se a expressão lógica 1 for verdadeira, o programa executará o bloco de instruções
1 e depois saltará para o comando end; se for falsa, o programa vai testar a expressão
lógica 2, e caso seja verdadeira, executará o bloco de instruções 2 e depois saltará
para o comando end; se for falsa, o programa vai testar a expressão lógica 3, e caso
seja verdadeira, executará o bloco de instruções 3 e depois saltará para o comando
end. Se nenhuma das expressões lógicas for verdadeira, o programa executará o bloco
de instruções a seguir ao comando else (se existir).
De realçar que é possível ter vários comandos elseif numa estrutura if, o que
possibilita testar várias condições com uma única instrução if. Por outro lado, o
comando else é opcional. No caso de não existir, e se tivermos vários elseif na
estrutura if, o programa executará o 1º bloco de instruções cuja expressão lógica seja
verdadeira, e poderá mesmo não executar qualquer comando, se todas as expressões
lógicas tiverem o valor falso.
Neste exemplo, as variáveis mbom, bom, suf e rep (que pretendem guardar os
valores correspondentes ao número de alunos com Muito Bom, Bom, Suficiente e
Reprovado) são inicializadas com o valor zero, depois é solicitado ao utilizador uma
nota sendo de seguida visualizado no ecrã a classificação correspondente a esta nota,
bem como o novo valor da variável correspondente.
Bloco de Instruções 1
case Valor 2
Bloco de Instruções 2
….
otherwise
Bloco de Instruções n
end
Se o valor da expressão é igual ao valor 1, o programa executa o bloco de
instruções 1, e de seguida salta para o comando end. Do mesmo modo, se o valor da
expressão é diferente de valor 1 e igual a valor 2, executa o bloco de instruções 2 e
depois salta para o comando end.
A expressão pode ser um escalar, um carácter, uma string, ou uma expressão
lógica.
A instrução otherwise (opcional), se existir é executada no caso do valor da
expressão for diferente das várias opções existentes valor 1, valor 2, …, valor n; se a
instrução otherwise não existir e o valor da expressão for diferente das várias opções
existentes, não será executado nenhum bloco de instruções.
De notar que a instrução otherwise na estrutura switch-case é equivalente à
instrução else na estrutura if.
De seguida mostra-se um exemplo de aplicação desta instrução:
bom = bom+1
case {10,11,12,13}
disp('SUFICIENTE')
suf = suf+1
otherwise
disp('REPROVADO')
rep = rep+1
end
A expressão pode ser uma expressão lógica como se mostra no exemplo seguinte:
t = 45; t=
for p=1:5 47
t = t+2 t=
end 49
t=
p 51
t=
53
t=
55
p=
5
a = [1 3 5 8 9;7 -6 0 8 4] a=
for p = 1:2:5 1 3 5 8 9
p 7 -6 0 8 4
b = a+p p=
1
end b=
2 4 6 9 10
8 -5 1 9 5
p=
3
b=
4 6 8 11 12
10 -3 3 11 7
p=
5
b=
6 8 10 13 14
12 -1 5 13 9
Para além da sintaxe habitual o ciclo for pode assumir a forma de um vector com
elementos declarados explicitamente. Neste caso, em cada repetição é atribuído á
variável o valor de um dos elementos do vector, como se mostra no exemplo seguinte:
produto=1 produto =
for p = [1 5 8 9] 1
p p=
1
produto = produto*p
produto =
end 1
p=
5
produto =
5
p=
8
produto =
40
p=
9
produto =
360
% Ciclo while, em que apenas são válidas as notas entre zero e 20 valores
while ((nota>=0)&(nota<=20))
num_alunos = num_alunos+1
soma = soma+nota
media = soma/(num_alunos)
nota = input ('Qual a classificação ? ')
end
% Escreve valores %
fprintf(' Foram introduzidos %2.0f alunos com nota válida\n', num_alunos);
fprintf(' A média é %3.1f valores', media)
Qual a classificação ? 15
nota =
15
num_alunos =
1
soma =
15
Introdução à Programação 56
media =
15
Qual a classificação ? 12
nota =
12
num_alunos =
2
soma =
27
media =
13.5000
Qual a classificação ? -1
nota =
-1
Foram introduzidos 2 alunos com nota válida
A média é 13.5 valores>>
Se à entrada do ciclo a expressão é falsa (0), o ciclo não chega a ser executado
nenhuma vez. Por outro lado, pelo menos uma das variáveis da expressão de teste à
entrada do ciclo deve ser modificada dentro do ciclo, senão o programa entra em ciclo
infinito, e será necessário digitar Ctrl+C para parar a execução do programa.
Por vezes há a necessidade de inserir um ciclo ou uma instrução de selecção,
dentro de outro ciclo ou instrução de selecção. Neste caso, o ciclo ou a instrução de
selecção é inicializada e terminada dentro de outro ciclo ou instrução de selecção. O
Matlab não coloca limites ao número de ciclos ou instruções de selecção que estão
encadeados, mas todas as estruturas if, case, for e while nestas situações devem
terminar com o end correspondente.
De seguida mostra-se um exemplo de um ciclo for dentro de um ciclo while.
Partindo do exemplo mostrado atrás de cálculo da soma de n valores, o programa
permite nesta versão, que o cálculo seja repetido até que o utilizador digite uma tecla
que não o ‘S’ ou ‘s’. Por fim e já fora do ciclo, é mostrado o número de cálculos que
foram efectuados.
while ((resposta=='S')|(resposta=='s'))
% Inicialização da variável soma %
soma=0;
num_resp=num_resp+1;
% Valor a calcular pedido ao utilizador %
n=input('Qual o valor a calcular ? ');
soma = soma+i;
end
% Mostra o valor da soma %
fprintf('A soma dos %i elementos é %i\n', n,soma);
if num_resp==5
disp('TERMINOU !!! JÁ FEZ 5 CÁLCULOS !!!')
break
end
resposta=input('Quer continuar ? (s/n) ','s');
end
Símbol
Descrição
o
\n Passa para a linha seguinte
\b Retrocede uma casa
\t Faz tabulação horizontal (TAB)
\r Faz RETURN
Introdução à Programação 60
\\ Escreve o caractér \
\’ Escreve o caractér ‘
%% Escreve o caractér %
Normalmente não temos apenas saída de texto, mas sim uma combinação de texto
e de números. Neste caso, a sintaxe é como vimos atrás:
fprintf (‘string formatado’,lista de variáveis)
O string formatado utiliza obrigatoriamente o caractér % e o descritor de formato
(f, e, E, g, G, i) apresentados a seguir:
Sím
Descrição
bolo
f Ponto fixo, ou número real com parte decimal.
e Ponto flutuante ou número real em notação científica com o e
Introdução à Programação 61
minúsculo.
Ponto flutuante ou número real em notação científica com o E
E
maiúsculo.
g Usa a notação mais compacta f ou e.
G Usa a notação mais compacta f ou E.
i Número inteiro.
>> custo_litro=1.24;
>> fprintf(' O custo do litro do gasóleo é %f €',custo_litro)
O custo do litro do gasóleo é 1.240000 € >>
>> nota=16;
>> fprintf(' A nota do João é %i valores',nota)
A nota do João é 16 valores >>
Símbolo Descrição
- Justifica o número dentro do campo.
+ Mostra o sinal do número.
0 Adiciona zeros (em vez de espaços
em branco), se o número for menor do
que o definido pelo utilizador.
O número dos caracteres do número a apresentar pode ser definido pelo utilizador
por meio de descritores. Descrevemos de seguida os descritores mais utilizados:
%w.df
f - Ponto fixo ou notação decimal.
w – Número total de caracteres (incluindo o ponto decimal e eventual
sinal menos.
d – Número de casas decimais.
Introdução à Programação 62
%w.de
f - Ponto flutuante ou notação científica.
w – Número total de caracteres (incluindo o ponto decimal, eventual
sinal e cinco casas para o expoente).
d – Número de dígitos na mantissa após o ponto decimal.
%w.dg
Usa o menor dos formatos short ou short e, com o número total de
caracteres w e d casas decimais.
>> x=1:5
x=
1 2 3 4 5
>> y=sqrt(x)
y=
1.0000 1.4142 1.7321 2.0000 2.2361
>> T=[x;y]
T=
1.0000 2.0000 3.0000 4.0000 5.0000
1.0000 1.4142 1.7321 2.0000 2.2361
>> fprintf('Se o número é %i, a sua raíz quadrada é %f\n',T)
Se o número é 1, a sua raíz quadrada é 1.000000
Se o número é 2, a sua raíz quadrada é 1.414214
Se o número é 3, a sua raíz quadrada é 1.732051
Se o número é 4, a sua raíz quadrada é 2.000000
Se o número é 5, a sua raíz quadrada é 2.236068
>>
>> x=1:5
Introdução à Programação 63
x=
1 2 3 4 5
>> y=sqrt(x)
y=
1.0000 1.4142 1.7321 2.0000 2.2361
>> T=[x;y]
T=
1.0000 2.0000 3.0000 4.0000 5.0000
1.0000 1.4142 1.7321 2.0000 2.2361
>> fprintf('A raíz quadrada de %i é %f\n',T)
A raíz quadrada de 1 é 1.000000
A raíz quadrada de 2 é 1.414214
A raíz quadrada de 3 é 1.732051
A raíz quadrada de 4 é 2.000000
A raíz quadrada de 5 é 2.236068
O comando fprintf pode ser utilizado para gravar os resultados de saída num
ficheiro. Estes dados poderão posteriormente ser utilizados pelo Matlab ou noutras
aplicações.
São necessários três passos para escrever dados num ficheiro utilizando o
comando fprintf:
1. Abrir um ficheiro utilizando o comando fopen.
2. Escrever os dados no ficheiro aberto utilizando o comando fprintf .
3. Fechar o ficheiro utilizando o comando fclose.
Passo 1:
Antes dos dados serem gravados num ficheiro, esse ficheiro deve ser aberto com o
comando fopen. Com este comando pode-se abrir um ficheiro já existente, ou criar
um novo.
A sintaxe do comando é:
fid = fopen (‘nome_do_ficheiro’, ’parâmetro de abertura’)
Passo 2:
Depois do ficheiro estar aberto, podemos escrever nele com o comando fprintf.
Neste caso, a sua sintaxe é:
Passo 3:
Para concluir o processo de escrita, o ficheiro tem de ser fechado com o comando
fclose. A sua sintaxe é:
fclose ( fid)
clear all
clc
x=1:5;
rq=sqrt(x);
tab1=[x;rq];
q=x.^2;
tab2=[x;q];
fid1=fopen('raiz_quad.txt','w');
fid2=fopen('quad.txt','w');
fclose(fid1);
fclose(fid2);
Neste ponto vamos estudar apenas alguns comandos mais comuns utilizados na
importação e exportação de dados numéricos em Matlab. O Matlab disponibiliza uma
grande diversidade de comandos utilizados para a transferência de dados (consultar o
Help), mas que estão fora do âmbito deste curso.
O modo mais simples de fazer a importação de dados numéricos é por meio do
comando load a partir de um ficheiro de texto não formatado criado com um editor de
texto qualquer (por exemplo o Notepad). A sintaxe do comando é,
load (‘dados.txt’)
No ficheiro dados.txt os números são separados com espaços e as linhas terminam
com ENTER.
O exemplo seguinte tem por base o exemplo do ponto anterior, mas em que os
valores do vector x são importados do ficheiro dados.txt.
clear all
clc
x=load('dados.txt')
rq=sqrt(x);
tab1=[x;rq];
q=x.^2;
tab2=[x;q];
fid1=fopen('raiz_quad.txt','w');
fid2=fopen('quad.txt','w');
fclose(fid1);
fclose(fid2);
clear all
clc
load dados.txt
rq=sqrt(dados);
tab1=[dados;rq];
q=dados.^2;
tab2=[dados;q];
fid1=fopen('raiz_quad.txt','w');
fid2=fopen('quad.txt','w');
fclose(fid1);
fclose(fid2);
Introdução à Programação 68
x = xlsread('raio');
area = pi*x.^2;
6. FUNÇÕES
Todas as seguintes linhas de comentários devem suceder a linha H1. Estas linhas
de comentários são mostradas conjuntamente com a linha H1, quando o utilizador
digita help nome_da_função. Por exemplo,
>>
A variável que se quer utilizar como global tem de ser declarada como global em
todas as funções e em todas as partes do Matlab em que o utilizador quiser que ela
seja reconhecida como tal. Desse modo, a variável torna-se comum a essas funções.
O comando global deve ser digitado na janela Command Window e/ou dentro do
programa para para que a variável seja reconhecida na área de trabalho.
Nas funções, o comando global deve aparecer antes da variável ser utilizada; é
recomendado utilizar esse comando após as linhas de ajuda (H1 e de comentário).
Para se diferenciarem das variáveis locais, recomenda-se utilizar nomes extensos e
letras maiúsculas para as variáveis globais como se fez no exemplo anterior.
6.3 EXEMPLOS
2
( x 3 5 x )
Considere-se a função y = f(x) = . Pretende-se calcular o valor da
2 x 25
função para vários valores de x.
No editor define-se a seguinte função exemplo_6_3_1:
function y = exemplo_6_3_1(x)
y=(sqrt(x^3+5*x)^2)/(2*x+25)
>> exemplo_6_3_1(6)
ans =
6.6486
>> exemplo_6_3_1(-1)
ans =
-0.2609
>> y = exemplo_6_3_1(6)
y=
6.6486
>> y = exemplo_6_3_1(-1)
y=
-0.2609
>> z = exemplo_6_3_1(-1)
z=
-0.2609
Introdução à Programação 75
>> x=6
x=
6
>> y=(sqrt(x.^3+5*x).^2)./(2*x+25)
y=
6.6486
>>
No caso do argumento da função (x) ser um vector (por exemplo [6 -1] ), ou seja
quando pretendo trabalhar simultaneamente com vários valores de x, tem que se
considerar as operações elemento a elemento do vector. Neste caso, obtém-se a
função exemplo_6_3_2 com as seguintes alterações no código da função:
function y = exemplo_6_3_2(x)
y = (sqrt(x.^3+5*x).^2)./(2*x+25);
>> x = [6 -1]
x=
6 -1
>> y = exemplo_6_3_2(x)
y=
6.6486 -0.2609
>>
function y = hipotenusa(lado1,lado2)
% hipotenusa calcula a hipotenusa de um triangulo dando os dois lados rectos
y = sqrt(lado1.^2+lado2.^2);
Introdução à Programação 76
>> hipotenusa(3,4)
ans =
5
>> hipotenusa(5,6)
ans =
7.8102
>> lado1=[3 5]
lado1 =
3 5
>> lado2=[4 6]
lado2 =
4 6
>> hipotenusa(lado1,lado2)
ans =
5.0000 7.8102
>>
Introdução à Programação 77
>> f=inline('x^2-5*x+12')
f=
Inline function:
f(x) = x^2-5*x+12
>>
De notar que:
• A expressão matemática pode ter uma ou mais variáveis independentes.
• Quaiquer letras, excepto i e j, podem ser designadas variáveis independentes
na expressão.
• A expressão matemática pode ter funções nativas ou personalizadas.
• As expressões não podem conter variáveis previamente inicializadas.
• Uma vez definida uma função inline é possível chamá-la pelo nome,
atribuindo-lhe valor(es) ao(s) argumento(s).
• Uma função inline pode ser utilizada como argumento de outras funções.
O comando inline para funções com duas ou mais variáveis independentes pode
ser escrito utilizando-se a mesma sintaxe, como se ilustra no exemplo seguinte:
>> t=inline('x^2-5*x+12+z^4')
t=
Inline function:
t(x,z) = x^2-5*x+12+z^4
>>
Para este caso, ou seja para funções com duas ou mais variáveis independentes
pode-se utilizar a sintaxe referida, ou então a seguinte sintaxe:
Nome_função = inline ('expressão matemática', 'arg1', 'arg2', 'arg3')
A função t seria então definida do seguinte modo:
Introdução à Programação 78
>> t(2,3)
ans =
87
>>
7. GRÁFICOS
>> x = [1 3 5 7 9]
x=
1 3 5 7 9
Introdução à Programação 79
>> y = x.^2-10
y=
-9 -1 15 39 71
>> plot(x,y)
A função plot é a principal função utilizada para criar gráficos 2D. A sua
sintaxe mais simples é:
plot (x, y)
Os seus argumentos x e y devem ser vectores e devem ter o mesmo tamanho.
Como se vê na Figura 7.1, o comando plot produz uma única curva, estando os
valores de x dispostos na abcissa (eixo horizontal) e os valores de y na ordenada (eixo
vertical). A curva é construída a partir de segmentos de recta que ligam os pontos
cujas coordenadas são definidas pelos elementos dos vectores x e y. O primeiro vector
digitado no argumento da função é usado como eixo horizontal e, o segundo, como
eixo vertical.
A cor padrão do gráfico é o azul que, logicamente, pode ser alterada.
É possível controlar alguns aspectos da representação gráfica adicionando outros
argumentos ao comando plot para permitir definir a cor, o estilo de linha, a cor e o
estilo dos marcadores. Neste caso, a sintaxe do comando é:
plot (x, y, ‘Especificadores de linha’, ‘Propriedade’, Valor_da_propriedade)
em que:
x e y são vectores
Especificadores de linha – Opcional, especifica o tipo e a cor da linha e os
tipos de marcadores;
Propriedade e Valor_da_Propriedade - Opcionais, definem as
propriedades adicionais usadas para definir a espessura da linha, o tamanho
do marcador e da borda e a cor do preenchimento.
. Especificadores de linha:
Este campo é opcional e pode ser utilizado para definir o estilo, a cor e o tipo de
marcadores das linhas.
Os especificadores para estilos de linhas são:
. Propriedades:
As propriedades também são opcionais e podem ser utilizadas na especificação da
espessura da linha, do tamanho e das cores dos marcadores das linhas e para
preenchimento. As propriedades são digitadas entre plicas, são separadas por vírgula e
seguidas do valor da propriedade. De seguida mostram-se valores das propriedades:
Propriedade Descrição
linewidth Especifica a espessura da linha em número de pontos.
Por defeito toma o valor 0.5.
markersize Especifica o tamanho do marcador em número de pontos.
markeredgecol Especifica a cor do marcador ou a cor da borda da linha
or que limita o marcador. A cor é digitada entre plicas.
markeredgecol Especifica a cor de preenchimento dos marcadores. A cor
or é digitada entre plicas.
Um exemplo:
>> fplot('sind(2*x)/(2*x)',[-1080,1080])
-3
x 10
20
15
10
-5
-1000 -500 0 500 1000
De referir que este gráfico foi copiado da Janela Gráfica por meio da opção Copy
Figure do menu Edit.
Introdução à Programação 84
7.3 FORMATAÇÃO
>> fplot('sind(2*x)/(2*x)',[-1080,1080])
>> grid on
Introdução à Programação 85
-3
x 10
20
15
10
-5
-1000 -800 -600 -400 -200 0 200 400 600 800 1000
7.3.3 Texto
title (‘texto’)
Comando xlabel
Serve para rotular (atribuir um nome) o eixo dos XX.
A sintaxe deste comando é:
xlabel (‘texto’)
Comando legend
Serve para criar uma legenda para o(s) gráfico(s). No caso de vários
gráficos, os textos a serem colocados na legenda, devem entrar na ordem em
que os gráficos são criados, por forma a legendá-los correctamente.
A sintaxe deste comando é:
legend (’texto (1)’, ’texto (2)’,’…’ ,’texto (n)’)
Por defeito coloca-a no canto superior direito.
>> fplot('x^2+6',[0,6])
>> grid on
>> gtext('Localização à escolha')
>> text(4,15,'Texto no ponto 4,15')
>> xlabel('Eixo dos XX')
>> ylabel('Eixo dos YY')
>> title('Gráfico de x^2+6')
>> legend('x^2+6')
Introdução à Programação 87
Gráfico de x 2+6
45
x 2+6
40
Localização à escolha
35
30
Eixo dos YY
25
20
10
5
0 1 2 3 4 5 6
Eixo dos XX
100
80
60
40
20
-20
-40
-2 -1 0 1 2 3 4
>> x=[-3:0.01:5];
>> y=2*x.^3+2*x.^2-6*x+3;
>> prim_deriv=6*x.^2+4*x-6;
>> seg_deriv=12*x;
>> plot(x,y,'-b',x,prim_deriv,'--r',x,seg_deriv,':k')
Este conjunto de comandos traça numa mesma figura três gráficos da seguinte
forma:
• Começa por declarar o vector x que contém o domínio da função (define
pontos entre -3 e 5 espaçados por 0,01;
• Declara o vector y que contém os valores da função 2x3+2x2-6x+3 (contra-
domínio);
• Declara o vector prim_deriv que contém os valores da 1ª derivada;
• Declara o vector seg_deriv que contém os valores da 2ª derivada;
• Cria 3 gráficos na mesma figura: y versus x em linha contínua azul,
prim_deriv versus x em linha a tracejado vermelho e seg_deriv versus x a
traço pontilhado preto.
De seguida mostra-se a figura gerada por este conjunto de comandos.
Introdução à Programação 89
300
250
200
150
100
50
-50
-3 -2 -1 0 1 2 3 4 5