Advertisement
makispaiktis

Texnikes_Ergasia3_Thema1

Dec 14th, 2020 (edited)
840
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.73 KB | None | 0 0
  1. clear all
  2. clc
  3.  
  4. x10 = -1;
  5. x20 = -1;
  6. gamma = 0.1;
  7. maxKathodos(x10, x20, gamma);
  8.  
  9. function maxKathodos(x10, x20, gamma)
  10.    
  11.     % 1. Ορίζω το ε της συνθήκης τερματισμού ίσο με 0.01
  12.     epsilon = 0.01;
  13.     syms x1 x2
  14.     f = (x1^2 + x2^2) / 2;
  15.     F = matlabFunction(f);
  16.     klisi = gradient(f, [x1,x2]);
  17.     KLISI = matlabFunction(klisi);
  18.    
  19.     % 2. Ορίζω τις λίστες που θα τοποθετήσω τα x1i, x2i. Τις ονομάζω x1List,
  20.     % x2List, θα βάζω επίσης και τις τιμές της f και του μέτρου της κλίσης
  21.     % της σε άλλες 2 λίστες
  22.     k = 1;
  23.     x1List = [];             x2List = [];
  24.     x1List(1) = x10;          x2List(1) = x20;
  25.     fList = [];             normKlisisList = [];
  26.     fList(1) = subs(f, {x1,x2}, {x1List(length(x1List)), x2List(length(x2List))});
  27.     normKlisisList(1) = norm(subs(klisi, {x1,x2}, {x1List(length(x1List)), x2List(length(x2List))}));
  28.  
  29.    
  30.     while normKlisisList(length(normKlisisList)) > epsilon
  31.         k = k + 1;
  32.         dk = -KLISI(x1List(length(x1List)), x2List(length(x2List)))
  33.         % Το dk είναι 2*1 διάνυσμα, το 1ο στοιχείο του αφορά τον υπολογισμό
  34.         % του x1 και το 2ο τον υπολογισμό του x2
  35.         % xk+1 = xk + γk*dk = xk - γk * grad(f(xk))
  36.         x1List(k) = x1List(k-1) + gamma * dk(1);
  37.         x2List(k) = x2List(k-1) + gamma * dk(2);
  38.         fList(k) = F(x1List(length(x1List)), x2List(length(x2List)));
  39.         normKlisisList(k) = norm(subs(klisi, {x1,x2}, {x1List(length(x1List)), x2List(length(x2List))}));
  40.     end
  41.    
  42.    
  43.     x1List
  44.     x2List
  45.     fList
  46.     normKlisisList
  47.     k
  48.     % Τα τελευταία xk, yk κάθε λίστας τα ονομάζω εν συντομία xx και yy
  49.     display('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
  50.     display('~~~~~~~~ About the last found x1k (x1x1) and x2k (x2x2) ~~~~~~~~')
  51.     display('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
  52.     x1x1 = x1List(length(x1List))
  53.     x2x2 = x2List(length(x2List))
  54.     F_xx_yy = fList(length(fList))
  55.     NORM_KLISIS = normKlisisList(length(normKlisisList))
  56.     % Plots
  57.     figure(1);
  58.     plot(fList, 'x');
  59.     title("Values of f for every step k")
  60.     xlabel('Step k');
  61.     ylabel("f(x1k, x2k)");
  62.     figure(2);
  63.     plot(x1List, 'ro');
  64.     title("Spots x1 (red), x2 (blue)");
  65.     xlabel("Steps k");
  66.     ylabel("x1(k), x2(k)");
  67.     hold on
  68.     plot(x2List, 'bo')
  69.     title("Spots x1 (red), x2 (blue)");
  70.     xlabel("Steps k");
  71.     ylabel("x1(k), x2(k)");
  72.     display('**********************************************************')
  73. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement