2012-06-10 68 views
2

我試圖解方程的系統具有以下形式:Matlab:如何求解二元方程組?

a5 + a6 + a7 + f5 + f6 + f7 = 11; 
b5 + b6 + b7 + e5 + e6 + e7 = 100; 
c5 + c6 + c7 + d5 + d6 + d7 = 100; 

a5 + b5 + c5 + d5 + e5 + f5 = 11; 
a6 + b6 + c6 + d6 + e6 + f6 = 100; 
a7 + b7 + c7 + d7 + e7 + f7 = 100; 

,所有的變量和數字是二進制文件。

有沒有辦法在Matlab中做到這一點?

例如,通過有十進制值代二進制數:

a5 + a6 + a7 + f5 + f6 + f7 = 3; 
b5 + b6 + b7 + e5 + e6 + e7 = 4; 
c5 + c6 + c7 + d5 + d6 + d7 = 4; 

a5 + b5 + c5 + d5 + e5 + f5 = 3; 
a6 + b6 + c6 + d6 + e6 + f6 = 4; 
a7 + b7 + c7 + d7 + e7 + f7 = 4; 

並以某種方式告訴MATLAB未知數應該是整數,從區間[0:1]?


這裏是A X = B形式:

A = [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1; 
0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0; 
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0; 
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0; 
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0; 
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1]; 

b = [3 4 4 3 4 4]; 

這將是再下一步?

+3

你應該通過重新排列該入[線性聯立方程標準矩陣形式](http://en.wikipedia.org/wiki/System_of_linear_equations#Matrix_equation)開始,* Ax = b的*(其中,目標是解決* x *)。這至少會使它更容易處理,並且符號更簡單。 –

+0

這看起來像一個問題*整數編程與二進制變量*是(如果內存服務)NP完成。一般使用有兩種方法:*分支和綁定*和*枚舉*。就我個人而言,我不會將其視爲一組聯立線性方程組,因爲@ OliCharlesworth的答案可能被解讀爲暗示。 –

+0

@HighPerformanceMark:我並不是說應該把它作爲一個線性的Ax + b問題來解決,但是如果封裝在一個向量和一個矩陣中,它肯定會更容易處理係數等等。 –

回答

0

bintprog,如果你有優化工具箱。

由於可能有多種解決方案,我會選擇具有最小總和的解決方案。

>> A = [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1; 
0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0; 
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0; 
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0; 
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0; 
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1]; 

>> b = [3 4 4 3 4 4]; 

>> bintprog(ones(1,18),[],[],A,b) 
Optimization terminated. 
ans = 
    0 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    0 
    0 
    0 
    0 
    1 
    0 
    1 
    0 
+0

謝謝你的回答! 如果你告訴我如何得到所有可能的解決方案,這將是非常好的。 – Samsky

+0

這是一個普遍的難題,你最初並沒有要求。它將涉及一個分支和束縛方案,你首先要求所有可能的解決方案,例如x(1)== 0,然後其中x(1)== 1。這些可能性中的每一個將問題減少到17個未知。重複。或者,在這個問題上可行的是,你可以簡單地測試所有可能的解決方案。由於它們只有2^20 = 1048576,所以不會花太長時間。 – 2012-06-10 22:27:03

+0

'x = b \ A'(或'A \ b',我忘了)怎麼了? – rubenvb