clear
% Tund nr. 10, ülesanne 1
% esitame andmed
x=[2014:1:2021];
y=[22.2,19.5,18.0,17.9,25.2,18.6,18.7,29.3];
kaalud=[3,4,4,4,2,4,4,1];
% teeme joonise
plot(x,y,'bo')
hold on
% koostame lineaarfunktsiooni vähimruutude mõttes.
% a) kaalud on võrdsed (iga sõlm on võrdse tähtsusega)
xvork=[2014:0.5:2021];
kordajadl1=polyfit(x,y,1)
% saime funktsiooni Phi(x)=10^3*0.0007*x-10^3*1.2950
ylineaar1=polyval(kordajadl1,xvork);
% esitame äsja leitud lineaarfunktsiooni joonisel
plot(xvork,ylineaar1,'r')
hold on
% leiame, milline on temperatuur Talinnas 15. juulil käesoleval aastal
prognoosl1=polyval(kordajadl1,2022)
% leiame lineaarfunktsiooni vähimruutude mõttes etteantud kaaludega
% lahendame võrrandisüsteemi A*c=b ja leiame c1 ja c2.
% esitame maatriksi A
A(1,1)=sum(kaalud.*x.^2);
A(1,2)=sum(kaalud.*x);
A(2,1)=A(1,2);
A(2,2)=sum(kaalud);
A
% esitame maatriks b
b(1)=sum(kaalud.*y.*x);
b(2)=sum(kaalud.*y);
b'
% maatriks b transponeeritud, et saaksime korrutada A^-1*b'
% leiame maatriksi c ehk c1 ja c2
c=inv(A)*b'
% saime, et c1=0.1168 ja c2=-215.7961
% interpolandiks saime Phi(x)=0.1168*x-215.7961
% leiame lineaarfunktsiooni kordajad viimast interpolanti arvestades
ylineaar2=polyval(c',xvork);
% esitame joonisel viimase lineaarfunktsiooni (erinevad kaalud)
plot(xvork,ylineaar2,'g')
hold on
% prognoosime temperatuuri sel aastal
prognoosl2=polyval(c',2022)

% lähendame andmeid ruutfunktsiooniga vähimruutude mõttes
% kaalud on võrdsed (igal sõlmel võrdne osakaal)
kordajadr1=polyfit(x,y,2)
yruut1=polyval(kordajadr1,xvork);
% teeme joonise
plot(xvork,yruut1,'r')
hold on
% leiame temperatuuri 15. juulil Tallinnas, 2022.
prognoosr1=polyval(kordajadr1,2022)
% koostame ruutfunktsiooni vähimruutude mõttes, kui punktidel on 
% erinevad kaalud (lähteandmetes antud)
% leiame maatriksi A
uA(1,1)=sum(kaalud.*x.^4);
uA(1,2)=sum(kaalud.*x.^3);
uA(1,3)=sum(kaalud.*x.^2);
uA(2,1)=uA(1,2);
uA(2,2)=uA(1,3);
uA(2,3)=sum(kaalud.*x);
uA(3,1)=uA(1,3);
uA(3,2)=uA(2,3);
uA(3,3)=sum(kaalud);
% leiame maatriksi b
ub(1)=sum(kaalud.*y.*x.^2);
ub(2)=sum(kaalud.*y.*x);
ub(3)=sum(kaalud.*y);
% leiame maatriksi c ehk lahendame süsteemi A*c=b
uc=inv(uA)*ub'
% ruutinterpolandiks erinevate kaaludega saime järgmise funktsiooni
% Phi(x)=10^6*0.0000*x^2-10^6*0.0014*x+10^6*1.4380
% leiame y väärtused
yruut2=polyval(uc',xvork);
% teeme joonise
plot(xvork,yruut2,'g')
hold off
% prognoosime temperatuuri sel aastal
prognoosr2=polyval(uc',2022)