# -*- coding: utf-8 -*-
"""
Created on Sat Oct 24 17:19:01 2026

@author: 3dsam
"""

import numpy as np
import matplotlib.pyplot as plt
import math


n = np.arange(3, 201)


log_faktorial = np.array([math.lgamma(int(k) + 1) for k in n])


log_stirling = (n*np.log(n) - n + 0.5 * np.log(2 * np.pi * n))


log_orling = (n*np.log(n) - n)

# Relatívna chyba
relativna_chyba = np.abs((log_stirling - log_faktorial) / log_faktorial)
relativna_chyba2 = np.abs((log_orling - log_faktorial) / log_faktorial)


plt.figure()

plt.plot(n, log_faktorial, label='ln(n!)')
plt.plot( n, log_stirling, '--',  label='Stirling')
plt.plot( n, log_orling, '--',  label='n*ln(n)-n')

plt.xlabel('n')

plt.title('Porovnanie ln(n!) a Stirlingovho vzorca n*ln(n)-n+1/2ln(2 pi n)')
plt.legend()

plt.tight_layout()


plt.figure()

plt.plot(n, relativna_chyba, color='red', label='Relatívna chyba')
plt.plot(n, relativna_chyba2, color='orange', label='Relatívna chyba okresaného Stirlinga (n*ln(n)-n)')

plt.xlabel('n')
plt.ylabel('Relatívna chyba')
plt.title('Relatívna chyba Stirlingovho vzorca')
plt.legend()
plt.yscale('log')
plt.tight_layout()

plt.show()
