Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function [xout, yout] = parabola(f, sstart, eend, e)
- x = [];
- x(1) = sstart;
- x(3) = eend;
- x(2) = (x(1) + x(3)) / 2;
- while true
- % Rjesavam sistem jednacina sa linsolve(), mada kontam da je bolje rucno
- mata = [
- 1 x(1) x(1)^2;
- 1 x(2) x(2)^2;
- 1 x(3) x(3)^2;
- ];
- matb = [f(x(1)); f(x(2)); f(x(3))];
- sol = linsolve(mata, matb);
- a = sol(1);
- b = sol(2);
- c = sol(3);
- % Racunam Xopt
- % y(x)' = 0 => b + 2cx = 0 => x = -b / 2c
- x(4) = -b/(2*c);
- xopt = x(4);
- % Izbacujem najgoru vrijednost i ostavljam tri najbolje
- [val index] = sort([f(x(1)) f(x(2)) f(x(3)) f(x(4))]);
- x = [x(index(1)) x(index(2)) x(index(3))];
- % Improvizujem do-while
- if abs(f(xopt) - (a + b*xopt + c*xopt^2)) < e
- break;
- end;
- end
- xout = xopt;
- yout = f(xopt);
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement