summaryrefslogtreecommitdiffhomepage
path: root/pt-br/matlab-pt.html.markdown
blob: 7da4aea4da8cf0e2bf56e6372c45ea4fe2139146 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
---
language: MATLAB
contributors:
    - ["mendozao", "http://github.com/mendozao"]
    - ["jamesscottbrown", "http://jamesscottbrown.com"]
    - ["Colton Kohnke", "http://github.com/voltnor"]
translators:
    - ["Claudson Martins", "https://github.com/claudsonm"]
lang: pt-br
filename: learnmatlab-pt.mat
---

MATLAB significa MATrix LABoratory. É uma poderosa linguagem de computação numérica geralmente utilizada em engenharia e matemática.

```matlab
% Comentários iniciam com um sinal de porcentagem

%{
Comentários de múltiplas linhas
parecem
com
algo assim
%}

% Comandos podem ocupar várinhas linhas, usando '...':
 a = 1 + 2 + ...
 + 4

% Comandos podem ser passados para o sistema operacional
!ping google.com

who % Exibe todas as variáveis na memória
whos % Exibe todas as variáveis na memória, com seus tipos
clear % Apaga todas as suas variáveis da memória
clear('A') % Apaga uma variável em particular
openvar('A') % Abre a variável no editor de variável

clc % Apaga o conteúdo escrito na sua janela de comando
diary % Alterna o conteúdo escrito na janela de comando para um arquivo de texto
ctrl-c % Aborta a computação atual

edit('minhafuncao.m') % Abre a função/script no editor
type('minhafuncao.m') % Imprime o código-fonte da função/script na janela de comando

profile on    % Ativa o perfil de código
profile off 	% Desativa o perfil de código
profile viewer 	% Visualiza os resultados na janela de Profiler

help comando 	% Exibe a documentação do comando na janela de comando
doc comando 	% Exibe a documentação do comando na janela de ajuda
lookfor comando % Procura por comando na primeira linha comentada de todas as funções
lookfor comando -all % Procura por comando em todas as funções


% Formatação de saída
format short 	% 4 casas decimais em um número flutuante
format long 	% 15 casas decimais
format bank 	% 2 dígitos após o ponto decimal - para cálculos financeiros
fprintf('texto') % Imprime na tela "texto"
disp('texto') 	% Imprime na tela "texto"

% Variáveis & Expressões
minhaVariavel = 4  % O painel Workspace mostra a variável recém-criada
minhaVariavel = 4; % Ponto e vírgula suprime a saída para a janela de comando
4 + 6  		% Resposta = 10
8 * minhaVariavel 	% Resposta = 32
2 ^ 3 		% Resposta = 8
a = 2; b = 3;
c = exp(a)*sin(pi/2) % c = 7.3891

% A chamada de funções pode ser feita por uma das duas maneiras:
% Sintaxe de função padrão:
load('arquivo.mat', 'y') % Argumentos entre parênteses, separados por vírgula
% Sintaxe de comando:
load arquivo.mat y 	% Sem parênteses, e espaços ao invés de vírgulas
% Observe a falta de aspas na forma de comando: entradas são sempre passadas
% como texto literal - não pode passar valores de variáveis.
% Além disso, não pode receber saída:
[V,D] = eig(A);  % Isto não tem um equivalente na forma de comando
[~,D] = eig(A);  % Se você só deseja D e não V



% Operadores Lógicos e Relacionais
1 > 5 % Resposta = 0
10 >= 10 % Resposta = 1
3 ~= 4 % Diferente de -> Resposta = 1
3 == 3 % Igual a -> Resposta = 1
3 > 1 && 4 > 1 % E -> Resposta = 1
3 > 1 || 4 > 1 % OU -> Resposta = 1
~1 % NOT -> Resposta = 0

% Operadores Lógicos e Relacionais podem ser aplicados a matrizes
A > 5
% Para cada elemento, caso seja verdade, esse elemento será 1 na matriz retornada
A( A > 5 )
% Retorna um vetor com os elementos de A para os quais a condição é verdadeira

% Cadeias de caracteres (Strings)
a = 'MinhaString'
length(a) % Resposta = 11
a(2) % Resposta = i
[a,a] % Resposta = MinhaStringMinhaString


% Vetores de células
a = {'um', 'dois', 'três'}
a(1) % Resposta = 'um' - retorna uma célula
char(a(1)) % Resposta = um - retorna uma string

% Estruturas
A.b = {'um','dois'};
A.c = [1 2];
A.d.e = false;

% Vetores
x = [4 32 53 7 1]
x(2) % Resposta = 32, índices no MATLAB começam por 1, não 0
x(2:3) % Resposta = 32 53
x(2:end) % Resposta = 32 53 7 1

x = [4; 32; 53; 7; 1] % Vetor coluna

x = [1:10] % x = 1 2 3 4 5 6 7 8 9 10

% Matrizes
A = [1 2 3; 4 5 6; 7 8 9]
% Linhas são separadas por um ponto e vírgula;
% Elementos são separados com espaço ou vírgula
% A =

%     1     2     3
%     4     5     6
%     7     8     9

A(2,3) % Resposta = 6, A(linha, coluna)
A(6) % Resposta = 8
% (implicitamente encadeia as colunas do vetor, e então as indexa)


A(2,3) = 42 % Atualiza a linha 2 coluna 3 com o valor 42
% A =

%     1     2     3
%     4     5     42
%     7     8     9

A(2:3,2:3) % Cria uma nova matriz a partir da antiga
%Resposta =

%     5     42
%     8     9

A(:,1) % Todas as linhas na coluna 1
%Resposta =

%     1
%     4
%     7

A(1,:) % Todas as colunas na linha 1
%Resposta =

%     1     2     3

[A ; A] % Concatenação de matrizes (verticalmente)
%Resposta =

%     1     2     3
%     4     5    42
%     7     8     9
%     1     2     3
%     4     5    42
%     7     8     9

% Isto é o mesmo de
vertcat(A,A);


[A , A] % Concatenação de matrizes (horizontalmente)

%Resposta =

%     1     2     3     1     2     3
%     4     5    42     4     5    42
%     7     8     9     7     8     9

% Isto é o mesmo de
horzcat(A,A);


A(:, [3 1 2]) % Reorganiza as colunas da matriz original
%Resposta =

%     3     1     2
%    42     4     5
%     9     7     8

size(A) % Resposta = 3 3

A(1, :) =[] % Remove a primeira linha da matriz
A(:, 1) =[] % Remove a primeira coluna da matriz

transpose(A) % Transposta a matriz, que é o mesmo de: A.'
ctranspose(A) % Transposta a matriz
% (a transposta, seguida pelo conjugado complexo de cada elemento)




% Aritmética Elemento por Elemento vs. Aritmética com Matriz
% Naturalmente, os operadores aritméticos agem em matrizes inteiras. Quando
% precedidos por um ponto, eles atuam em cada elemento. Por exemplo:
A * B % Multiplicação de matrizes
A .* B % Multiplica cada elemento em A por seu correspondente em B

% Existem vários pares de funções nas quais uma atua sob cada elemento, e a
% outra (cujo nome termina com m) age na matriz por completo.
exp(A) % Exponencia cada elemento
expm(A) % Calcula o exponencial da matriz
sqrt(A) % Tira a raiz quadrada de cada elemento
sqrtm(A) %  Procura a matriz cujo quadrado é A


% Gráficos
x = 0:.10:2*pi; % Vetor que começa em 0 e termina em 2*pi com incrementos de 0,1
y = sin(x);
plot(x,y)
xlabel('eixo x')
ylabel('eixo y')
title('Gráfico de y = sin(x)')
axis([0 2*pi -1 1]) % x vai de 0 a 2*pi, y vai de -1 a 1

plot(x,y1,'-',x,y2,'--',x,y3,':') % Para várias funções em um só gráfico
legend('Descrição linha 1', 'Descrição linha 2') % Curvas com uma legenda

% Método alternativo para traçar várias funções em um só gráfico:
% Enquanto 'hold' estiver ativo, os comandos serão adicionados ao gráfico
% existente ao invés de o substituirem.
plot(x, y)
hold on
plot(x, z)
hold off

loglog(x, y) % Plotar em escala loglog
semilogx(x, y) % Um gráfico com eixo x logarítmico
semilogy(x, y) % Um gráfico com eixo y logarítmico

fplot (@(x) x^2, [2,5]) % Plotar a função x^2 para x=2 até x=5

grid on % Exibe as linhas de grade; Oculta com 'grid off'
axis square % Torna quadrada a região dos eixos atuais
axis equal % Taxa de proporção onde as unidades serão as mesmas em todas direções

scatter(x, y); % Gráfico de dispersão ou bolha
hist(x); % Histograma

z = sin(x);
plot3(x,y,z); % Plotar em espaço em 3D

pcolor(A) % Mapa de calor da matriz: traça uma grade de retângulos, coloridos pelo valor
contour(A) % Plotar de contorno da matriz
mesh(A) % Plotar malha 3D

h = figure	% Cria uma nova figura objeto, com identificador h
figure(h) % Cria uma nova janela de figura com h
close(h) % Fecha a figura h
close all % Fecha todas as janelas de figuras abertas
close % Fecha a janela de figura atual

shg % Traz uma janela gráfica existente para frente, ou cria uma nova se necessário
clf clear % Limpa a janela de figura atual e redefine a maioria das propriedades da figura

% Propriedades podem ser definidas e alteradas através de um identificador.
% Você pode salvar um identificador para uma figura ao criá-la.
% A função gcf retorna o identificador da figura atual
h = plot(x, y); % Você pode salvar um identificador para a figura ao criá-la
set(h, 'Color', 'r')
% 'y' amarelo; 'm' magenta, 'c' ciano, 'r' vermelho, 'g' verde, 'b' azul, 'w' branco, 'k' preto
set(h, 'LineStyle', '--')
 % '--' linha sólida, '---' tracejada, ':' pontilhada, '-.' traço-ponto, 'none' sem linha
get(h, 'LineStyle')


% A função gca retorna o identificador para os eixos da figura atual
set(gca, 'XDir', 'reverse'); % Inverte a direção do eixo x

% Para criar uma figura que contém vários gráficos use subplot, o qual divide
% a janela de gráficos em m linhas e n colunas.
subplot(2,3,1); % Seleciona a primeira posição em uma grade de 2-por-3
plot(x1); title('Primeiro Plot') % Plota algo nesta posição
subplot(2,3,2); % Seleciona a segunda posição na grade
plot(x2); title('Segundo Plot') % Plota algo ali


% Para usar funções ou scripts, eles devem estar no caminho ou na pasta atual
path % Exibe o caminho atual
addpath /caminho/para/pasta % Adiciona o diretório ao caminho
rmpath /caminho/para/pasta % Remove o diretório do caminho
cd /caminho/para/mudar % Muda o diretório


% Variáveis podem ser salvas em arquivos *.mat
save('meuArquivo.mat') % Salva as variáveis do seu Workspace
load('meuArquivo.mat') % Carrega as variáveis em seu Workspace

% Arquivos M (M-files)
% Um arquivo de script é um arquivo externo contendo uma sequência de instruções.
% Eles evitam que você digite os mesmos códigos repetidamente na janela de comandos.
% Possuem a extensão *.m

% Arquivos M de Funções (M-file Functions)
% Assim como scripts e têm a mesma extensão *.m
% Mas podem aceitar argumentos de entrada e retornar uma saída.
% Além disso, possuem seu próprio workspace (ex. diferente escopo de variáveis).
% O nome da função deve coincidir com o nome do arquivo (salve o exemplo como dobra_entrada.m)
% 'help dobra_entrada.m' retorna os comentários abaixo da linha de início da função
function output = dobra_entrada(x)
	%dobra_entrada(x) retorna duas vezes o valor de x
	output = 2*x;
end
dobra_entrada(6) % Resposta = 12


% Você também pode ter subfunções e funções aninhadas.
% Subfunções estão no mesmo arquivo da função primária, e só podem ser chamados
% por funções dentro do arquivo. Funções aninhadas são definidas dentro de
% outras funções, e têm acesso a ambos workspaces.

% Se você quer criar uma função sem criar um novo arquivo, você pode usar uma
% função anônima. Úteis para definir rapidamente uma função para passar a outra
% função (ex. plotar com fplot, avaliar uma integral indefinida com quad,
% procurar raízes com fzero, ou procurar mínimo com fminsearch).
% Exemplo que retorna o quadrado de sua entrada, atribuído ao identificador sqr:
sqr = @(x) x.^2;
sqr(10) % Resposta = 100
doc function_handle % Saiba mais

% Entrada do usuário
a = input('Digite o valor: ')

% Para a execução do arquivo e passa o controle para o teclado: o usuário pode
% examinar ou alterar variáveis. Digite 'return' para continuar a execução, ou 'dbquit' para sair
keyboard

% Leitura de dados (ou xlsread/importdata/imread para arquivos excel/CSV/imagem)
fopen(nomedoarquivo)

% Saída
disp(a) % Imprime o valor da variável a
disp('Olá Mundo') % Imprime a string
fprintf % Imprime na janela de comandos com mais controle

% Estruturas Condicionais (os parênteses são opcionais, porém uma boa prática)
if (a > 15)
	disp('Maior que 15')
elseif (a == 23)
	disp('a é 23')
else
	disp('Nenhuma condição reconheceu')
end

% Estruturas de Repetição
% Nota: fazer o loop sobre elementos de um vetor/matriz é lento!
% Sempre que possível, use funções que atuem em todo o vetor/matriz de uma só vez.
for k = 1:5
	disp(k)
end

k = 0;
while (k < 5)
	k = k + 1;
end

% Tempo de Execução de Código (Timing Code Execution): 'toc' imprime o tempo
% passado desde que 'tic' foi chamado.
tic
A = rand(1000);
A*A*A*A*A*A*A;
toc

% Conectando a uma base de dados MySQL
dbname = 'nome_base_de_dados';
username = 'root';
password = 'root';
driver = 'com.mysql.jdbc.Driver';
dburl = ['jdbc:mysql://localhost:8889/' dbname];
%Abaixo, o xx depende da versão, download disponível em http://dev.mysql.com/downloads/connector/j/
javaclasspath('mysql-connector-java-5.1.xx-bin.jar');
conn = database(dbname, username, password, driver, dburl);
sql = ['SELECT * FROM nome_tabela WHERE id = 22'] % Exemplo de uma consulta SQL
a = fetch(conn, sql) %a will contain your data


% Funções Matemáticas Comuns
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
exp(x)
sqrt(x)
log(x)
log10(x)
abs(x)
min(x)
max(x)
ceil(x)
floor(x)
round(x)
rem(x)
rand % Números pseudo-aleatórios uniformemente distribuídos
randi % Inteiros pseudo-aleatórios uniformemente distribuídos
randn % Números pseudo-aleatórios normalmente distribuídos

% Constantes Comuns
pi
NaN
inf

% Resolvendo equações matriciais (se não houver solução, retorna uma solução de mínimos quadrados)
% Os operadores \ e / são equivalentes às funções mldivide e mrdivide
x=A\b % Resolve Ax=b. Mais rápido e numericamente mais preciso do que inv(A)*b.
x=b/A % Resolve xA=b

inv(A) % Calcula a matriz inversa
pinv(A) % Calcula a pseudo-inversa

% Funções Matriciais Comuns
zeros(m,n) % Matriz de zeros m x n
ones(m,n) % Matriz de 1's m x n
diag(A) % Extrai os elementos diagonais da matriz A
diag(x) % Constrói uma matriz com os elementos diagonais listados em x, e zero nas outras posições
eye(m,n) % Matriz identidade
linspace(x1, x2, n) % Retorna n pontos igualmente espaçados, com min x1 e max x2
inv(A) % Inverso da matriz A
det(A) % Determinante da matriz A
eig(A) % Valores e vetores próprios de A
trace(A) % Traço da matriz - equivalente a sum(diag(A))
isempty(A) % Testa se a matriz está vazia
all(A) % Testa se todos os elementos são diferentes de zero ou verdadeiro
any(A) % Testa se algum elemento é diferente de zero ou verdadeiro
isequal(A, B) % Testa a igualdade de duas matrizes
numel(A) % Número de elementos na matriz
triu(x) % Retorna a parte triangular superior de x
tril(x) % Retorna a parte triangular inferior de x
cross(A,B) %  Retorna o produto cruzado das matrizes A e B
dot(A,B) % Retorna o produto escalar de duas matrizes (devem possuir mesmo tamanho)
transpose(A) % Retorna a matriz transposta de A
fliplr(A) % Inverte a matriz da esquerda para a direita
flipud(A) % Inverte a matriz de cima para baixo

% Fatorações de Matrizes
% Decomposição LU: PA = LU,L é triangular inferior, U é triangular superior, P é a matriz de permutação
[L, U, P] = lu(A)
% Decomposição em Autovalores: AP = PD, colunas de P são autovetores e as diagonais de D são autovalores
[P, D] = eig(A)
% SVD: XV = US, U e V são matrizes unitárias, S possui elementos não negativos na diagonal em ordem decrescente
[U,S,V] = svd(X)

% Funções Vetoriais Comuns
max     % Maior componente
min     % Menor componente
length  % Tamanho do vetor
sort    % Ordena em orcer ascendente
sum     % Soma de elementos
prod    % Produto de elementos
mode	% Valor modal
median  % Valor mediano
mean    % Valor médio
std     % Desvio padrão
perms(x) % Lista todas as permutações de elementos de x


% Classes
% MATLAB pode suportar programação orientada a objetos.
% Classes devem ser colocadas em um arquivo de mesmo nome com a extensão *.m
% Para começar, criamos uma simples classe que armazena posições de GPS
% Início ClassePosicoesGPS.m
classdef ClassePosicoesGPS % O nome da classe.
  properties % As propriedades da classe comportam-se como estruturas
    latitude
    longitude
  end
  methods
    % Este método que tem o mesmo nome da classe é o construtor.
    function obj = ClassePosicoesGPS(lat, lon)
      obj.latitude = lat;
      obj.longitude = lon;
    end

    % Outras funções que usam os objetos de PosicoesGPS
    function r = multiplicarLatPor(obj, n)
      r = n*[obj.latitude];
    end

    % Se quisermos somar dois objetos de PosicoesGPS juntos sem chamar
    % uma função especial nós podemos sobrepor a aritmética do MATLAB, desta maneira:
    function r = plus(o1,o2)
      r = ClassePosicoesGPS([o1.latitude] +[o2.latitude], ...
                        [o1.longitude]+[o2.longitude]);
    end
  end
end
% End ClassePosicoesGPS.m

% Podemos criar um objeto da classe usando o construtor
a = ClassePosicoesGPS(45.0, 45.0)

% Propriedades da classe se comportam exatamente como estruturas MATLAB
a.latitude = 70.0
a.longitude = 25.0

% Métodos podem ser chamados da mesma forma que funções
ans = multiplicarLatPor(a,3)

% O método também pode ser chamado usando a notação de ponto. Neste caso,
% o objeto não precisa ser passado para o método.
ans = a.multiplicarLatPor(a,1/3)

% Funções do MATLAB podem ser sobrepostas para lidar com objetos.
% No método abaixo, nós sobrepomos a forma como o MATLAB lida com a soma de
% dois objetos PosicoesGPS.
b = ClassePosicoesGPS(15.0, 32.0)
c = a + b
```

## Mais sobre MATLAB

* O site oficial [http://http://www.mathworks.com/products/matlab/](http://www.mathworks.com/products/matlab/)
* O fórum oficial de respostas: [http://www.mathworks.com/matlabcentral/answers/](http://www.mathworks.com/matlabcentral/answers/)