===== Cvičení 11 ===== === Minimalizace funkcí jedné proměnné ===== [[http://cw.felk.cvut.cz/lib/exe/fetch.php/courses/a4b33opt/cviceni/cviceni-linesearch.pdf?id=courses%3Aa4b33opt%3Acviceni%3Astart&cache=cache|Zadání (Minimalizace funkcí jedné proměnné)]] Návrh řešení: clc; clear; close all; %% LineSearch %% Newtonovou metodou najdete oba koreny rce x^2 = 2 % f(x) = x^2 - 2; % df(x)/dx = 2*x; syms x; % budeme pouzivat symbolickou promenou x f = x^2 - 2; % symbolicka funkce df = diff(f,x); % derivace symbolicke funkce (zas symbolicka fce) iteraci = 7; % kolik mame provest iteraci (7 je zvolene, muze byt mene) resX = 2; % zvolena 0. iterace... for i=1:iteraci resX = resX - subs(f,x,resX)/subs(df,x,resX); end; x1 = resX % 1. koren resX = -2; % zvolena 0. iterace for i=1:iteraci resX = resX - subs(f,x,resX)/subs(df,x,resX); end; x2 = resX % 2. koren %% Najdete minimum priblizne metodou zlateho rezu clear; % interval interval = [0 5]; delka = interval(2) - interval(1); syms x; f = cos(x + 1) + 0.05.*(x - 2).^2; w = (3 - 5^(0.5))/2; % prvotni rozlozeni a,b,c a = interval(1); b = a + w * delka; c = interval(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % MELO BY SE OSETRIT, ABY PLATILO: % % a < b < c; f(a) > f(b) < f(c) % % PRO ZADANY PRIKLAD TO JE SPLNENO, ALE OBECNE TO BYT NEMUSI % nastavime zacatek a konec vetsiho ze dvou intervalu delsiStart = b; delsiEnd = c; iteraci = 0; % cislo iterace / na konci udava, kolik jich bylo provedeno xs = (interval(1):0.01:interval(2)); fx = subs(f,x,xs); treshold = 0.001; % ukoncit, kdyz delka intervalu je mensi nez 0.001 while (c-a>treshold) iteraci = 1 + iteraci; % zvolime d d = delsiStart + w*(delsiEnd-delsiStart); fa = subs(f,x,a); fb = subs(f,x,b); fc = subs(f,x,c); fd = subs(f,x,d); if (fd ~~DISCUSSION~~