Aşağıda F(X,Y) = aX2 + bY2 fonksiyonunda a ve b parametrelerinin LM algoritması ile kestirimine ilişkin MATLAB kodu verilmiştir.
clc, clear all, close all;
%% F(x,y) = aX^2+b^Y^2;
%% J(n_j) = [X^2 Y^2];
%% Bu uygulamada a ve b parametreleri LM algoritmas? ile bulunmu?tur.
g_SAMPLE = 100;
g_ITERATION = 5;
INPUT_X = 2 * rand(1, g_SAMPLE) - 1;
INPUT_Y = 2 * rand(1, g_SAMPLE) - 1;
n_x = 2; n_y = 3;
DESIRED_OUTPUT = n_x * INPUT_X.^2 + n_y * INPUT_Y.^2;
figure, plot(DESIRED_OUTPUT)
p_x = rand;
p_y = rand;
lamda = 0.01;
for n_i = 1 : g_ITERATION
E(n_i) = 0;
for n_j = 1 : g_SAMPLE
OUTPUT_TRAIN = p_x * INPUT_X(n_j)^2 + p_y * INPUT_Y(n_j)^2;
ERROR(n_j) = DESIRED_OUTPUT(n_j) - OUTPUT_TRAIN;
E(n_i) = E(n_i) + 0.5 * ERROR(n_j) ^ 2;
JACOBIAN(n_j, : ) = [INPUT_X(n_j)^2 INPUT_Y(n_j)^2];
end
kontrol = 1;
while(kontrol == 1)
J_new = inv(JACOBIAN' * JACOBIAN + lamda * eye(2,2)) * JACOBIAN' * ERROR';
p_x_new = p_x + J_new(1);
p_y_new = p_y + J_new(2);
E_NEW(n_i) = 0;
for n_j = 1 : g_SAMPLE
OUTPUT_TRAIN = p_x_new * INPUT_X(n_j)^2 + p_y_new * INPUT_Y(n_j)^2;
ERROR_NEW(n_j) = DESIRED_OUTPUT(n_j) - OUTPUT_TRAIN;
E_NEW(n_i) = E_NEW(n_i) + 0.5 * ERROR_NEW(n_j) ^ 2;
end
if E_NEW(n_i) < E(n_i)
p_x = p_x_new;
p_y = p_y_new;
lamda = lamda * .5;
kontrol = 0;
else
lamda = lamda / .5;
end;
end
end;