% Historico de comandos da primeira aula

%% comandos gerais - atribuição de variáveis e operações básicas
a = 10
b = 2;
c = [ 1 2 3 ]
d = [ 1; 2; 3 ]

E = 1:2:10
E.'
E'

a * b
a * c

% exemplos de operações matriciais com incompatibilidade de dimensões
c = [ 1 2 3 ]
E = 1:2:10
c * E
c * c

% exemplo de multiplicação elemento a elemento
c = [ 1 2 3 ]
c .* c

% para limpar a tela
home
% para limpar o conteúdo da memória
clear

%% exemplos de funções de criação de matrizes
a = ones( 3 )
a = ones( 3, 1 )
a = ones( 1, 3 )
a = ones( [2 3] )
a = ones( [1 3 2] )
a = ones( [2 3] )

% ajuda de algumas funções úteis para a geração de matrizes de números
help ones
help zeros
help eye
help rand
help randn
help nan

% sobre a ordem dos elementos em uma matriz
a = [ 1 3 5; 2 4 6 ]
b = [ 1 2 3; 4 5 6 ]
b = [ 1 2; 3 4; 5 6 ]
b = [ 1 2; 3 4; 5 6 ].'
c = [ [1; 2] [3; 4] [5; 6] ]

% exemplos envolvendo números complexos
c = [ [1; 2] [3; 4] [5; 6] ]
whos
1i
c = c*1i
whos

b = [ 1 2; 3 4; 5 6 ].'
b(3)
b(3) = 1i
whos

% exemplos do redimensionamento automático de variáveis
clear
home
a(5,3) = 1

%% um pouco sobre o tamanho de variáveis
home
clear
a(5,3) = 1
whos
size( a )
b = size( a )
length( a )
max( b )

% ajuda de algumas funções sobre o tamanho de variáveis
help size
help length

%% sobre a ordenação de elementos de uma matriz
a = [ 1 3 5; 2 4 6 ]
help sort
sort( a )
sort( a,1,'descend' )
sort( a,2,'descend' )

%% Exemplo de um programa Matlab: "medir o pi" usando o método de Monte Carlo
home
clear
edit piexp

% conteúdo do script piexp.m
%---------------------
clear
N = 100;
n = 0;
for i = 1 : N
x1 = rand;
x2 = rand;
if ( x1^2 + x2^2 )<=1
n = n + 1;
end
end
PIexp = 4 * n / N
%---------------------

% para executar o script piexp.m:
piexp

% Valores de pi para N=1e4 pontos obtidos por cada um dos alunos
PIs = [ 3.1184 3.1484 3.1084 3.1415 3.1436 3.1256 3.1400 ...
3.1356 3.1592 3.1336 3.1620 3.1392 3.1416 3.1408 3.1472 3.1800 3.1636 ];
mean( PIs )
std( PIs )
std( PIs ) / sqrt( length(PIs) )

% ajuda de algumas funções úteis para caracterização de matrizes de números
help max
help min
help mean
help median
help std

%% TÓPICO AVANÇADO: determinar a incerteza desse método em uma única linha

% 1 - construindo a lógica do método:
home
N = 5
% gerar uma matriz com N pares de coordenadas (N pontos) e elevar cada
% valor ao quadrado
rand(2,N).^2
% para saber o quadrado da distância de cada um dos N pontos até a origem
sum( rand(2,N).^2, 1 )
% para saber se cada ponto está dentro (1) ou fora (0) do círculo de
% raio unitário
sum( rand(2,N).^2, 1 )<=1
% para a fração dos pontos que estão dentro do círculo de raio unitário
mean( sum( rand(2,N).^2, 1 )<=1 )
% para estimar o pi experimental com N pontos em uma única linha:
4*mean( sum( rand(2,N).^2, 1 )<=1 )

% 2 - usando a idéia para estimar o pi experimental com N=10.000 pontos:
N=1e4
4*mean( sum( rand(2,N).^2, 1 )<=1 )
% para repetir esse procedimento 500 vezes e determinar a dispersão dos
% valores de pi obtidos
std( 4*mean( sum( rand(2,N,500).^2, 1 )<=1 ) )

%% Um pouco sobre gráficos:

% exemplo em que o plot nao funciona (a variavel PIs2 tem dimensão 1x1x500)
PIs2 = ( 4*mean( sum( rand(2,N,5e2).^2, 1 )<=1 ) );
whos PIs2
plot( PIs2, '*' )

% Para refazer a variável PIs2 colocando os 500 valores em um vetor linha
clear PIs2
PIs2(:,1) = ( 4*mean( sum( rand(2,N,5e2).^2, 1 )<=1 ) );
whos
figure, plot( PIs2, '*r' )

% para separar os dados de acordo com o valor
help find
ind_plus = find( PIs2>pi );
ind_menos = find( PIs2<pi );
% para plotar apenas os valores de PIs2 maiores do que pi
figure, plot( PIs2(ind_plus), 'xr' )
% para plotar os valores de PIs2 maiores e menors que pi em cores diferentes
figure, plot( PIs2(ind_plus), 'xr' ), hold on, plot( PIs2(ind_menos), 'xb' )


% para plotar os valores de PIs2 maiores e menors que pi em cores
% diferentes e respeitando a ordem em que os pontos aparecem no vetor PIs2:
figure, plot( ind_plus, PIs2(ind_plus), 'xr' ), hold on, plot( ind_menos, PIs2(ind_menos), 'xb' )
% outra possibilidade
figure, plot( ind_plus, PIs2(ind_plus), 'xr', ind_menos, PIs2(ind_menos), 'xb' )
