Advertisement
SonicDesu

Hook v2

Jan 6th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.32 KB | None | 0 0
  1. clear; clc; close all;
  2.  
  3. y = @(X) abs(X(1)-1.1) + abs(X(2)+2.2) + abs(X(3)+3.3) + abs(X(4)-4.4);
  4. %@up Funkcja dana w zadaniu wyciągająca zmienne p,q,r,s z wektora X
  5. N = 4; %Ilość zmiennych danej funkcji
  6. x0 = [ 7 -9 -1 10 ]; %Punkt startowy
  7. t = 1; %krok początkowy (tał)
  8. e = 0.01; %dokładność (epsilon)
  9. B = 0.5; %współczynnik korekcyjny (beta)
  10. counter = 0; %Liczy ilość iteracji
  11.  
  12. xk = zeros(1,N); %wektor w danej iteracji
  13. d = eye(N); %baza wektorów ortogonalnych, odwołujemy się przez "d(nr wiersza, :)"
  14.  
  15.  
  16. %Tutaj troszkę poczarujemy, Matlab nie posiada pętli do while jak C++
  17. %Więc zamiast tego podziałamy na nieskończonej pętli while sprawdzającej
  18. %warunek pod koniec jej działania
  19.  
  20.  
  21. while 1
  22.    q0 = y(x0);
  23.    xk = x0;
  24.    
  25.    for k=1:N
  26.        xk=xk+t.*d(k,:);
  27.        q = y(xk);
  28.        if (q<q0)
  29.            q0=q;
  30.        else
  31.            xk=xk-(2*t).*d(k,:);
  32.            q=y(xk);
  33.            if (q<q0)
  34.                q0=q;
  35.            else
  36.                xk=xk+t.*d(k,:);
  37.            end
  38.        end      
  39.    end
  40.    disp(['Wektor bazowy dla iteracji: ' num2str(counter)]);
  41.    x0
  42.    if(y(x0)>y(xk))
  43.        x0=xk;
  44.    else
  45.        t=t*B;
  46.    end
  47.    
  48.    counter=counter+1;
  49. if (t<e)
  50.     break;
  51. end
  52.  
  53. end
  54.  
  55. disp(['Wartosc minimum po ' num2str(counter) ' iteracjach to: ' num2str(y(x0))]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement