作者kuoyfu (大頭)
看板MATLAB
標題Re: [討論] 當未知數多於方程式(已有範圍)
時間Thu Nov 24 19:21:34 2011
※ 引述《kinematic (狂暴機動學)》之銘言:
: 不好意思問一個很沒水準的問題
不會沒水準啊 這是一個很棒的問題呢ㄎㄎ
: 如今小弟有4個Unknown,2個Equation
: 也就是說,在沒有邊界條件的情況下,會有無限多組解
: 不過若加入「正整數」這個條件的話,答案數就是有限了
: 目前小弟要解的是這個方程式:
: a + b + c + d = 9
: 2a + 3b + 4c + 5d = 22
: 且(a,b,c,d)皆為界於 0 ~ 9 的整數(0 <= a,b,c,d && a,b,c,d <= 9)
: 以下是程式碼,很簡陋......
: A = [1 1 1 1 ; 2 3 4 5];
: X = [a b c d];
: B = [9 ; 22];
: X = B\A;
: 小弟的問題就是「如何將整數這個constrain寫入code」
: 並且「顯式出 X 的全部解(已知共4組)」,不然出來的都是一個最佳解......
: 感謝各位大大的耐心觀看,若有冒犯還請多多見諒
ㄎㄎ
基本上這種問題應該還是用你所謂的爆力法帶值去解
只不過你一想到要排列組合出那麼大的矩陣(10000*4)可能會很花功夫
但是今天如果使用fullfact的話 會比你直接寫for迴圈快唷
下面我大概列出程式碼 看不懂你再問我
clear all;clc;tic; % 清畫面 清資料 計時
n=4; % 變數個數
m=10; % 可能變數數量
p=0:9; % 變數範圍 0 1 2 3 4 5 6 7 8 9
p=p(fullfact([m,m,m,m])); % 排列組合 製造出所有答案 為一個(10000*4)矩陣
f1=@(X) X(1)+X(2)+X(3)+X(4)-9; @ 方程式1
f2=@(X) X(1)*2+X(2)*3+X(3)*4+X(4)*5-22; @ 方程式2
N=[]; % 做一個空集合變數
for i=1:m^n % 跑好多次迴圈
if f1(p(i,1:end))==0 & f2(p(i,1:end))==0 % 滿足兩個方程式就存資料到N裡
N=[N;p(i,1:end)];
else
end
end
toc; % 計時終止
最後跑出來有四組解
[5,4,0,0] [6,2,1,0] [7,0,2,0] [7,1,0,1]
我的爛電腦耗時 0.36X 秒
應該會比寫for loop快吧ㄎㄎ
有空多爬爬版唷~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.59.19
1F:推 Raymond0710:你的電腦真的夠爛 ㄎㄎ 我跑0.1秒 11/24 20:08