Re: [討論] 當未知數多於方程式(已有範圍)

看板MATLAB作者 (大頭)時間14年前 (2011/11/24 19:21), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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

11/24 20:08, , 1F
你的電腦真的夠爛 ㄎㄎ 我跑0.1秒
11/24 20:08, 1F
文章代碼(AID): #1EpYZ10r (MATLAB)
文章代碼(AID): #1EpYZ10r (MATLAB)