Προς το περιεχόμενο

Βελτιστοποίηση ενισχυτή πολλών βαθμίδων με matlab


xristina2

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Έχω γράψει τον ακόλουθο κώδικα για τη βελτιστοποίηση ενός ενισχυτή 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 ;

 

Επεξ/σία από xristina2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

 

1 λεπτό πριν, SOADNICK είπε

πως το ορίζουμε δηλαδή στο matlab;  το μόνο λάθος βρίσκεται στο myfun;

Επεξ/σία από xristina2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

12 λεπτά πριν, xristina2 είπε

 

πως το ορίζουμε δηλαδή στο matlab;  το μόνο λάθος βρίσκεται στο myfun;

Ασποούμε για παράδειγμα η μεταβλητή σου "Νout" δεν έχει τιμή, για να καταλάβεις χοντρικά είναι σαν να λες στην Matlab στην μεταβλητή Ν5 δώσε την τιμή τίποτα, κενό.Και πρόβλημα θα έχεις οταν διαίρεις με την "Νout" δηλαδη είναι σαν να κάνει x/0 που είναι απροδιοριστία και λογικά η Matlab θα βγάζει NaN. Τώρα αλλά λάθη έτσι πρόχειρα δεν βλέπω αλλά πρέπει να τρέξω κώδικα για να δω και να έχω εκφώνηση.
Πιθανότατα αν έχεις όρεξη δες πως δουλεύει ο debugger της Matlab, πιστεύω θα βοηθήσει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...