Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
courses:a4b33opt:cviceni4 [2009/10/12 14:42] petul.ka created |
courses:a4b33opt:cviceni4 [2025/01/03 18:28] (aktuální) |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
===== Cvičení 4 ===== | ===== Cvičení 4 ===== | ||
+ | ==== Uloha 1 ==== | ||
+ | Soubor pal3_H.m (samostatne definova H(x,e)) | ||
+ | --- //[[[email protected]|Marek Sacha]] 2009/10/13 01:06// | ||
+ | <code matlab> | ||
+ | function [ h ] = pal3_H( x , e ) | ||
+ | % [ h ] = pal3_H( x , e ) | ||
+ | % | ||
+ | % Computes value of function H(x,e) | ||
+ | % x is a column vector | ||
+ | % e is a constant | ||
+ | % | ||
+ | % Author: Marek Sacha [email protected] | ||
+ | % Date: 12.10.2009 | ||
+ | [ xw xh ] = size(x); | ||
+ | temp_e = e*-1*ones(xw,xh); | ||
+ | temp = [ zeros(xw,xh) (x+temp_e) ((-1*x)+temp_e) ]; | ||
+ | % do not forget to count max in second dimension | ||
+ | h = max(temp,[],2); | ||
+ | </code> | ||
+ | |||
+ | Uloha 1 | ||
+ | --- //[[[email protected]|Marek Sacha]] 2009/10/13 01:06// | ||
+ | <code matlab> | ||
+ | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
+ | % Author: Marek Sacha <[email protected]> % | ||
+ | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
+ | |||
+ | clear | ||
+ | clc | ||
+ | close all | ||
+ | |||
+ | % initialize e | ||
+ | e = 0.3; | ||
+ | % initialize x | ||
+ | x = -1 : 0.01 : 1; | ||
+ | % function works vith column vector only | ||
+ | x = x'; | ||
+ | y = pal3_H(x,e); | ||
+ | plot(x,y,'r'); | ||
+ | xlabel('x ') | ||
+ | ylabel('H(x,e)'); | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Uloha 2 ==== | ||
+ | Vykresli i graf s ruznymivysledky aproximacnich primkek pro ruzne tolerance chyby e (0.001, 0.01, 0.1 0.5 ) | ||
+ | |||
+ | Odvozeni prevodu ulohy na LP viz scan (trik lambda = lambda1 + lambda2 + .... + lambda n): | ||
+ | |||
+ | {{:courses:a4b33opt:opt_cv3_odvozeni_uloha_2_opravene.jpg|}} | ||
+ | |||
+ | --- //[[[email protected]|Marek Sacha]] 2009/10/13 00:48// | ||
+ | <code> | ||
+ | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
+ | % Author: Marek Sacha <[email protected]> % | ||
+ | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
+ | |||
+ | clear all | ||
+ | clc | ||
+ | load data1.mat | ||
+ | |||
+ | % initialize e, test various cases | ||
+ | E = [ 0.001 0.01 0.1 0.5 ]; | ||
+ | |||
+ | % Colours for different cases | ||
+ | C = [ 'r' 'g' 'b' 'c' ]; | ||
+ | |||
+ | hold on; | ||
+ | |||
+ | for j=1:4 | ||
+ | |||
+ | % Initialize e | ||
+ | | ||
+ | e=E(j); | ||
+ | |||
+ | [ xh xw ] = size(x); | ||
+ | % Construct inequalities matrix | ||
+ | % a b l1 l2 ... ln | ||
+ | % ++++++++++++++++++++++++ | ||
+ | % | x1 1 -1 0 ... 0 | | ||
+ | % | x2 1 0 -1 ... 0 | | ||
+ | % ... | ||
+ | % | xn 1 0 0 ... -1 | | ||
+ | % A = |-x1 -1 -1 0 ... 0 | | ||
+ | % |-x2 -1 0 -1 ... 0 | | ||
+ | % ... | ||
+ | % |-xn -1 0 0 ... -1 | | ||
+ | % | 0 0 -1 0 ... 0 | | ||
+ | % | 0 0 0 -1 ... 0 | | ||
+ | % ... | ||
+ | % | 0 0 0 0 ... -1 | | ||
+ | % ++++++++++++++++++++++++ | ||
+ | % | ||
+ | A = [ x ones(xh,1) -1*eye(xh); -1*x -1*ones(xh,1) -1*eye(xh); zeros(xh,1) zeros(xh,1) -1*eye(xh) ]; | ||
+ | % Construct right side | ||
+ | % | e + y | | ||
+ | % b = | e - y | | ||
+ | % | 0 | | ||
+ | b = [ (e*ones(xh,1))+y; (e*ones(xh,1))-y; zeros(xh,1) ]; | ||
+ | % Construct function to be minimized | ||
+ | % f = 0a + 0b + lambda1 + lambda2 + lambda3 + ... + lambdan | ||
+ | f = [ 0 ; 0; ones(xh,1)]; | ||
+ | % Run linprog | ||
+ | o = linprog(f,A,b); | ||
+ | % o = [ a b lambda1 lambda2 ... lambdan ]; | ||
+ | % Print separate points | ||
+ | plot(x,y,'y.'); | ||
+ | % Approximation line | ||
+ | plot(x,x*o(1)+o(2),C(j)); | ||
+ | | ||
+ | |||
+ | end | ||
+ | |||
+ | hold off; | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||