Mathematica

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

Ver também