Matlab - przełączanie sie pomiedzy kilkoma funkcjami

0

Witam,

Mam problem związany ze skorzystaniem z wcześniej zdefiniowanej funkcji. Problem wygląda następująco:

program:

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,:)+id(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)

odwołuje się do wcześniej zdefiniowanej funkcji w postaci:

function f=fun(x)
% f=x(1)2+2x(2)2-2x(1)x(2)-4x(1);
% f=100*(x(1)2-x(2))2+(1-x(1))^2+3x(1)x(2);
% f=x(1)-x(2)+2
x(1)2+2
x(1)x(2)+x(2)</sup>2;
% f=100
x(1)4+(-200x(2)+1)x(1)2+(3x(2)-2)x(1)+100x(2)^2+1;
f=8
x(1)2+5x(2)2+4x(1)*x(2)+x(1);

Przed uruchomieniem komentuje wszystkie funkcjie oprócz jednej. Chodzi mi o to żeby móc jakoś wybrać funkcje wejściową używając konsoli. Z góry dzięki za pomoc i pozdrawiam.

1

Zrób sobie funkcje dla każdej z tych funkcji osobno, np. fun1, fun2.... (lepiej, gdyby nazwy coś znaczyły)

Potem możesz użyć uchwytów do funkcji: funkacja = @fun1;. Takiego uchwytu używa się jak normalnej funkcji, z tym, że przed uruchomieniem skryptu możesz wybrać, na którą funkcję ma on wskazywać. Możesz też zrobić sobie jakąś funkcję, która na podstawie parametru zwróci uchwyt do odpowiedniej funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1