作者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