2017-10-25 76 views
7

मैटलैब में हल करने के लिए मेरे पास रैखिक असमानता/समानता की एक प्रणाली है और मैं linprog का उपयोग करता हूं। असमानताओं के कुछ सख्त हैं जैसा कि मैंने सख्त शामिल किए जाने को पाने के लिए एक बहुत छोटे से costant eps का उपयोग के रूप में समझाया hereMatlab में रैखिक असमानताओं/समानता की एक प्रणाली द्वारा निहित असमानताओं: संख्यात्मक तर्क या counterexample?

समारोह solve नीचे eps के लिए एक मूल्य प्रदान की होने के बाद सिस्टम को हल करती है।

function pj=solve(eps) 

%Inequalities 
%x(1)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)<=0; 
%x(2)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)<=0; 
%x(3)-x(7)-x(10)-x(12)-x(14)-x(16)-x(17)-x(18)-x(19)<=0; 
%x(4)-x(8)-x(11)-x(13)-x(14)-x(15)-x(16)-x(18)-x(19)<=0; 

%x(1)+x(2)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-... 
%    x(6)-x(12)-x(13)-x(18)<=0; 
%x(1)+x(3)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-... 
%    x(7)-x(12)-x(14)-x(18)<=0; 
%x(1)+x(4)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-... 
%    x(8)-x(13)-x(14)-x(18)<=0; 
%x(2)+x(3)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)-... 
%    x(7)-x(10)-x(14)-x(16)<=0; 
%x(2)+x(4)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)-... 
%    x(8)-x(11)-x(14)-x(16)<=0; 
%x(3)+x(4)-x(7)-x(10)-x(12)-x(14)-x(16)-x(17)-x(18)-x(19)-... 
%    x(8)-x(11)-x(13)-x(15)<=0; 


%x(1)+x(2)+x(3)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-... 
%     x(6)-x(12)-x(13)-x(18)-... 
%     x(7)-x(14)<=0; 
%x(1)+x(2)+x(4)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-... 
%     x(6)-x(12)-x(13)-x(18)-... 
%     x(8)-x(14)<=0; 
%x(1)+x(3)+x(4)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-... 
%     x(7)-x(12)-x(14)-x(18)-... 
%     x(8)-x(13)<=0; 
%x(2)+x(3)+x(4)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)-... 
%     x(7)-x(10)-x(14)-x(16)-... 
%     x(8)-x(11)<=0; 


%Equalities 
%x(1)+x(2)+x(3)+x(4)=1; 
%x(5)+x(6)+x(7)+x(8)+x(9)+x(10)+x(11)+x(12)+x(13)+x(14)+x(15)+x(16)+x(17)+x(18)+x(19)=1; 


%I also want each component of x to be different from 1 and 0 (strictly included between 1 and 0 given the equalities constraints) 
%x(1)>0 ---> x(1)>=eps ---> -x(1)<=-eps 
%... 
%x(19)>0 
%x(1)<1 ---> x(1)<=1-eps 
%... 
%x(19)<1 

%52 inequalities (14+19+19) 
%2 equalities 
%19 unknowns 

A=[1 0 0 0 -1 0 0 0 -1 -1 -1 0 0 0 -1 -1 -1 0 -1;... 
    0 1 0 0 0 -1 0 0 -1 0 0 -1 -1 0 -1 0 -1 -1 -1;... 
    0 0 1 0 0 0 -1 0 0 -1 0 -1 0 -1 0 -1 -1 -1 -1;... 
    0 0 0 1 0 0 0 -1 0 0 -1 0 -1 -1 -1 -1 0 -1 -1;... 

    1 1 0 0 -1 -1 0 0 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1;... 
    1 0 1 0 -1 0 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1;... 
    1 0 0 1 -1 0 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1;... 
    0 1 1 0 0 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1;... 
    0 1 0 1 0 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1;... 
    0 0 1 1 0 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1;... 

    1 1 1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1;... 
    1 1 0 1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1;... 
    1 0 1 1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1;... 
    0 1 1 1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1;... 

    -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1;... 

    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0;... 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]; %52x19 

b=[zeros(1,14) -eps*ones(1,19) (1-eps)*ones(1,19)]; %1x52 

Aeq=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;... 
    0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; %2x19 
beq=[1 1]; %1x2 

f=zeros(1,19); %1x19 

x=linprog(f,A,b,Aeq,beq); 

if ~isempty(x) 
    pj=x; 
else 
    pj=NaN; 


end 

क्या मेरा मानना ​​है कि (लेकिन मैं जाना जाता नहीं कैसे विश्लेषणात्मक यह दिखाने के लिए) है कि असमानता/समानताओं मैं समारोह solve अंदर linprogr एल्गोरिथ्म में डाल दिया है इस तरह के हैं कि समाधान है कि मैटलैब नीचे के रूप में संकेत दिया एक और असमानता को पूरा करेगा का उत्पादन:

clear 
rng default 

%solve system 
p1=solve(unifrnd(0,0.05)); 

%solve system 
p2=solve(unifrnd(0,0.05)); 


%solve system 
p3=solve(unifrnd(0,0.05)); 



if ~isnan(p1) & ~isnan(p2) & ~isnan(p3) %#ok<AND2> 

%LHS 
lhs=(p1(2)+p1(3)+p1(4))*1*1+... 
    p1(1)*(p2(1)+p2(4))*1+... 
    p1(1)*p2(2)*(p3(2)+p3(3)+p3(4))+... 
    p1(1)*p2(3)*(p3(1)+p3(2)+p3(3)); 


%RHS 
rhs=(1-(p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19)))*... 
     1*... 
     1+... 
     ... + 
    (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*... 
    (p2(5)+p2(8)+p2(11))*... 
     1+... 
     ... + 
    (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*... 
    (p2(7)+p2(10)+p2(14)+p2(16))*... 
    ((p3(5)+p3(9)+p3(10)+p3(17))+(p3(6)+p3(7)+p3(12)))+... 
    ... + 
    (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*... 
    (p2(6)+p2(9)+p2(13)+p2(15))*... 
    ((p3(8)+p3(13)+p3(14)+p3(18))+(p3(6)+p3(7)+p3(12)))+... 
    ... + 
    (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*... 
    (p2(12)+p2(17)+p2(19))*... 
    (p3(6)+p3(7)+p3(12)); 

check=(lhs>=rhs); %I expect check to be 1 
else 
end 

मुझे विश्वास है कि समाधान p1,p2,p3check=1 वितरित करेगा।

प्रश्न: जैसा ऊपर बताया गया है, मुझे नहीं पता कि यह विश्लेषणात्मक रूप से कैसे दिखाना है; संतोषजनक संख्यात्मक तर्क उत्पन्न करने का कोई तरीका है? या, क्या आप मेरी धारणा को मार सकते हैं और समाधान p1,p2,p3check=0 वितरित कर सकते हैं?

+0

कोई भी मदद नहीं कर सकता? बक्षीस लगभग समाप्त हो रहा है – user3285148

उत्तर

7

आप क्या कर सकते हैं समस्या को 1 9 पैरामीटर से 3x19 = 57 पैरामीटर तक बढ़ाएं, lhs और rhs के बीच अंतर की गणना करने के लिए एक फ़ंक्शन लिखें और दिए गए बाधाओं के साथ इस फ़ंक्शन को कम करने का प्रयास करें। यदि आप शून्य से नीचे जाते हैं तो इसका अर्थ है rhs> lhs। विस्तार की कमी:

ACell = repmat({A}, 1, 3); % diagonal matrix with A repeated 3 times on diagonal 
A = blkdiag(ACell{:}); % 156x57 
b = [b b b]; % 1x156 
AeqCell = repmat({Aeq}, 1, 3); 
Aeq = blkdiag(AeqCell{:}); % 6x57 
beq = [beq beq beq]; % 1x6 

समारोह त्रुटि की गणना करने के:

function error = errorFun(p) 

p1 = p(1:19); 
p2 = p(20:38); 
p3 = p(39:57); 

if ~isnan(p1) & ~isnan(p2) & ~isnan(p3) %#ok<AND2> 

    lhs= (...); 
    rhs= (...); 
    error= lhs - rhs; 

else 
    error= 1; 
end 
end 

अब आप कुछ अनुकूलन उपकरण का उपयोग कर सकते हैं errorFun की न्यूनतम खोजने के लिए, उदाहरण के fmincon के लिए:

x = fmincon(@errorFun, zeros(57, 1), A, b, Aeq, beq, [], [], [], options); 

समाधान है कि मैंने पाया सकारात्मक था, जिसका मतलब है कि आपकी धारणा सही होनी चाहिए।

संबंधित मुद्दे