📄 init_bound_resect.m
字号:
function [limlist, feas_status] = init_bound_resect(xm, Xlist, nbrpoints, beta, m, n, maxdepth, flag) feas_status = 1; A = sparse(zeros(0,m*n)); Al = sparse(zeros(0,m*n)); A_f = sparse(zeros(0,m*n)); c = sparse(zeros(0,1)); cl = sparse(zeros(0,1)); c_f = sparse(zeros(0,1)); A = []; c = []; Al = []; cl = []; clear K; K.q = []; K.f = 0; K.l = 0; x = Xlist(:,1)'; c_f = 1; A_f = [zeros(1,(m-1)*n), x]; K.f = K.f + 1; %keyboard; for j = 1:m-1 umin(j) = min(xm(j,:)); umax(j) = max(xm(j,:)); end uminb = max(0,umin-(umax-umin)/5); umaxb = umax+(umax-umin)/5; for i = 1:nbrpoints x = Xlist(:,i)'; Atmp1 = []; Atmp2 = []; ctmp1 = []; ctmp2 = []; for j = 1:m-1 Atmp1(j,(j-1)*n+1:j*n) = -x; Atmp1(j,(m-1)*n+1:m*n) = uminb(j)*x; ctmp1(j,1) = 0; Atmp2(j,(j-1)*n+1:j*n) = x; Atmp2(j,(m-1)*n+1:m*n) = -umaxb(j)*x; ctmp2(j,1) = 0; end Al = [Al; Atmp1; Atmp2]; cl = [cl; ctmp1; ctmp2]; K.l = K.l + length([ctmp1;ctmp2]); end %keyboard; Atmp = []; ctmp = []; for i = 2:nbrpoints x = Xlist(:,i)'; ctmp(i-1,1) = maxdepth; Atmp(i-1,(m-1)*n+1:m*n) = x; end Al = [Al; Atmp]; cl = [cl; ctmp]; K.l = K.l + nbrpoints-1; %keyboard; i = 1; Atmp = zeros(m,m*n); ctmp = zeros(m,1); x = Xlist(:,i)'; u = xm(:,i)'; ctmp(1,1) = beta; for j = 1:m-1 Atmp(j+1,(j-1)*n+1:j*n) = x; ctmp(j+1,1) = u(j); end A = [A; Atmp]; c = [c; ctmp]; K.q = [K.q, m]; for i = 2:nbrpoints Atmp = zeros(m,m*n); ctmp = zeros(m,1); x = Xlist(:,i)'; u = xm(:,i)'; Atmp(1,(m-1)*n+1:m*n) = -beta*x; for j = 1:m-1 Atmp(j+1,(j-1)*n+1:j*n) = x; Atmp(j+1,(m-1)*n+1:m*n) = -u(j)*x; end A = [A; Atmp]; c = [c; ctmp]; K.q = [K.q, m]; end A = [A_f; Al; A]; c = [c_f; cl; c]; limlist = zeros(n+1,2); limlist(1,:) = [1,1]; if flag == 1 pars1.fid = 0; pars1.eps = 0; [x1,y1,info1] = sedumi(A,0,c,K,pars1); if info1.dinf == 1 || info1.numerr == 2 feas_status = 0; end limlist(2:n,:) = zeros(n-1,2); return; end for i = 2:n+1 b = [zeros((m-1)*n,1); Xlist(:,i)]; pars1 = []; pars1.fid = 0; pars1.eps = 0; [x1,y1,info1] = sedumi(A, -b, c, K, pars1); %info1 limlist(i,1) = b'*y1; if info1.dinf == 1 || info1.numerr == 2 % keyboard; feas_status = 0; limlist(2:n,:) = zeros(n-1,2); return; end pars2 = []; pars2.fid = 0; pars2.eps = 0; % keyboard; [x2,y2,info2] = sedumi(A, b, c, K, pars2); %info2 limlist(i,2) = b'*y2; if info2.dinf == 1 || info2.numerr == 2 % keyboard; feas_status = 0; limlist(2:n,:) = zeros(n-1,2); return; end end inrect1old.sllist = [limlist(:,1)',0.001*ones(1,nbrpoints-n-1)]; inrect1old.sulist = [limlist(:,2)',maxdepth*ones(1,nbrpoints-n-1)]; index2 = n; inrect1 = propagateresect(inrect1old, index2, Xlist, nbrpoints, m, n); clear limlist; limlist = [inrect1.sllist', inrect1.sulist'];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -