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

Βελτιστοποίηση ενισχυτή πολλών βαθμίδων με 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
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

3 απαντήσεις σε αυτή την ερώτηση

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

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

 

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

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

Επεξ/σία από xristina2
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
12 λεπτά πριν, xristina2 είπε

 

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

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

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.