%## Autor: Peter Bokes  <peter.bokes zo stuba.sk>
%## podporené z projektu KEGA 006STU-4/2022
%## 
%## Skript pre demonštrovanie rozvoja počiatočnej podmienky pre 
%## vlnovú funkciu v tvare lineárne lomemenej funkcie do konečného počtu N stacionárnych stavov 
%## častie v nekonečne hlbokej potenciálovej jame.
%##
function Pociatocna_podmienka_v_jame(L=1.0,a=0.2,N=10,Nx=100)
%##
%## manuál pre octave: https://docs.octave.org/interpreter/index.html#SEC_Contents
%##
%## rychly tutorial: https://sites.ualberta.ca/~kirchner/513/Matlab_Octave%20Tutorial.html
%##
%
% šírka potenciálovej jamy 
% L = 2.0 
%
% Pozícia maxima počiatočnej podmienky
% a = 1.5
%
% počet bázových funkcií 
% N = 10
% diskretizácia osi x
% Nx = 100

n_vals = linspace(1, N, N );
c = coef(n_vals,a,L)

% pole x-hodnôt v ktorých počítame pravdepodobnosť
x_vals = linspace(0.0, L, Nx);
% iniciovanie pravdepodobnosti, budú spočítané po jednotlivých hodnotách x
p_vals = linspace(0.0, L, Nx);
p0_vals = linspace(0.0, L, Nx);

% výpočet pravdepodobnosti
for i = 1:Nx
    p_vals(i) = prob(x_vals(i),n_vals,c,L);
    p0_vals(i) = prob0(x_vals(i),a,L);
end

%grafy
plot(x_vals,p_vals);
hold on
plot(x_vals,p0_vals);
xlabel("x");
ylabel("P(x)");
grid on
hold off

% pause();
%##
%##  zadefunovanie funkcií
%## 

% koeficienty rozvoja
function c = coef(n,a,L)
   kn = pi.*n./L ;
   c = (sqrt(6.0)/(a*L))*(1.0 + a/(L-a)).*sin(kn.*a)./(kn.*kn) ;
end

% vyskladaná pravdepodobnosť z bázových funkcií
function p = prob(x, n, c, L)
   kn = pi.*n./L  ;
   psi = sqrt(2./L).*sin(kn.*x) ;
   p = abs(dot(c,psi))^2 ;
end

% pravdepodobnosť priamo z počiatočnej podmienky
function p = prob0(x,a,L)
  if ( x < a ) 
     p = (3./a^2/L)*x^2;
  else
     p = (3./(L-a)^2/L)*(L-x)^2;
  endif 
end

end
