x0= linspace(-1,1);  % 100 punnkter
y0= -1+2 * exp(x0);  % den sanna formeln!
b= 0.5;  % brusnivå  0.5 0.1 0.01
r= 2*b * rand([1 100])-b; % brus
x= (x0)';  % x-data som kolumnvektor
y= (y0+r)';  % y-data som kolumnvektor

% linjär approximation: MKM lösning av A1*k1= y
A1= [ones([100 1]), x];
k1= (A1'* A1)\ (A1'* y);
% plottar datapunkter och den bäst MKM-approximerande linjen
figure
subplot(1,3,1)
plot(x, y,'.')
hold on
plot(x,A1*k1)
d1= norm(y-A1*k1,2);  % felet i linjära approximationen
title(d1)

% andragrads-approximation: MKM lösning av A2*k2= y
A2= [ones([100 1]), x, x.^2];
k2= (A2'* A2)\ (A2'* y);
% plottar datapunkter och den bäst MKM-approximerande linjen
subplot(1,3,2)
plot(x', y','.')
hold on
plot(x',A2*k2)
d2= norm(y-A2*k2,2);  % felet i andragrads-approximationen
title(d2)

% exponential-approximation: MKM lösning av A3*k3= y
A3= [ones([100 1]), exp(x)];
k3= (A3'* A3)\ (A3'* y);
% plottar datapunkter och den bäst MKM-approximerande linjen
subplot(1,3,3)
plot(x', y','.')
hold on
plot(x',A3*k3)
d3= norm(y-A3*k3,2);  % felet i exponential-approximationen
title(d3)