clear; clc;
n = 50;
N = 1000;
x = linspace(-3, 3, n)';
X = linspace(-3, 3, N)';
pix = pi*x;
rng('default');
y = sin(pix) ./ (pix) + 0.1*x + 0.05*randn(n, 1);
hh = 2*0.3^2;
t0 = randn(n, 1);
e = 0.1; % 梯度下降的步幅
for o = 1 : n*1000
i = randi(n, 1);
ki = exp(-(x - x(i)).^2/hh);
t = t0 - e*ki*(ki'*t0 - y(i)); % 梯度法
if norm(t - t0) < 1e-6
break;
end
t0 = t;
end
K = exp(-(repmat(X .^ 2, 1, n) + repmat(x .^ 2', N, 1) - 2*X*x')/hh);
F = K*t;
plot(X, F, 'g-', 'linewidth', 2);
hold on;
plot(x, y, 'bo', 'linewidth', 2);
axis([-2.8 2.8 -0.5 1.2]);
hold off