MATLAB
Descrição
De acordo com a Documentação do MATLAB, MATLAB é um ambiente de computação numérica e linguagem de programação desenvolvido pela MathWorks. Permite análise de dados, desenvolvimento de algoritmos, criação de modelos e aplicações em diversas áreas da engenharia e ciências.
Versões Disponíveis
matlab/R2016b-9.1
matlab/R2019b (default)
Submissão de Jobs Seriais
submit_matlab_serial.sh
#!/bin/bash
#SBATCH -J matlab_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=8G
export INPUT="script.m"
export OUTPUT="output.log"
module load matlab/R2019b
job-nanny matlab -batch "script"
Submissão de Jobs com Arquivo .m
submit_matlab_file.sh
#!/bin/bash
#SBATCH -J matlab_file
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 04:00:00
#SBATCH --mem=16G
export INPUT="simulacao.m dados.mat"
export OUTPUT="resultados/"
module load matlab/R2019b
job-nanny matlab -nodisplay -nosplash -r "simulacao; exit" > simulacao.log
Submissão de Jobs com Paralelismo (Parallel Computing Toolbox)
submit_matlab_parallel.sh
#!/bin/bash
#SBATCH -J matlab_parallel
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 12:00:00
#SBATCH --mem=32G
export INPUT="parallel_script.m"
export OUTPUT="parallel_output/"
module load matlab/R2019b
# Criar script com configuração paralela
cat > run_parallel.m << EOF
% Iniciar pool de workers
pool = parpool('local', $SLURM_CPUS_PER_TASK);
% Executar script principal
parallel_script;
% Fechar pool
delete(pool);
EOF
job-nanny matlab -nodisplay -nosplash -r "run_parallel; exit"
Exemplo de Script MATLAB
simulacao.m
% Simulação de Monte Carlo
n_sim = 10000;
n_passos = 1000;
resultados = zeros(n_sim, 1);
tic;
for i = 1:n_sim
% Gerar trajetória aleatória
passos = randn(n_passos, 1);
trajetoria = cumsum(passos);
% Calcular estatística de interesse
resultados(i) = max(trajetoria) - min(trajetoria);
end
tempo = toc;
% Estatísticas
media = mean(resultados);
desvio = std(resultados);
histograma = histogram(resultados, 50);
% Salvar resultados
save('resultados.mat', 'resultados', 'media', 'desvio', 'tempo');
% Gerar relatório
fid = fopen('relatorio.txt', 'w');
fprintf(fid, 'Simulação de Monte Carlo\n');
fprintf(fid, 'Número de simulações: %d\n', n_sim);
fprintf(fid, 'Tempo de execução: %.2f segundos\n', tempo);
fprintf(fid, 'Média: %.4f\n', media);
fprintf(fid, 'Desvio padrão: %.4f\n', desvio);
fclose(fid);
% Figura
figure('Visible', 'off');
histogram(resultados, 50);
xlabel('Valor');
ylabel('Frequência');
title('Distribuição dos resultados');
print('histograma', '-dpng');
Processamento de Imagens com Parallel Computing Toolbox
submit_matlab_image.sh
#!/bin/bash
#SBATCH -J matlab_image
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 24:00:00
#SBATCH --mem=32G
export INPUT="imagens/*.png"
export OUTPUT="resultados_imagens/"
module load matlab/R2019b
cat > process_imagens.m << EOF
% Listar arquivos
arquivos = dir('imagens/*.png');
n_arquivos = length(arquivos);
% Iniciar pool
pool = parpool('local', $SLURM_CPUS_PER_TASK);
% Processar em paralelo
parfor i = 1:n_arquivos
nome = arquivos(i).name;
img = imread(['imagens/' nome]);
% Processamento
img_gray = rgb2gray(img);
img_filtrada = medfilt2(img_gray);
bordas = edge(img_filtrada, 'canny');
% Salvar resultados
imwrite(img_filtrada, ['resultados_imagens/filtrada_' nome]);
imwrite(bordas, ['resultados_imagens/bordas_' nome]);
% Estatísticas
stats(i).nome = nome;
stats(i).media = mean(img_filtrada(:));
stats(i).desvio = std(double(img_filtrada(:)));
end
% Salvar estatísticas
save('resultados_imagens/stats.mat', 'stats');
delete(pool);
EOF
job-nanny matlab -nodisplay -nosplash -r "process_imagens; exit"
Job Array para Múltiplos Parâmetros
submit_matlab_array.sh
#!/bin/bash
#SBATCH -J matlab_array
#SBATCH --array=1-10
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 06:00:00
#SBATCH --mem=8G
PARAM=$SLURM_ARRAY_TASK_ID
export INPUT="param_${PARAM}.m"
export OUTPUT="run_${PARAM}/"
module load matlab/R2019b
mkdir -p run_${PARAM}
cd run_${PARAM}
cat > script_${PARAM}.m << EOF
% Parâmetro específico
param = $PARAM;
% Cálculo
x = linspace(0, 10, 1000);
y = sin(param * x) .* exp(-x/10);
resultado = trapz(x, y.^2);
% Salvar
save(['resultado_${PARAM}.mat'], 'param', 'resultado');
% Relatório
fid = fopen('relatorio.txt', 'w');
fprintf(fid, 'Parâmetro: %d\n', param);
fprintf(fid, 'Resultado: %.6f\n', resultado);
fclose(fid);
EOF
job-nanny matlab -nodisplay -nosplash -r "script_${PARAM}; exit"
Utilizando Toolboxes Específicas
submit_matlab_toolbox.sh
#!/bin/bash
#SBATCH -J matlab_toolbox
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 12:00:00
#SBATCH --mem=16G
export INPUT="machine_learning.m"
export OUTPUT="ml_results/"
module load matlab/R2019b
cat > machine_learning.m << EOF
% Carregar dados
dados = load('dados_treinamento.mat');
X = dados.X;
Y = dados.Y;
% Dividir treino/teste
cv = cvpartition(size(X,1), 'HoldOut', 0.2);
X_train = X(cv.training,:);
Y_train = Y(cv.training);
X_test = X(cv.test,:);
Y_test = Y(cv.test);
% Treinar modelo (Statistics and Machine Learning Toolbox)
modelo = fitcecoc(X_train, Y_train);
% Avaliar
Y_pred = predict(modelo, X_test);
acuracia = sum(Y_pred == Y_test) / length(Y_test);
% Matriz de confusão
cm = confusionchart(Y_test, Y_pred);
cm.Title = ['Acurácia: ' num2str(acuracia*100, '%.1f') '%%'];
exportgraphics(cm, 'confusion_matrix.png');
% Salvar modelo
save('modelo_treinado.mat', 'modelo', 'acuracia');
EOF
job-nanny matlab -nodisplay -nosplash -r "machine_learning; exit"
Compilação de Aplicações MATLAB
compile_matlab.sh
#!/bin/bash
#SBATCH -J compile_matlab
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G
export INPUT="meu_programa.m"
export OUTPUT="meu_programa"
module load matlab/R2019b
job-nanny matlab -nodisplay -nosplash -r "mcc -m meu_programa.m; exit"
Execução de Aplicação Compilada
run_compiled_matlab.sh
#!/bin/bash
#SBATCH -J run_compiled
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 04:00:00
#SBATCH --mem=8G
export INPUT="dados.dat"
export OUTPUT="resultados.dat"
# Não precisa carregar módulo MATLAB para executar compilado
job-nanny ./meu_programa dados.dat
Referências
Documentação: https://www.mathworks.com/help/matlab/
Tutoriais: https://www.mathworks.com/support/learn-with-matlab-tutorials.html
Parallel Computing Toolbox: https://www.mathworks.com/help/parallel-computing/
Ver também
Mathematica - Computação simbólica e numérica
R - Computação estatística
Processando Simulações - Como submeter jobs