2017-10-24 19 views
-1

不等式(特に16不等式)を満たすMatlab(p11,..., p119以下)の数字を探したい。私はMatlabにそのような数字が見つかるまで検索を続けます。私は以下のようにwhileを使用することを考えましたが、それは動作しません。なにが問題ですか?どうすればいいですか?条件はtrueている間Matlabでいくつかの不等式を満たす数を見つける

clear 
rng default 
%% SOME INITIAL VALUES 
p11=0.3; 
p12=0.4; 
p13=0.1; 
p14=0.2; 
p15=0.2; 
p16=0.2; 
p17=0.06; 
p18=0.03; 
p19=0.02; 
p110=0.04; 
p111=0.07; 
p112=50; 
p113=0.02; 
p114=0.03; 
p115=0.01; 
p116=0.08; 
p117=0.01; 
p118=0.1; 
p119=0.07; 

while ... %CONDITION THAT SHOULD BE SATISFIED (16 CONDITIONS) 
    ((p11<=(p15+p19+p110+p111+p115+p116+p117+p119))+... 
    (p12<=(p16+p19+p112+p113+p115+p117+p118+p119))+... 
    (p13<=(p17+p110+p112+p114+p116+p117+p118+p119))+... 
    (p14<=(p18+p111+p113+p114+p115+p116+p118+p119))+... 
    (p11+p12<=(p15+p19+p110+p111+p115+p116+p117+p119+... 
       p16+p112+p113+p118))+... 
    (p11+p13<=(p15+p19+p110+p111+p115+p116+p117+p119+... 
       p17+p112+p114+p118))+... 
    (p11+p14<=(p15+p19+p110+p111+p115+p116+p117+p119+... 
       p18+p113+p114+p118))+... 
    (p12+p13<=(p16+p19+p112+p113+p115+p117+p118+p119+... 
       p17+p110+p114+p116))+... 
    (p12+p14<=(p16+p19+p112+p113+p115+p117+p118+p119+... 
       p18+p111+p114+p116))+... 
    (p13+p14<=(p17+p110+p112+p114+p116+p117+p118+p119+... 
       p18+p111+p113+p115))+... 
    (p11+p12+p13<=(p15+p19+p110+p111+p115+p116+p117+p119+... 
        p16+p112+p113+p118+... 
        p17+p114))+... 
    (p11+p12+p14<=(p15+p19+p110+p111+p115+p116+p117+p119+... 
        p16+p112+p113+p118+... 
        p18+p114))+... 
    (p11+p13+p14<=(p15+p19+p110+p111+p115+p116+p117+p119+... 
        p17+p112+p114+p118+... 
        p18+p113))+... 
    (p12+p13+p14<=(p16+p19+p112+p113+p115+p117+p118+p119+... 
        p17+p110+p114+p116+... 
        p18+p111))+... 
    (p11+p12+p13+p14==1)+... 
    (p15+p16+p17+p18+p19+p110+p111+p112+p113+p114+p115+p116+p117+p118+p119==1))~=15 


    % IF THE CONDITION IS NOT SATISFIED KEEP SEARCHING BY GUESSING 
    % OTHER NUMBERS 
    p11=unifrnd(0,1); 
    p12=unifrnd(0,1); 
    p13=unifrnd(0,1); 
    p14=unifrnd(0,1); 
    p15=unifrnd(0,1); 
    p16=unifrnd(0,1); 
    p17=unifrnd(0,1); 
    p18=unifrnd(0,1); 
    p19=unifrnd(0,1); 
    p110=unifrnd(0,1); 
    p111=unifrnd(0,1); 
    p112=unifrnd(0,1); 
    p113=unifrnd(0,1); 
    p114=unifrnd(0,1); 
    p115=unifrnd(0,1); 
    p116=unifrnd(0,1); 
    p117=unifrnd(0,1); 
    p118=unifrnd(0,1); 
    p119=unifrnd(0,1); 
end 
+0

トラブルシューティングのために何をしましたか?何が起こると思いますか? – Matt

+0

ありがとうマット:Matlabの線形不等式のシステムのソルバがあるはずですが、私は素朴なアプローチを試したかったので、不平等のシステムの可能な解を繰り返し推測したり調べたりすることはほとんど考えませんでした。私はそのようなプロセスは永遠に進む可能性があると理解していますが、上記のコードは起動しません... – user3285148

答えて

1

whileループが実行されます。 falseが終了すると終了します。テスト条件はwhile .... ~= 15です。これは最初の推測として、falseであり、16のうちの15の真実が得られます。 15 ~= 15falseなので、whileループは実行されません。

問題を解決する方法の1つは~=から==に変更することです。これが実行され、その状態の解決策が見つけ出されます。

あなたはtestsという変数を作成することによって、これを見て、このようにそれを埋めている可能性:

tests = [(p11<=(p15+p19+p110+p111+p115+p116+p117+p119));... 
... skipped a bunch of stuff ... 
    (p15+p16+p17+p18+p19+p110+p111+p112+p113+p114+p115+p116+p117+p118+p119==1)]; 
sum(tests) 

ans = 15 

か、その値を追跡する他の方法。

関連する問題