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:cviceni5 [2009/10/22 21:41]
malejpavouk
courses:a4b33opt:cviceni5 [2025/01/03 18:28] (aktuální)
Řádek 1: Řádek 1:
 ===== Cvičení 5 ===== ===== Cvičení 5 =====
-<​code>​+<​code ​matlab>
 %figure; %figure;
 hold on; hold on;
Řádek 13: Řádek 13:
  
 %body v normalnim rozdeleni %body v normalnim rozdeleni
-epsilon = 0.2;+epsilon = 0.05;
  
 v = randn(2, 100); v = randn(2, 100);
Řádek 58: Řádek 58:
 AD = A'; AD = A';
 bD = f'; bD = f';
-v2 = linprog(fD, AD, bD,[],[],​[],​zeros(length(b),​ 1));+ 
 +AeqD = (A'); %tady skromnej trik...nema to bejt omezeny na nerovnost, ale na rovnost.... 
 +AeqD = AeqD(1:​2,:​);​ %protoze jsem linej psat znova ty nerovnice (aD, bD), tak je tam necham, jak jsou. 
 +beqD = f'; %Protoze je rovnost tvrdsi omezeni, tak se jejim pridanim nic neporusi a docilim 
 +beqD = beqD(1:2); %stejnych vlasnosti, jako kdyby aD, bD ony dve rovnice nebyly a byly jen v AeqD a beqD 
 + 
 +v2 = linprog(fD, AD, bD,AeqD,beqD,​[],​zeros(length(b),​ 1));
 SecondaryOptimum = -fD*v2 SecondaryOptimum = -fD*v2
  
Řádek 68: Řádek 74:
 hold off; hold off;
 </​code>​ </​code>​
 +
 +==== Bonus 1 ====
 + --- //​[[[email protected]|Marek Sacha]] 2009/10/29 17:16//
 +<code matlab>
 +clear
 +clc
 +load data1.mat
 +% Construct inequalities matrix
 +%       | x   ​1 ​ -1 |
 +% A =   ​|-x ​ -1  -1 |
 +
 +A = [ x ones(50,1) -1*ones(50,​1);​ -1*x -1*ones(50,​1) -1*ones(50,​1) ];
 +% Construct right side
 +%     ​| ​ y |
 +% b = | -y |
 +b = [ y; -y ];
 +% Construct function to be minimized
 +% f = 0x + 0y + lambda
 +f = [ 0; 0; 1];
 +% Run linprog
 +o = linprog(f,​A,​b);​
 +% o = [ a b lambda ];
 +
 +
 +% Modify linprog parameters for secondary problem ​   ​
 +% Run linprog
 +f2 = b';
 +A2 = -1*A';
 +b2 = f';
 +
 +[ awh a2w ] = size(A2);
 +[ f2h f2w ] = size(f2);
 +lb = zeros(f2h,​f2w);​
 +% Dont forget to add equality conditions (for first two rows of A2,b2)
 +% - a, b are from '​R'​ not R+
 +o2 = linprog(f2,​A2,​b2,​A2(1:​2,​[1:​a2w]),​b2(1:​2),​lb);​
 +
 +
 +% Verify results
 +result_prim = (-f)'​*o
 +result_sec = b'*o2
 +
 +
 +hold on;
 +% Print separate points
 +plot(x,​y,'​y.'​);​
 +% Approximation line
 +plot(x,​x*o(1)+o(2),'​r'​);​
 +% Top border
 +plot(x,​x*o(1)+o(2)+o(3),'​g'​);​
 +% Bottom border
 +plot(x,​x*o(1)+o(2)-o(3),'​g'​);​
 +hold off;
 +
 +% New Plot
 +figure;
 +
 +% Visualize dual
 +plot([x ; x],[y ; -y].*o2,'​ro'​);​
 +</​code>​
 +
 +==== Bonus 2 ====
 + --- //​[[[email protected]|Marek Sacha]] 2009/10/29 17:16//
 +<code matlab>
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +% Author: Marek Sacha <​[email protected]>​ %
 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +clear all
 +clc
 +
 +numberOfPoints = [];
 +primal = [];
 +dual = [];
 +
 +options = optimset('​LargeScale','​off','​Simplex','​on','​MaxIter',​1e5);​
 + 
 +for j=1:4
 +    ​
 +    t = j*100; ​   ​
 +    realloc = [ numberOfPoints t ];
 +    numberOfPoints = realloc;
 +    ​
 +    % initialize random matrix
 +    r = rand(t,2);
 +    x = r(:,1);
 +    y = r(:,2);
 +
 +    % Initialize e
 +
 +
 +    e = 0.05;
 +
 +    [ 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 |
 +    %       ...
 +    %       | 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
 +    tic;
 +    o = linprog(f,​A,​b,​[],​[],​[],​[],​[],​options);​
 +    time = toc;
 +    ​
 +    realloc = [ primal time ];
 +    primal = realloc;
 +
 +    % Modify linprog parameters for secondary problem ​   ​
 +    f2 = b';
 +    A2 = -1*A';
 +    b2 = f';
 +
 +    [ awh a2w ] = size(A2);
 +    [ f2h f2w ] = size(f2);
 +    lb = zeros(f2h,​f2w);​
 +    % Dont forget to add equality conditions (for first two rows of A2,b2)
 +    % - a, b are from '​R'​ not R+
 +    ​
 +    tic;
 +    o2 = linprog(f2,​A2,​b2,​A2(1:​2,​[1:​a2w]),​b2(1:​2),​lb,​[],​[],​options);​
 +    time = toc;
 +    ​
 +    realloc = [ dual time ];
 +    dual = realloc;
 +
 +    % Verify results
 +    result_prim = (-f)'​*o;​
 +    result_sec = b'*o2;
 +
 +end
 +
 +hold on;
 +plot(numberOfPoints,​primal,'​g-'​);​
 +plot(numberOfPoints,​dual,'​r-'​);​
 +hold off;
 +
 +</​code>​
 +
 ~~DISCUSSION~~ ~~DISCUSSION~~
  
  
courses/a4b33opt/cviceni5.1256240489.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