2013-09-04 11 views
5

Sto tentando di tracciare la funzione x! in gnuplot, ho definito prima la funzione fattoriale e poi l'ho chiamata, ma sto sempre ricevendo l'overflow dello stack, indipendentemente dai limiti impostati sul grafico.Calcolo fattoriale della funzione x in gnuplot?

Questo che cosa ho provato:

gnuplot> fac(n) = (n==0) ? 1 : n * fac(n-1) 
gnuplot> plot [0:10][0:10] log(fac(x)), log(x**x) 
stack overflow 

risposta

7

dovrei definisco la funzione fac essere intero. Altrimenti, quando si traccia tutto lungo l'asse x, valuterà una lunga serie di numeri reali, in realtà uno enorme, che causerà sempre l'overflow.

Quindi, la funzione deve essere definita:

fac(x) = (int(x)==0) ? 1.0 : int(x) * fac(int(x)-1.0) 
+1

destro, e la funzione facoltà di solo numeri interi, così si potrebbe aggiungere un campionamento appropriato x-range: 'campioni set 11 '(per l'xrange' [0:10] '). – Christoph

8

Un'altra soultion sarebbe usare la (funzione intrinseca in gnuplot) Gamma function. è definito

N = gamma (N + 1)

gnuplot> plot [0:10][0:10] log(gamma(x+1)), log(x**x)