Αρχείο κατηγορίας Κώδικας Προγράμματος

Υπολογισμός ακρότατων συνάρτησης δύο μεταβλητών

Όταν θέλω να υπολογίσω τα ακρότατα μιας συνάρτησης δύο μεταβλητών χρειάζεται να κάνω κάποιους υπολογισμούς. Παρακάτω, μια έτοιμη συνάρτηση για το Matlab και το Octave για τον υπολογισμό των ακρότατων και την 3D γραφική παράσταση που τα παρουσιάζει. Ο κώδικας για να δουλέψει χρειάζεται το συμβολικό πακέτο (symbolic package), το οποίο δεν περιλαμβάνεται στις τυπικές εκδόσεις των matlab (symbolic math toolbox) και octave (octsympy).

Εάν θέλετε να μάθετε και τη θεωρία πίσω από τους υπολογισμούς σας παραπέμπω στις σημειώσεις του Καθ. Γεώργιου Ανδρουλάκη.

Λοιπόν έχουμε και λέμε, ο κώδικας είναι ο:

function akrotata(syn,pedia_timwn)
%Ypologizei akrotata synartisis syn me 2 metablhtes x, y. 
%H sinartisi f dinetai ws alfarithmitiko kai proairetika mporeite na dwsete ta pedia timwn gia ta x, y me th morfi [x_min,x_max, y_min, y_max] (metabliti pedia_timwn). 
%An den balete timh sta pedia_timwn tote sto grafima 0a deite tin syn otan ta x,y anikoyn sto [-pi,pi].
syms x y f;
f=sym(syn);
fx=diff(f,x,1);
fy=diff(f,y,1);
[a,b]=solve(fx==0,fy==0);
if nargin < 2
    pedia_timwn = [-pi,pi,-pi,pi];
end
ezsurf(f,pedia_timwn);
if size(a) > 0
    fxx=diff(f,x,2);
    fyy=diff(f,y,2);
    fxy=diff(diff(f,x),y);
    for i=1:size(a)
        vfxx=double(subs(subs(fxx,x,a(i)), y, b(i)));
        vfyy=double(subs(subs(fyy,x,a(i)), y, b(i)));
        vfxy=double(subs(subs(fxy,x,a(i)), y, b(i)));
        vfxy2=vfxy^2;
        vfxx_times_vfyy = vfxx*vfyy;
        if vfxx < 0 && vfyy < 0 && vfxx_times_vfyy > vfxy2
            sprintf('\nYparxei topiko megisto sto shmeio (%f, %f, %f)',double(a(i)), double(b(i)), double(subs(subs(f,x,a(i)), y, b(i))))
        elseif vfxx > 0 && vfyy > 0 && vfxx_times_vfyy > vfxy2
            sprintf('\nYparxei topiko elaxisto sto shmeio (%f, %f, %f)',double(a(i)), double(b(i)), double(subs(subs(f,x,a(i)), y, b(i))))
        elseif vfxx_times_vfyy < vfxy2
            sprintf('\nSagmatiko  shmeio (%f, %f, %f)',double(a(i)), double(b(i)), double(subs(subs(f,x,a(i)), y, b(i))))
        end
    end
else
    disp('Den yparxoun akrotata')
end

Πληκτρολογήστε ή επικολλήστε τον κώδικα σε ένα αρχείο akrotata.m , επιλέξτε τον φάκελο στον οποίο το έχετε αποθηκεύσει και για να το δοκιμάσετε εκτελέστε στο παράθυρο εντολών την παρακάτω εντολή:

>> akrotata('(x^2+4*y^2)*exp(1-x^2-y^2)',[-2,2,-2,2])

Η γραφική παράσταση φαίνεται στο παρακάτω σχήμα:

figure_akrotata

Ενώ η έξοδος της συνάρτησης φαίνεται στην εικόνα:

screenshot_octave_akrotata