Advertisement
Guest User

Untitled

a guest
May 24th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. function y = f_bar(x1,x2)
  2.  
  3. b = [1 1 1 1 1 1]';
  4. A = [0.4873 -0.8732
  5. 0.6072 0.7946
  6. 0.9880 -0.1546
  7. -0.2142 -0.9768
  8. -0.9871 -0.1601
  9. 0.9124 0.4093];
  10.  
  11. if sum(b-A*[x1;x2]<0) == 0
  12. y = -sum(log(b-A*[x1;x2]));
  13. else
  14. y =NaN;
  15. end
  16.  
  17. end
  18.  
  19. %%%% script
  20.  
  21. clear all; close all;
  22.  
  23. %consts
  24. V =[ 0.1562 0.9127 1.0338 0.8086 -1.3895 -0.8782
  25. -1.0580 -0.6358 0.1386 0.6406 2.3203 -0.8311];
  26. c = [ 1 -1]';
  27. b = [1 1 1 1 1 1]';
  28. A = [0.4873 -0.8732
  29. 0.6072 0.7946
  30. 0.9880 -0.1546
  31. -0.2142 -0.9768
  32. -0.9871 -0.1601
  33. 0.9124 0.4093];
  34.  
  35. %params
  36. x0 = [0 0]';
  37. %x0 = [-0.6 1.6]';
  38. Tinit = 0.2;
  39. m=6;
  40. bb=0.8;
  41. aa=0.5;
  42. gamma=2;
  43. eps = 10^-10;
  44.  
  45. %macros
  46. psi=@(x,t) t*c'*x - sum(log(b-A*x));
  47. grad=@(x,t) t*c +(A')*(1./(b-A*x));
  48. hessian=@(x) ((diag(1./(b-A*x))*A)')*(diag(1./(b-A*x))*A);
  49.  
  50.  
  51. t=Tinit;
  52. x=x0;
  53. X(:,1)= x0;
  54.  
  55. k=1;
  56. while(m/t>eps)
  57. s=1;
  58. while psi( x-s*(hessian(x)^-1)*grad(x,t),t ) >= psi(x, t)-s*aa*grad(x, t)'*(hessian(x)^-1)*grad(x,t)
  59. s = bb*s;
  60. end
  61. x = x-s*(hessian(x)^-1)*grad(x,t);
  62. t=t*gamma;
  63.  
  64. k=k+1;
  65. X(:,k)=x;
  66. end
  67.  
  68. Xlin= linprog(c,A,b);
  69.  
  70. %Display results
  71. disp("*********************************************")
  72. disp("Rozwiazanie:")
  73. disp("Parametry: gamma: " + gamma + ", beta: " + bb + ", alfa: " + aa + ", eps: " + eps + ", t_init: " + Tinit + ", t_koncowe: " + t)
  74. disp("Punkt startowy: [" + x0(1)+","+x0(2) + "]")
  75. disp("Liczba iteracji: " + k)
  76. disp("Punkt koncowy: [" + X(1,k)+","+X(2,k) + "]")
  77. disp("Rozw linprog: [" + Xlin(1,1)+","+Xlin(2,1) + "]")
  78.  
  79. %Plots
  80. x1 = -2:0.01:1.5; x2 = -1.5:0.01:3;
  81. [X1,X2] = meshgrid(x1,x2);
  82. Z=arrayfun(@f_bar, X1, X2);
  83. values = arrayfun(@f_bar, X(1,:), X(2,:));
  84. curves = values(1,2:2:10);
  85.  
  86. figure
  87. fill(V(1,:), V(2,:), 'g'); hold on;
  88. %contour(X1, X2, Z, curves, 'ShowText', 'on')
  89. contour(X1, X2, Z, [-0.6 0.12 1.24], 'ShowText', 'on')
  90.  
  91. for k=1:size(X,2)
  92. hold on
  93. plot(X(1,k), X(2,k), 'or')
  94. end
  95. title('Wykres obszaru dopuszczalnego i punktów centralnych.')
  96. xlabel('X1')
  97. ylabel('X2')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement