Advertisement
makispaiktis

Texnikes_Ergasia1_Thema4_Zitoumeno1

Nov 16th, 2020 (edited)
1,156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.56 KB | None | 0 0
  1. clear all
  2. clc
  3.  
  4. % Ο πίνακας μου θα περιέχει διάφορα l ξεκινώντας από 0.001 ως 0.05 με βήμα
  5. % 0.001 = 1/1000
  6. for index = 1:1:50
  7.     l(index) = index / 1000;
  8. end
  9.  
  10. calculationsList = [];
  11. for index = 1:length(l)
  12.     calculationsList(index) = numOfCalculations(l(index));
  13. end
  14.  
  15. plot([1:1:50], calculationsList, 'o');
  16. title("f1 = (x-2)^2 - sin(x+3), l = {1,..,50}/1000");
  17. xlabel("l / 1000");
  18. ylabel("Number of derivative calcutaions needed");
  19.  
  20. function calculations = numOfCalculations(l)
  21.     syms x
  22.     f1 = (x-2)^2 - sin(x+3);
  23.     df1 = diff(f1, 'x');
  24.     akro1 = 2;      akro2 = 5;
  25.     akra1 = [];     akra2 = [];
  26.     counter = 0;
  27.     calculations = 0;
  28.    
  29.     while akro2 - akro1 > l
  30.         counter = counter + 1;
  31.         akra1(counter) = akro1;
  32.         akra2(counter) = akro2;
  33.        
  34.         kentro = (akro1 + akro2) / 2;
  35.         paragwgos = subs(df1, kentro);
  36.         calculations = calculations + 1;
  37.         if paragwgos > 0
  38.             % Το ελάχιστο εμφανίζεται αριστερότερα του xk = kentro
  39.             % Επομένως, το αριστερό άκρο παραμ΄νει και στο νέο διάστημα
  40.             % όμως αλλάζει το δεξιό άκρο και γίνεται ίσο με xk = kentro
  41.             akro2 = kentro;
  42.         else
  43.             % Ελάχιστο δεξιότερα του κέντρο, αλλάζω το άκρο 1
  44.             akro1 = kentro;
  45.         end
  46.     end
  47.     akra1
  48.     akra2
  49.     calculations
  50. end
  51.  
  52.  
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement