%% Census  14 DokuT
clear
close all
td = linspace(19.00, 19.90, 10);
yd = [76, 92, 106, 122, 132, 150, 179, 203, 226, 248];

format long 
c=polyfit(td,yd,9)
%%
% Onpa suuret kertoimet, mitä olis
c(1)*19^9+c(2)*19^8
format short
%%
t=linspace(19,19.90);
y=polyval(c,t);
plot(t,y,td,yd,'or')
title('Ei mitään järkeä!')
shg
%{
Miksi kuva on aivan pielessä?
Kertoimissa on virhettä, joka johtuu Vandermonden matriisin
häiriöalttiudesta.
Polynomin termien arvot ovat aivan eri suuruusluokkaa kuin data. Niinpä
kertoimien virheet johtavat suureen suhteelliseen virheeseen polynomin
arvoissa.  

Tehtävän järkevä skaalaus auttaa, kts. Moler.

Olennaisesti parempi skaalaus saadaan yksinkertaisesti käyttämällä
polynomille Lagrangen esitysmuotoa. Lagrangen interpolaatio on helppo
kirjoittaa ohjelmaksi vastaavasti kuin lagint Maplessa.

Otetaan kuitenkin valmis, Molerin kokoelmasta löytyvä polyinterp., joka
on R-hakemistossa valmiina.

%}
%%
%
% http://www.mathworks.se/moler/ncmfilelist.html
%
% http://math.tkk.fi/~apiola/matlab/opas/lyhyt/polynomit.html
%
%%
help polyinterp
syms u
p=polyinterp(td,yd,u)
%%
y=polyinterp(td,yd,t);
figure
plot(t,y)
hold on
plot(td,yd,'or')
title('Lagrangen muoto tekee tassa ihmeita')
shg
%addpath /Users/heikki/opetus/numsym/04/pc/matlab/moler/
%% PNS-sovituksia.
%
%{ 
Erityisen helppoa, koko homma menee täsmälleen samalla tavalla
polyfit-funktiolla, kun annetaan vain sovituspolynomin asteluku.
%}

clear
td = linspace(19.00, 19.90, 10);
yd = [76, 92, 106, 122, 132, 150, 179, 203, 226, 248];
c=polyfit(td,yd,2)    % 2. asteen poly
t=linspace(19,20);
figure
plot(td,yd,'or',t,polyval(c,t))
%%
hold on
c=polyfit(td,yd,3)  
plot(t,polyval(c,t),'g');shg
%%
% publish('H2T14R','pdf')

