program Kalman_Filter;

{$APPTYPE CONSOLE}

uses
  SysUtils, math, ShellAPI;

// predpoklad start k 21.6, max. delka dne 21.6 00 h
// omega hodinovy uhel, perioda 24 hod, nulovy 21.6 12 h
// Vyska - vyjadruje vysku Slunce nad obzorem v rozmezi -1 az +1, pokud je pod 0, je insolace nulova
// Neuvazovana obllacnost, clenitost, propustnost atmosfery, nadmorska vyska, advekce, srazky, latentni teplo

var P,Q,R,a,b,X,Ti,Tj,Tk,sigma,phi,dec,omega,Vyska: real;
var time: integer;

begin

Tj=280; //pocetecni teplota v K
P=0.8; // ST
Q=0.2; // Chyba
R=0.5; // Sum
a=1;
X=300; // Radiacni bilance Insolace - Vyzarovani W/m2
b=0.003*X; // X je intenzita zmeny teploty v zavislosi 
time=0;
sigma=5.6704E-8;
phi=0.89011792; // 51 st.

for time:=1 to 10000 do begin

dec=23.5*cos(6.2831853071796*time/8766.24);
omega=(6.2831853071796*(time-12)/24);
Vyska=sin(phi)*sin(dec)+cos(phi)*cos(dec)*cos(omega);
if Vyska>0 then X=(1368*Vyska)-(sigma*Tj*Tj*Tj*Tj) else X=-(sigma*Tj*Tj*Tj*Tj);
b=0.003*X;
Tj=a*Ti+b;
P=P+Q;
K=P/(P+R);
Tk=Tj+K*(Ti-Tj);
P=(1-K)*P;
Ti=Tk;
writeln(time,' ',Tk,' ',Vyska,' ',dec,' ',omega,' ',X);

end;
end.

