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
- x1 = zeros(1,N);
- x2 = zeros(1,N);
- xb0 = x0;
- xb = zeros(1,N);
- %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);
- x1=x0;
- for k=1:N
- x2 = x1;
- x1(k) = x1(k) + t;
- q = y(x1);
- if(q<q0)
- q0=q;
- else
- x1=x2;
- x1(k)=x1(k)-t;
- q=y(x1);
- if(q<q0)
- q0=q;
- else
- x1=x2;
- end
- end
- end
- if(y(xb0)>y(x1))
- xb=x1;
- counter=counter+1;
- disp(['Wektor bazowy dla iteracji: ' num2str(counter)]);
- xb %Wyświetlam wektor bazowy dla danej iteracji
- for j=1:N
- x0(j)=2*xb(j)-xb0(j); %Etap roboczy
- xb0=xb; %Etap roboczy
- end
- else
- x0=xb0;
- t=t*B;
- end
- if (t<e) %Warunek końca pętli
- break;
- end
- end
- disp(['Wartosc minimum po ' num2str(counter) ' iteracjach to: ' num2str(y(x1))]);
- %by M.J.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement