Mam problem związany ze skorzystaniem z wcześniej zdefiniowanej funkcji. Problem wygląda następująco:
program:
Kod: Zaznacz cały
clc;
clear;
e=1e-5;n=2;
d=[1 0;0 1];
x(1,:)=[0 0];m=0;k=1;ap=0;
f(1)=fun(x(1,:));
r=f(1);
for p=1:n
for q=1:n
for i=-5:0.001:5
x((k+1),:)=x(k,:)+i*d(k,:);
b=fun(x((k+1),:));
if b<r
f(k+1)=b;
r=b;
a(k)=i;
end
end
x((k+1),:)=x(k,:)+a(k)*d(k,:);
if k==n
if abs(x(k+1,:)-x(1,:)) == e
lastx=x(k+1,:)
lastf=fun(lastx)
hold
else
for i=1:k
b(i)=f(i)-f(i+1);
end
MIN=b(1);
MAX=b(1);
for i=2:k
if MIN>b(i)
MIN=b(i);
end
if MAX<b(i)
MAX=b(i);
end
end
for i=1:k
if MAX==b(i)
m=i-1;
end
end
fl=fun((2*x(k+1,:)-x(1,:)));
x(1,:)=x(k+1,:)+ap*d(k,:);
f(1)=fun(x(1,:));
k=1;
end
end
k=k+1;
end
end
lastx=x(1,:)
lastf=f(1)
Kod: Zaznacz cały
function f=fun(x)
% f=x(1)^2+2*x(2)^2-2*x(1)*x(2)-4*x(1);
% f=100*(x(1)^2-x(2))^2+(1-x(1))^2+3*x(1)*x(2);
% f=x(1)-x(2)+2*x(1)^2+2*x(1)*x(2)+x(2)^2;
% f=100*x(1)^4+(-200*x(2)+1)*x(1)2+(3*x(2)-2)*x(1)+100*x(2)^2+1;
f=8*x(1)^2+5*x(2)^2+4*x(1)*x(2)+x(1);