Advertisement
Guest User

Penalizacion externa

a guest
Mar 22nd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.16 KB | None | 0 0
  1. [x,f] = forPenExt([0,0],0.1,2,11,1*10^-6);
  2. function f = penExt(x, r, q)
  3. f = sin(x(2))*exp((1-cos(x(1)))^2) + cos(x(1))*exp((1-sin(x(2)))^2) + (x(1)-x(2))^2 ...
  4. +r*((max(0,(x(1)+5).^2+(x(2)+5).^2-25)).^q);
  5. end
  6.  
  7. function f = Func(x)
  8. f = sin(x(2))*exp(1-cos(x(1)))^2 + cos(x(1))*exp(1-sin(x(2)))^2;
  9. end
  10.  
  11. function [X,f] = forPenExt(X,r,q,c,e)
  12.     index = 1;
  13.     [x_int, fx_int] = fminunc(@(x)penExt(x,r,q),X);
  14.     disp("****************************************");
  15.     disp(index);
  16.     disp(X);
  17.     disp(x_int);
  18.     disp(r);
  19.     disp(fx_int);
  20.     rk_int = r;
  21.     x_old_int = X;
  22.     disp(norm(abs(x_int - x_old_int)))
  23.     disp("****************************************");
  24.     while(e < norm(abs(x_int - x_old_int)))
  25.         x_old_int = x_int;
  26.         rk_int = rk_int*c;
  27.         disp(index);
  28.         disp(x_old_int);
  29.         [x_int, fx_int] = fminunc(@(x)penExt(x,rk_int,q),x_old_int);
  30.         disp(x_int);
  31.         disp(rk_int)
  32.         disp(fx_int);
  33.         disp(norm(abs(x_int - x_old_int)))
  34.         disp("****************************************");
  35.         index = index+1;
  36.     end
  37.     X = x_int;
  38.     disp(Func(X));
  39.     f = Func(X);
  40. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement