.. _mathematica: =========== Mathematica =========== .. contents:: Nesta seção: :local: :depth: 2 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 ========================= .. code-block:: bash :caption: 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 ================================ .. code-block:: bash :caption: 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.out Submissão de Jobs com Paralelismo ================================= .. code-block:: bash :caption: 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 "< parallel.out Exemplo de Script Mathematica ============================= .. code-block:: mathematica :caption: 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 =================================== .. code-block:: bash :caption: 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 "< output_${PARAM}.log Processamento de Dados em Lote ============================== .. code-block:: bash :caption: 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 "< 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 "<