makispaiktis

Texnikes_Ergasia2_Thema3_ZitoumenoA

Dec 1st, 2020
575
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. clear all
  2. clc
  3.  
  4.  
  5. syms x y
  6. f = x^3 * exp(-x^2-y^4)
  7. klisi = gradient(f, [x,y])
  8. essianos = jacobian(klisi)
  9. dk = - inv(essianos) * klisi
  10. DK = matlabFunction(dk);
  11.  
  12. elaxistoMeGammaStathero(-1, -1, 0.2, 0);
  13. elaxistoMeGammaStathero(-1, -1, 0.5, 1);
  14.  
  15. function elaxistoMeGammaStathero(x0, y0, gamma, flag)
  16.    
  17.     % 1. Ορίζω το ε της συνθήκης τερματισμού ως το 1/100 για παράδειγμα
  18.     % της τιμής που δίνω στο γκ = σταθερό εδώ
  19.     epsilon = gamma / 100;
  20.     syms x y
  21.     f = x^3 * exp(-x^2-y^4);
  22.     klisi = gradient(f, [x,y]);
  23.     essianos = jacobian(klisi)
  24.     dk = - inv(essianos) * klisi
  25.     DK = matlabFunction(dk);
  26.    
  27.     % 2. Ορίζω τις λίστες που θα τοποθετήσω τα xi, yi. Τις ονομάζω xList,
  28.     % yList, θα βάζω επίσης και τις τιμές της f και του μέτρου της κλίσης
  29.     % της σε άλλες 2 λίστες
  30.     k = 1;
  31.     xList = [];             yList = [];
  32.     xList(1) = x0;          yList(1) = y0;
  33.     fList = [];             normKlisisList = [];
  34.     fList(1) = subs(f, {x,y}, {xList(length(xList)), yList(length(yList))});
  35.     normKlisisList(1) = norm(subs(klisi, {x,y}, {xList(length(xList)), yList(length(yList))}));
  36.  
  37.    
  38.     while normKlisisList(length(normKlisisList)) > epsilon
  39.         k = k + 1;
  40.         % dk = -subs(klisi, {x,y}, {xList(length(xList)), yList(length(yList))});
  41.         % Το dk είναι 2*1 διάνυσμα, το 1ο στοιχείο του αφορά τον υπολογισμό
  42.         % του x και το 2ο τον υπολογισμό του y
  43.         % xk+1 = xk + γk*dk = xk - γk * grad(f(xk))
  44.         dkVector = DK(xList(k-1), yList(k-1));          % A 2x1 vector
  45.         xList(k) = xList(k-1) + gamma * dkVector(1);
  46.         yList(k) = yList(k-1) + gamma * dkVector(2);
  47.         fList(k) = subs(f, {x,y}, {xList(length(xList)), yList(length(yList))});
  48.         normKlisisList(k) = norm(subs(klisi, {x,y}, {xList(length(xList)), yList(length(yList))}));
  49.     end
  50.    
  51.    
  52.     xList
  53.     yList
  54.     fList
  55.     normKlisisList
  56.     k
  57.     % Τα τελευταία xk, yk κάθε λίστας τα ονομάζω εν συντομία xx και yy
  58.     display('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
  59.     display('~~~~~~~~ About the last found xk (xx) and yk (yy) ~~~~~~~~')
  60.     display('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
  61.     xx = xList(length(xList))
  62.     yy = yList(length(yList))
  63.     F_xx_yy = fList(length(fList))
  64.     NORM_KLISIS = normKlisisList(length(normKlisisList))
  65.     if flag == 0
  66.         plot(fList, 'ro');
  67.         title('Red for gamma = 0.2, blue for gamma = 0.5');
  68.         xlabel('Steps k');
  69.         ylabel('Values of f');
  70.         hold on
  71.     else
  72.         plot(fList, 'bx');
  73.         title('Red for gamma = 0.2, blue for gamma = 0.5');
  74.         xlabel('Steps k');
  75.         ylabel('Values of f');
  76.         hold on
  77.     end
  78.     display('**********************************************************')
  79. end
RAW Paste Data