Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear; clc; close all;
- y = @(X) abs(X(1)-1.1) + abs(X(2)+2.2) + abs(X(3)+3.3) + abs(X(4)-4.4);
- %@up Funkcja dana w zadaniu wyciągająca zmienne p,q,r,s z wektora X
- N = 4; %Ilość zmiennych danej funkcji
- x0 = [ 7 -9 -1 10 ]; %Punkt startowy
- t = 1; %krok początkowy (tał)
- e = 0.01; %dokładność (epsilon)
- B = 0.5; %współczynnik korekcyjny (beta)
- counter = 0; %Liczy ilość iteracji
- xk = zeros(1,N); %wektor w danej iteracji
- d = eye(N); %baza wektorów ortogonalnych, odwołujemy się przez "d(nr wiersza, :)"
- %Tutaj troszkę poczarujemy, Matlab nie posiada pętli do while jak C++
- %Więc zamiast tego podziałamy na nieskończonej pętli while sprawdzającej
- %warunek pod koniec jej działania
- while 1
- q0 = y(x0);
- xk = x0;
- for k=1:N
- xk=xk+t.*d(k,:);
- q = y(xk);
- if (q<q0)
- q0=q;
- else
- xk=xk-(2*t).*d(k,:);
- q=y(xk);
- if (q<q0)
- q0=q;
- else
- xk=xk+t.*d(k,:);
- end
- end
- end
- disp(['Wektor bazowy dla iteracji: ' num2str(counter)]);
- x0
- if(y(x0)>y(xk))
- x0=xk;
- else
- t=t*B;
- end
- counter=counter+1;
- if (t<e)
- break;
- end
- end
- disp(['Wartosc minimum po ' num2str(counter) ' iteracjach to: ' num2str(y(x0))]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement