Έχω γράψει τον ακόλουθο κώδικα για τη βελτιστοποίηση ενός ενισχυτή 5 σταδίων, χρησιμοποιώντας το fmincon solver, το οποίο περιέχεται στο εργαλείο βελτιστοποίησης MATLAB, δοκιμάζω επίσης τους διάφορους αλγορίθμους λύσεων που προσφέρονται (Εσωτερικό σημείο, SQP, Active set, Trust region reflective ) Υπάρχει πρόβλημα με τον κώδικά μου, υποθέτω ότι είναι στο δεύτερο μέρος. Εάν κάποιος έχει κάποια ιδέα θα ήμουν ευγνώμων.
%myfun.m
function f = myfun(A)
N0= 0;
N1 = A(1)*sqrt(N0^2 + 10^-10);
N2 = A(2)*sqrt(N1^2 + 10^-6);
N3 = A(3)*sqrt(N2^2 + 10^-4);
N4 = A(4)*sqrt(N3^2 + 10^-4);
N5 = A(5)*sqrt(N4^2 + 10^-2);
N5= Nout;
Sin1 = 0.1/A(1);
Sin2 = 3/(A(1)*A(2));
Sin3 = 5/(A(1)*A(2)*A(3));
Sin4 = 8/(A(1)*A(2)*A(3)*A(4));
Sin5 = 12/(A(1)*A(2)*A(3)*A(4)*A(5));
Smin = min(Sin1,Sin2,Sin3,Sin4,Sin5);
Smin = Smax;
f = Smax / Nout;
%call.solver.m
A(i)= [41,37,22,24,17];
n(i)= [10^(-5),10^(-3),10^(-2),10^(-1)];
N=[];
N(1)=0;
N(5) = Nout;
for i=1:5
N(i)=A(i)*sqrt((N(i-1)^2+n(i)^2));
end
options=optimset; %Epilogh twn default parametrwn
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = fmincon(@myfun,x0,[],[],[],[],[],[],@mycon,options)
%mycon.m
function [c,ceq] = mycon(A)
c = [];
ceq(1) = A(1) * A(2) * A(3) * A(4) * A(5)-10000 ;