Mathematica
Nesta seção:
Descrição
De acordo com a página do Mathematica, Mathematica define o estado da arte em computação técnica, fornecendo o principal ambiente de computação para milhões de inovadores, educadores e estudantes em todo o mundo.
Versões Disponíveis
mathematica/9.0
mathematica/10.4 (default)
Submissão de Jobs Seriais
submit_mathematica_serial.sh
#!/bin/bash
#SBATCH -J mathematica_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 05:00:00
#SBATCH --mem=8G
export INPUT="script.m"
export OUTPUT="script.out"
module load mathematica
job-nanny math -script script.m > script.out
Submissão de Jobs com MathKernel
submit_mathematica_kernel.sh
#!/bin/bash
#SBATCH -J mathematica_kernel
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 12:00:00
#SBATCH --mem=16G
export INPUT="calculation.m"
export OUTPUT="calculation.out"
module load mathematica
# Iniciar kernel e executar
job-nanny math -noprompt -run "<<calculation.m" > calculation.out
Submissão de Jobs com Paralelismo
submit_mathematica_parallel.sh
#!/bin/bash
#SBATCH -J mathematica_parallel
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 24:00:00
#SBATCH --mem=32G
export INPUT="parallel.m"
export OUTPUT="parallel.out"
module load mathematica
# Criar script com configuração paralela
cat > run_parallel.m << EOF
LaunchKernels[$SLURM_CPUS_PER_TASK]
Get["parallel.m"]
CloseKernels[]
EOF
job-nanny math -noprompt -run "<<run_parallel.m" > parallel.out
Exemplo de Script Mathematica
calculation.m
(* Cálculo numérico intensivo *)
n = 1000;
matrix = RandomReal[{0,1}, {n, n}];
eigenvalues = Eigenvalues[matrix];
Print["Maior autovalor: ", Max[eigenvalues]];
Print["Menor autovalor: ", Min[eigenvalues]];
(* Integração numérica *)
f[x_] := Sin[x]^2 * Exp[-x/10];
integral = NIntegrate[f[x], {x, 0, 100}];
Print["Integral: ", integral];
(* Ajuste de curva *)
data = Table[{x, 2*Sin[x] + RandomReal[{-0.1,0.1}]}, {x, 0, 2Pi, 0.1}];
fit = NonlinearModelFit[data, a*Sin[b*x + c], {a, b, c}, x];
Print["Parâmetros do ajuste: ", fit["BestFitParameters"]];
Export["results.txt", {eigenvalues[[1;;10]], integral, fit["BestFit"]}];
Job Array para Múltiplos Parâmetros
submit_mathematica_array.sh
#!/bin/bash
#SBATCH -J mathematica_array
#SBATCH --array=1-10
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 12:00:00
#SBATCH --mem=8G
PARAM=$SLURM_ARRAY_TASK_ID
export INPUT="template.m"
export OUTPUT="run_${PARAM}/"
module load mathematica
mkdir -p run_${PARAM}
cd run_${PARAM}
# Criar script com parâmetro específico
cat > run.m << EOF
parameter = $PARAM;
Print["Executando com parâmetro = ", parameter];
(* Cálculo dependente do parâmetro *)
result = NIntegrate[Sin[parameter*x]^2, {x, 0, 10}];
Print["Resultado: ", result];
Export["result_${PARAM}.txt", {parameter, result}];
EOF
job-nanny math -noprompt -run "<<run.m" > output_${PARAM}.log
Processamento de Dados em Lote
submit_mathematica_batch.sh
#!/bin/bash
#SBATCH -J mathematica_batch
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 24:00:00
#SBATCH --mem=16G
export INPUT="data_*.csv"
export OUTPUT="analysis/"
module load mathematica
mkdir -p analysis
# Criar script para processar todos os arquivos
cat > batch_process.m << EOF
files = FileNames["data_*.csv"];
results = {};
Do[
Print["Processando ", file];
data = Import[file, "CSV"];
(* Análise *)
means = Mean[data];
stds = StandardDeviation[data];
AppendTo[results, {file, means, stds}];
(* Salvar resultados individuais *)
Export["analysis/" <> FileBaseName[file] <> "_stats.txt",
{means, stds}, "Table"],
{file, files}];
(* Resumo geral *)
Export["analysis/summary.txt", results, "Table"];
EOF
job-nanny math -noprompt -run "<<batch_process.m"
Visualização de Dados
submit_mathematica_plot.sh
#!/bin/bash
#SBATCH -J mathematica_plot
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=4G
export INPUT="data.txt"
export OUTPUT="plot.pdf"
module load mathematica
cat > plot.m << EOF
data = Import["data.txt", "Table"];
(* Gráfico 2D *)
plot1 = ListPlot[data, PlotStyle -> PointSize[0.015],
AxesLabel -> {"X", "Y"},
PlotLabel -> "Dados experimentais"];
(* Histograma *)
plot2 = Histogram[Flatten[data], 30,
AxesLabel -> {"Valor", "Frequência"}];
(* Exportar *)
Export["plot.pdf", GraphicsGrid[{{plot1}, {plot2}}]];
EOF
job-nanny math -noprompt -run "<<plot.m"
Referências
Documentação: https://reference.wolfram.com/language/
Tutoriais: https://www.wolfram.com/support/learn/
Centro de Recursos: https://www.wolfram.com/support/
Ver também
MATLAB - Ambiente de computação numérica
R - Computação estatística
Processando Simulações - Como submeter jobs