2013-09-04 11 views
5

Próbuję wykreślić funkcję w gnuplot, zdefiniowałem najpierw funkcję silnikową, a następnie ją wywołałem, ale zawsze mam przepełnienie stosu, bez względu na to, jakie granice ustawiam na wykresie.Wykreślanie silni x funkcji w gnuplot?

To co próbowałem:

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

Odpowiedz

7

należy zdefiniować funkcję Fac być liczbą całkowitą. W przeciwnym razie, podczas kreślenia na całej osi X, będzie on oceniał duży zakres liczb rzeczywistych, w rzeczywistości duży, co zawsze spowoduje przepełnienie.

Więc funkcja powinna być zdefiniowana:

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

Prawo, a funkcja wydział jest określone tylko dla liczb całkowitych, więc można dodać odpowiednią próbkowania x-range: 'set próbki 11 '(dla xrange' [0:10] '). – Christoph

8

Innym soultion byłoby użyć (wewnętrzną funkcję w gnuplot) Gamma function. !

N = gamma (N + 1)

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