Levenberg & Marquardt Algoritması ile Parametre Kestirimi

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;

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir