N=100;
T=10;
LAMBDA=.4;

%Make an x matrix
x = rand(2,N);
w = sqrt(0.1)*randn(N,1);

y=zeros(N,1);
for i=1:size(x,2)
    %y=u*sin(2*pi*(u+v)) + v*sin(3*pi*(u-v))
    y(i)=x(1,i)*sin(2*pi*(x(1,i)+x(2,i))) + x(2,i)*sin(3*pi*(x(1,i)-x(2,i))) + w(i);
end;

%Gaussian
GK=zeros(N,N);
for i=1:size(x,2)
    for j=1:size(x,2)
        GK(i,j)=Gkernel(1,x(:,i),x(:,j));
    end;
end;
GC=inv(LAMBDA*eye(size(GK))+GK)*y;

%Linear
LK=zeros(N,N);
for i=1:size(x,2)
    for j=1:size(x,2)
        LK(i,j)=x(:,i)'*x(:,j);
    end;
end;
LC=inv(LAMBDA*eye(size(LK))+LK)*y;

%Polynomial
PK=zeros(N,N);
for i=1:size(x,2)
    for j=1:size(x,2)
        PK(i,j)=(1+x(:,i)'*x(:,j))^2;
    end;
end;
PC=inv(LAMBDA*eye(size(PK))+PK)*y;

xt = rand(2,T);
yt = zeros(1,size(xt,2));
for i=1:size(xt,2)
    yt(i)=xt(1,i)*sin(2*pi*(xt(1,i)+xt(2,i))) + xt(2,i)*sin(3*pi*(xt(1,i)-xt(2,i)));
end;

gt = zeros(1,size(xt,2));
for i=1:size(xt,2)
    for j=1:size(x,2)
        gt(i)=gt(i)+GC(j)*Gkernel(1,x(:,j),xt(:,i));
    end;
end;

lt = zeros(1,size(xt,2));
for i=1:size(xt,2)
    for j=1:size(x,2)
        lt(i)=lt(i)+LC(j)*x(:,j)'*xt(:,i);
    end;
end;

pt = zeros(1,size(xt,2));
for i=1:size(xt,2)
    for j=1:size(x,2)
        pt(i)=pt(i)+PC(j)*(1+x(:,j)'*xt(:,i))^2;
    end;
end;

ge = sum((gt-yt).^2,2);
le = sum((lt-yt).^2,2);
pe = sum((pt-yt).^2,2);
