Olá agora vou começar a passar algumas firulas interessantes de se usar para otimização e comparação de códigos no matlab.
Tive que fazer um seminário na pós e tinha que provar que um algoritmo rodando o método de passo simples de Runge Kutta que resolve equações diferenciais ordinárias era mais demorado que um outro que roda o método multipasso de Adams Bashforth.
Aí lembrei da contagem de tempo do matlab o tic toc.
Funciona assim, você escolhe um lugar do código onde você começa a contar o tempo, pula uma linha e escreve tic, depois aonde você quer terminar você coloca o toc, e pronto o matlab vai te dizer quantos milissegundos demorou para passar naquele pedaço aí vai o código do Runge Kutta como exemplo:
%%%
function [t,w] = rk4(a,b,alfa,n)
h= (b-a)/n;
h24=h/24;
w=zeros(1,n+1);
w(1)= alfa;
%f=@(t,y) y-t*t+1;
%EDO mudar aqui
f=@(t,y) -1.2*y+7*exp(-0.3*t);
m=min(3,n);
t = a:h:b;
tic
for i =1:n
%Runge Kutta ordem 4
k(i) = f(t(i), w(i));
k2 = f(t(i) + h / 2, w(i) + k(i) * h /2);
k3 = f(t(i) + h / 2, w(i) + k2 * h /2);
k4 = f(t(i+1), w(i) + k3 * h);
w(i+1) = w(i) + (k(i) + k2+k2 + k3+k3 + k4) * h / 6;
end
toc
plot(t,w(1,:));
%%
E sae quando você tem um monte de informações em uma tabela ou matriz (que matematicamente é a mesma coisa) e você quer saber o valor do maior elemento ou aonde este elemento aparece (conhecido com index), você usa a função max.
exemplo:
Tenho a matriz A com os números 1 5 6 8 4 nesta ordem, e quero saber qual o maior número e gravar este número na variável 'x', então eu escrevo:
A = [1 5 6 8 4 ];
x = max(A);
A variável 'x' neste caso vai conter o valor 8, agora eu também quero saber aonde este valor se encontra na sequência destes 5 números e guardar este índice na variável 'b', o programa ficaria assim:
A = [1 5 6 8 4 ];
[x, b] = max(A);
A variável 'x' continua contendo o valor 8 enquanto que a variável 'b' armazenou o ídice em que este 8 aparece que é 4 ou seja o quarto número.
Agora eu estou fazendo uma aplicação crítica e não quero acumular variáveis 'lixo' com valores que eu nunca vou usar e vou ter que limpar depois, por exemplo preciso saber aonde o número 8 aparece mas nunca vou usar o valor diretamente, então eu uso um truque. Toda função no matlab que retorna mais de um valor e eu não quero gastar memória com estes valores eu passo para uma variável temporária clear que é o símbolo ; (ponto e vírgula), exemplo não vou usar o x e ó o b então o programa fica:
A = [1 5 6 8 4 ];
[;, b] = max(A);
A variável 'b' cntém o índice e o sistema ignora o número.
Outra coisa interessante, no matlab eu posso declarar uma variável e deixar ela vazia sem ocupar espaço em memória, neste caso eu uso [] como neste exemplo:
A = [];
Neste caso a variável 'A' existe no matlab mas está vazia e não contém valor algum, ou seja é um jeito de iniciar variáveis sem gastar memória e apagar da memória valores dentro desta variável.
exemplo:
% Este é o símbolo de comentários no matlab
%Vou passar um conjunto e valores para a variável A
A = [ 2 4 5 6 7 8];
%Agora quero que o valor 6 suma, lembre que ele está no índice 4
A(4) = [];
%Agora que ele sumiu a variável 'A' contem os valores [ 2 4 5 7 8]
%Agora vou apagar TODOS os valores da variável 'A'
A = [];
A variável 'A' agora é vazia, ela existe mas não ocupa espaço em memória.
Por hoje é isso, até a próxima!