xristina2 Δημοσ. 14 Ιανουαρίου 2021 Δημοσ. 14 Ιανουαρίου 2021 (επεξεργασμένο) Έχω γράψει τον ακόλουθο κώδικα για τη βελτιστοποίηση ενός ενισχυτή 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 ; Επεξ/σία 14 Ιανουαρίου 2021 από xristina2
SOADNICK Δημοσ. 14 Ιανουαρίου 2021 Δημοσ. 14 Ιανουαρίου 2021 Καλησπέρα ΜαρίαΑμαλίαΧριστίνα Δες την απάντηση του @Maniolas 1
xristina2 Δημοσ. 14 Ιανουαρίου 2021 Μέλος Δημοσ. 14 Ιανουαρίου 2021 (επεξεργασμένο) 1 λεπτό πριν, SOADNICK είπε Καλησπέρα ΜαρίαΑμαλίαΧριστίνα Δες την απάντηση του @Maniolas πως το ορίζουμε δηλαδή στο matlab; το μόνο λάθος βρίσκεται στο myfun; Επεξ/σία 14 Ιανουαρίου 2021 από xristina2
Maniolas Δημοσ. 14 Ιανουαρίου 2021 Δημοσ. 14 Ιανουαρίου 2021 12 λεπτά πριν, xristina2 είπε πως το ορίζουμε δηλαδή στο matlab; το μόνο λάθος βρίσκεται στο myfun; Ασποούμε για παράδειγμα η μεταβλητή σου "Νout" δεν έχει τιμή, για να καταλάβεις χοντρικά είναι σαν να λες στην Matlab στην μεταβλητή Ν5 δώσε την τιμή τίποτα, κενό.Και πρόβλημα θα έχεις οταν διαίρεις με την "Νout" δηλαδη είναι σαν να κάνει x/0 που είναι απροδιοριστία και λογικά η Matlab θα βγάζει NaN. Τώρα αλλά λάθη έτσι πρόχειρα δεν βλέπω αλλά πρέπει να τρέξω κώδικα για να δω και να έχω εκφώνηση. Πιθανότατα αν έχεις όρεξη δες πως δουλεύει ο debugger της Matlab, πιστεύω θα βοηθήσει.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα