Advertisement
makispaiktis

Texnikes_Ergasia2_Thema2_ZitoumenoA V2

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