Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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>​
  
  
courses/a4b33opt/cviceni11.1259518856.txt.gz · Poslední úprava: 2025/01/03 18:23 (upraveno mimo DokuWiki)
Nahoru
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0