Advertisement
lukicdarkoo

Metoda parabole - Minimum kod jednodimenzionih promjenjivih

Nov 21st, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 0.97 KB | None | 0 0
  1. function [xout, yout] = parabola(f, sstart, eend, e)
  2.     x = [];
  3.     x(1) = sstart;
  4.     x(3) = eend;
  5.     x(2) = (x(1) + x(3)) / 2;
  6.    
  7.     while true
  8.         % Rjesavam sistem jednacina sa linsolve(), mada kontam da je bolje rucno
  9.         mata = [
  10.             1 x(1) x(1)^2;
  11.             1 x(2) x(2)^2;
  12.             1 x(3) x(3)^2;
  13.         ];
  14.         matb = [f(x(1)); f(x(2)); f(x(3))];
  15.         sol = linsolve(mata, matb);
  16.         a = sol(1);
  17.         b = sol(2);
  18.         c = sol(3);
  19.  
  20.         % Racunam Xopt
  21.         % y(x)' = 0 => b + 2cx = 0 => x = -b / 2c
  22.         x(4) = -b/(2*c);
  23.         xopt = x(4);
  24.  
  25.         % Izbacujem najgoru vrijednost i ostavljam tri najbolje
  26.         [val index] = sort([f(x(1)) f(x(2)) f(x(3)) f(x(4))]);
  27.         x = [x(index(1)) x(index(2)) x(index(3))];
  28.        
  29.         % Improvizujem do-while
  30.         if abs(f(xopt) - (a + b*xopt + c*xopt^2)) < e
  31.             break;
  32.         end;
  33.     end
  34.    
  35.     xout = xopt;
  36.     yout = f(xopt);
  37. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement