Advertisement
makispaiktis

Texnikes_Ergasia1_Thema3_Zitoumeno1

Nov 17th, 2020 (edited)
1,055
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.88 KB | None | 0 0
  1. clear all
  2. clc
  3.  
  4. % Θα φτιάξω έναν πίνακα με διάφορες τιμές l από 0.001 ως 0.05,με βήμα 0.001
  5. % Φυσικά και για κάθε l, θα έχω ένα n ---> n-2 "βήματα"/επαναλήψεις για να
  6. % είναι θετικό και το όρισμα της F(n-k-1). Επίσης, θα έχω n-1 υπολογ. της f
  7. l = [];
  8. calculationsList = [];
  9. akro1 = 2;
  10. akro2 = 5;
  11. for i=1:1:50
  12.     l(i) = i/1000;
  13.     calcs = numOfCalculations(l(i), akro1, akro2);
  14.     calculationsList(i) = calcs;
  15. end
  16.  
  17. plot([1:1:50], calculationsList, 'o');
  18. title("f1: Number of calculations needed");
  19. xlabel("Precision l (*1/1000)");
  20. ylabel("Calculations for this l");
  21.  
  22.  
  23.  
  24. % ********************************************
  25. % ************** Main Function ***************
  26. % ********************************************
  27. function calculations = numOfCalculations(l, akro1, akro2)
  28.     l
  29.     n = findN(l, akro1, akro2)
  30.     syms x
  31.     f = (x-2)^2-sin(x+3);
  32.     a = [];         b = [];             % Οι λίστες με τα άκρα ak, bk
  33.     x1 = [];            x2 = [];
  34.     calculations = 0;
  35.     bima2 = -1000;      bima3 = -1000;
  36.    
  37.     for k = 1:1:n-2
  38.         a(k) = akro1;
  39.         b(k) = akro2;
  40.         x1(k) = a(k) + F(n-k-1)/F(n-k+1) * (b(k)-a(k));
  41.         x2(k) = a(k) + F(n-k)/F(n-k+1) * (b(k)-a(k));
  42.        
  43.         if k == 1
  44.             value1 = subs(f, x1(k));
  45.             value2 = subs(f, x2(k));
  46.             calculations = calculations + 2;
  47.             if value1 > value2
  48.                 bima2 = 1;
  49.                 bima3 = 0;
  50.             else
  51.                 bima3 = 1;
  52.                 bima2 = 0;
  53.             end
  54.            
  55.         elseif k > 1
  56.             if bima2 == 1
  57.                 % Σημαίνει ότι akro1,neo = x1,prin, .....
  58.                 a(k) = x1(k-1);
  59.                 b(k) = b(k-1);
  60.                 x1(k) = x2(k-1);
  61.                 x2(k) = a(k) + F(n-k)/F(n-k+1) * (b(k)-a(k));
  62.                 calculations = calculations + 1;
  63.                 value1 = subs(f, x1(k));
  64.                 value2 = subs(f, x2(k));
  65.                 if value1 > value2
  66.                     bima2 = 1;
  67.                     bima3 = 0;
  68.                 else
  69.                     bima3 = 1;
  70.                     bima2 = 0;
  71.                 end
  72.             elseif bima3 == 1
  73.                 a(k) = a(k-1);
  74.                 b(k) = x2(k-1);
  75.                 x1(k) = a(k) + F(n-k-1)/F(n-k+1) * (b(k)-a(k));
  76.                 x2(k) = x1(k-1);
  77.                 calculations = calculations + 1;
  78.                 value1 = subs(f, x1(k));
  79.                 value2 = subs(f, x2(k));
  80.                 if value1 > value2
  81.                     bima2 = 1;
  82.                     bima3 = 0;
  83.                 else
  84.                     bima3 = 1;
  85.                     bima2 = 0;
  86.                 end
  87.             end
  88.         end
  89.         % k
  90.         % a(k)
  91.         % b(k)
  92.         % x1(k)
  93.         % x2(k)
  94.        
  95.     end         % End of for-loop (k=1,2,3,....,n-2)
  96.     a
  97.     b
  98.     x1
  99.     x2
  100.     calculations
  101.     display('***********************************************');
  102.     display(' ');
  103. end
  104.  
  105.  
  106.  
  107.  
  108. % ********************************************
  109. % **************** Function 1 ****************
  110. % ********************************************
  111. function answer = F(n)
  112.     if n == 0
  113.         answer = 1;
  114.     elseif n == 1
  115.         answer = 1;
  116.     elseif n == 2
  117.         answer = 2;
  118.     else
  119.         Fibo(1) = 1;
  120.         Fibo(2) = 2;
  121.         for i = 3:1:n
  122.             Fibo(i) = Fibo(i-1) + Fibo(i-2);
  123.         end
  124.         answer = Fibo(n);
  125.     end    
  126. end
  127.  
  128.  
  129. % ********************************************
  130. % **************** Function 2 ****************
  131. % ********************************************
  132. function result = findN(l, akro1, akro2)
  133.     orio = (akro2 - akro1) / l;
  134.     n = 2;
  135.     while F(n) <= orio
  136.         n = n+1;
  137.     end
  138.     result = n;
  139. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement