• Spyder vs ipython notebook, vs ipython in console
  • Console: eseguire C:\WinPython\scripts\env.bat per aggiungere Python al path.
  • Console: eseguire: set PATH=C:\Octave\Octave-3.8.2\bin;%PATH% per aggiungere octave e gcc. (controllare il vostro numero di versione, 3.8.1 o 3.8.2).
  • Compilazione: gcc -std=c11 -Wall nomefile.c -o nomefile

[cpp]
// Esempio: stampa un elenco di numeri primi e la loro radice
#include <stdio.h> // input output
#include <math.h> // matematica
#include <stdbool.h> // booleani (true,false)
int primo(int p)
{
for (int a = 2; a < p; a++) // domanda: se lo cambio con a*a <= p?
if (p % a == 0) return false;
return true;
}
#define EPS 1e-9
/* decommentate le printf, per stampare ad ogni invocazione,
* i dettagli del calcolo.
*/
double radice(double x)
{
// printf("radice di %f:\n",x);
int iterazione = 1;
double y = x;
while (fabs(y*y – x) >= EPS) {
// printf("%d – ",iterazione++);
// printf("y = %.4f, error = %f\n",y,fabs(y*y-x));
y = (y + x/y)/2.0;
}
return y;
// printf("———\n");
}
int main(void)
{
printf("Calcolo le radici di tutti i primi <= 133\n");
printf("—————————————–\n");
for (int i=2; i<133; i++) {
if (primo(i))
printf(" %3d\t | %10.6lf\n",i,radice(i));
}
printf("————–\n");
return 0;
}
[/cpp]
[python]
# stesso codice in python.
from math import sqrt,fabs
def primo(p):
max = int(round(sqrt(p)))
for a in range(2,max):
if p % a == 0:
return False
return True
def radice(x):
EPS=1e-9
y = x
while (fabs(y*y – x) >= EPS):
y = (y + x/y)/2.0
return y
print("Elenco di primi < 133, e loro radice quadrata")
print("———————————————")
for i in range(2,133):
if (primo(i)):
print(" %3d\t | %10.6lf" % (i,radice(i)))
[/python]

Il predicato primo in Matlab (attenzione, essendo un linguaggio…accrocchiato, Matlab non permette di definire più funzioni in un file, come sopra in C, od in Python, ma una sola funzione per ogni file, che deve avere il nome della stessa funzione). Si noti la sintassi dei for, dell’if, etc.
[matlab]
function p = primo(n)
for a = 2:n-1
if (mod(n,a) == 0)
p = false;
return;
endif
endfor
p = true;
endfunction
[/matlab]

    Scrivere quindi la funzione sopra, in un file primo.m, metterlo nella vostra cartella, aprire la console, lanciare octave, e provare ad invocare primo(10), primo(11).
  • Esercizio: Stampare i valori della successione gap$$_i = p_{i+1}-p_i$$ per $$i < 1000$$. Cioè, la differenza tra due numeri primi successivi.
  • Vogliamo studiare come varia il valore gap$$_i$$, in particolare quanti primi gemelli (a distanza 2) si trovano per $$i<10000$$?
  • Dare un occhiata a Scientific Python.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *