Advertisement
makispaiktis

Texnikes_Ergasia1_Thema2_Zitoumeno2

Nov 17th, 2020 (edited)
1,013
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.39 KB | None | 0 0
  1. clear all
  2. clc
  3.  
  4. % Ο πίνακας μου θα περιέχει τις 3 εξής τιμές για το l
  5. l(1) = 0.0001;
  6. l(2) = 0.001;
  7. l(3) = 0.01;
  8.  
  9. for index = 1:length(l)
  10.     plotAkrwn(l(index), index);
  11. end
  12.  
  13.  
  14. function akra = plotAkrwn(l, index)
  15.     l
  16.     syms x
  17.     f1 = (x-2)^2-sin(x+3);
  18.     akro1 = 2;      akro2 = 5;      gamma = 0.618;
  19.     x1 = akro1;     x2 = akro2;    
  20.     % Τα παρακάτω είναι flag που μου λένε κάθε φορά ποιο εκ των x1, x2
  21.     % έγινε άκρο προηγουμένως
  22.     egineAkroToX1 = -1000;     egineAkroToX2 = -1000;
  23.     akra1 = [];     akra2 = [];
  24.     counter = 0;
  25.     calculations = 0;
  26.    
  27.     while akro2 - akro1 > l
  28.        
  29.         counter = counter + 1;      % Μετράει τα steps k
  30.         % Στην 1η και μόνο επανάληψη απαιτείται ο υπολογισμός 2 τιμών της
  31.         % δεδομένης συνάρτησης, γιατί μετά το ένα εκ των 2 xk γίνεται άκρο
  32.         % του νέου διαστήματος και επομένως κάνουμε έναν νέο υπολογισμό
  33.         % **************** COUNTER = 1 ****************
  34.         if counter == 1
  35.             x1 = akro1 + (1-gamma) * (akro2 - akro1);
  36.             x2 = akro1 + gamma * (akro2 - akro1);
  37.             value1 = subs(f1, x1);
  38.             value2 = subs(f1, x2);
  39.             calculations = calculations + 2;
  40.             if value1 < value2
  41.                 ThaGineiAkroToX2 = 1;
  42.                 ThaGineiAkroToX1 = 0;
  43.                 % ak+1 = ak και bk+1 = x2k, αλλάζει το δεξιό μόνο άκρο
  44.                 % Επίσης για την επόμενη επανάληψη, ξέρω ότι
  45.                 % x2,k+1 = x1,k (το νέο x2 ισούται με το πριν x1 και βάζουμε x1,
  46.                 % γιατί το x2 "έχει χρησιμοποιηθεί ως νέο άκρο)
  47.                 % Η τιμή του νέου x1 θα καθοριστεί μετά
  48.             else
  49.                 % Νέο διάστημα ----> [x1k, bk]
  50.                 ThaGineiAkroToX1 = 1;
  51.                 ThaGineiAkroToX2 = 0;
  52.             end
  53.        
  54.         % **************** COUNTER > 1 ****************
  55.         elseif counter > 1
  56.             % Ουσιαστικά εδώ που το step k > 1, θα έχω έναν νέο υπολογισμό
  57.             % της συνάρτησης μου
  58.             if ThaGineiAkroToX2 == 1
  59.                 % Το x1 απαιτεί νέο υπολογιμό
  60.                 akro2 = x2;
  61.                 x2 = x1;
  62.                 x1 = akro1 + (1-gamma)*(akro2-akro1);
  63.                 calculations = calculations + 1;
  64.                 value1 = subs(f1, x1);
  65.                 value2 = subs(f1, x2);
  66.                 if value1 < value2
  67.                     ThaGineiAkroToX2 = 1;
  68.                     ThaGineiAkroToX1 = 0;
  69.                 else
  70.                     ThaGineiAkroToX1 = 1;
  71.                     ThaGineiAkroToX2 = 0;
  72.                 end
  73.                
  74.             elseif ThaGineiAkroToX1 == 1
  75.                 akro1 = x1;
  76.                 x1 = x2;
  77.                 x2 = akro1 + gamma*(akro2-akro1);
  78.                 calculations = calculations + 1;
  79.                 value1 = subs(f1, x1);
  80.                 value2 = subs(f1, x2);
  81.                 if value1 < value2
  82.                     ThaGineiAkroToX2 = 1;
  83.                     ThaGineiAkroToX1 = 0;
  84.                 else
  85.                     ThaGineiAkroToX1 = 1;
  86.                     ThaGineiAkroToX2 = 0;
  87.                 end
  88.             end
  89.            
  90.         end
  91.         akra1(counter) = akro1;
  92.         akra2(counter) = akro2;
  93.         % akro1
  94.         % akro2
  95.         % x1
  96.         % x2
  97.        
  98.        
  99.     end      % End of while-loop
  100.    
  101.     akra1
  102.     akra2
  103.     % ΠΛΟΤΑΡΙΣΜΑ
  104.     if index == 1
  105.         plot(akra1, 'ro');
  106.         hold on
  107.         plot(akra2, 'bo');
  108.         hold on
  109.     elseif index == 2
  110.         plot(akra1, 'r^');
  111.         hold on
  112.         plot(akra2, 'b^');
  113.         hold on
  114.     else
  115.         plot(akra1, 'rx');
  116.         hold on
  117.         plot(akra2, 'bx');
  118.         hold on
  119.     end
  120.     title('f1: Edges Ak, Bk for every step k');
  121.     xlabel('Steps k');
  122.     ylabel('Ak (red), Bk (blue)');
  123.    
  124.     display('*************************************************');
  125.     display(' ');
  126. end
  127.  
  128.  
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement