Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
courses:a4b33opt:cviceni11 [2009/11/29 19:20] kucerad1 |
courses:a4b33opt:cviceni11 [2025/01/03 18:28] (aktuální) |
||
---|---|---|---|
Řádek 3: | Řádek 3: | ||
[[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é)]] | [[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í: | ||
+ | <code matlab> | ||
+ | |||
+ | 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<fb) | ||
+ | % min je mezi a, b | ||
+ | if (d<b) | ||
+ | % min je mezi a, b | ||
+ | delsiStart = d; | ||
+ | delsiEnd = b; | ||
+ | c = b; | ||
+ | b = d; | ||
+ | else | ||
+ | % min je mezi b, c | ||
+ | delsiStart = d; | ||
+ | delsiEnd = c; | ||
+ | a = b; | ||
+ | b = d; | ||
+ | end; | ||
+ | else | ||
+ | % min asi mezi a, d | ||
+ | if (d<b) | ||
+ | a = d; | ||
+ | delsiStart = b; | ||
+ | delsiEnd = c; | ||
+ | else | ||
+ | c = d; | ||
+ | delsiStart = b; | ||
+ | delsiEnd = a; | ||
+ | end; | ||
+ | end; | ||
+ | end; % while | ||
+ | figure; | ||
+ | hold on; | ||
+ | plot(xs,fx); | ||
+ | plot(a,subs(f,x,a),'ro'); | ||
+ | plot(b,subs(f,x,b),'go'); | ||
+ | plot(c,subs(f,x,c),'bo'); | ||
+ | plot(d,subs(f,x,d),'r+'); | ||
+ | hold off; | ||
+ | |||
+ | %% dohledat newtonovou metodou... | ||
+ | % POZOR! hledame koreny funkce po zderivovani (hledame minimum) | ||
+ | df = diff(f,x); % 1. derivace symbolicke funkce (zas symbolicka fce) | ||
+ | ddf = diff(df,x); % 2. derivace symbolicke funkce (zas symbolicka fce) | ||
+ | iter = 7; % kolik mame provest iteraci (7 je zvolene, muze byt mene) | ||
+ | resX = b; % zvolena 0. iterace... bod b je zjevne nejlepsi kandidat na odhad minima | ||
+ | for i=1:iter | ||
+ | resX = resX - subs(df,x,resX)/subs(ddf,x,resX); | ||
+ | end; | ||
+ | minimum = resX % min | ||
+ | </code> | ||