2012-10-17 5 views
2

나는 다음과 같은 제약 조건을 만족하는 주파수 f_i 년대의 가능한 모든 값을 찾기위한 MATLAB 프로그램을 쓰고 있어요 :이 프로그램은 아직 루프에 대한 때문에 엄청난 중첩의 많은 시간을 복용주파수 세대

f1+f2+f3+f4+f5+f6=100 
f2+2*f3+3*f4+4*f5+5*f6=95 

나는 그것에 대한 답을 얻을 수 없었습니다. 그래서이 문제에 대한 가능한 해결책은 무엇입니까?

또한 내 진짜 문제는 훨씬 더 큰, 내가 그래서

f1+f2+...+f150=10,000,000 
f2+3*f3+...+17*f150=9,500,000 

와 유사한 제약 (150)와 같은 f_i의의를 위해 가능한 모든 주파수를 가질 필요가있다, 이러한 문제를 해결하기 위해 어떤 방법이나 기술은 예 경우,이 그러면 어떻게?

+2

두 개 이상의 제약 조건이있는 경우 무한 수의 솔루션이 있습니다. – JoshRagem

+0

또한 수학 또는 물리 SE 사이트로 이동해야합니다. – JoshRagem

+1

f_1 .. f_n은 가능성있는 추가 제약 조건 (주파수 임)을 가진 정수임을 감안할 때 모든 솔루션을 나열하는 것이 문제인 것처럼 보입니다. – Jakob

답변

1

루프가 필요하지 않으므로 선형 대수가 필요합니다. 당신은 2 선형 방정식과 6 변수가 있습니다. 이것은 당신에게 4 자유도를 남겨 둡니다.

변수가 일부 범위에 제약 된 정수라고 가정합니다. 그렇지 않으면 무한한 양의 솔루션이 있습니다. f1, f2, f3, f4 나머지 방정식을 풀기에

할당 정수 값. 이를 수행하는 한 가지 방법은 일부 범위에서 모든 정수의 4D 그리드를 생성하고 선형 시스템을 해결하는 것입니다.

[f1,f2,f3,f4] = ndgrid(1:10,1:10,1:10,1:10); 
res = [1 1; 4 5] \ ([100-f1(:)-f2(:)-f3(:)-f4(:) 95-f2(:)-2*f3(:)-3*f4(:)]'); 
f5 = res(1,:); 
f6 = res(2,:); 

solutions = [f1(:) f2(:) f3(:) f4(:) f5(:) f6(:)] 
+0

작동하는 것을 볼 수는 있지만 주파수가 0이 아닌 양의 정수가되어야합니다. 이제 실현 될 수 있습니까? – Niyan

0

당신의 문제는 선형입니다.

따라서 가능한 문제는 행렬 형식으로 문제를 작성한 다음 매트랩이 계산하는 방식입니다 (적어도 방향을 찾는 데 대해서는 예 : http://www.mathworks.de/matlabcentral/newsreader/view_thread/45457 참조).

여기서 우리는 주파수가 실제라고 가정합니다 (물리적 인 의미로 제공됨). 그렇지 않으면 문제가 더욱 어려워집니다.

+0

제 경우에는 주파수는 양의 정수입니다. – Niyan

1

예제 문제는 6 개의 미지수와 2 개의 방정식 만 있습니다. 실제 문제에서는 150 개의 변수를 가질 수 있지만 여전히 2 개의 방정식 만 가질 수 있다고 말합니다.

이러한 문제는 지나치게 과소 평가되었으며 두 제약 조건을 모두 충족하는 f1--f150에 할당 할 수있는 값이 무한대 있습니다. 가능한 모든 솔루션을 열거하는 것은 의미가 없습니다. 각 주파수에 대한 배열을 생성하는 것이 더 좋으며 특정 조합을 사용할 때 제약 조건을 확인하십시오. 작은 제약이 있기 때문에 이것은 훨씬 더 효율적입니다.

이제 f_i은 0이 아닌 양의 정수입니다. 그것은 여전히 ​​도움이되지 않습니다. 1/0 또한 정수입니다. 나는 하나의 추가적인 제약이 있다고 가정하고, 그것은 모든 주파수가 미리 정의 된 최대 값보다 클 수 없다는 것을 의미합니다.

나는 내 관심사를 보여 줄 것이다. 최대 값이 100이라고 가정하십시오. 그러면 얼마나 많은 조합이 있습니까? 6 개의 다른 주파수 (예에서와 같이)의 경우,

num_fi = 100*100*100*100*100*100 = 100^6 = 10^12 = 1 trillion 

조합.i = 150f_i,

num_fi = 100*100*...150 times...*100 = 100^150 = 10^300 

를 들어 다른 조합 (즉, 10 - 투 - 더 - 전원-300!이다).

저장하려고한다고 가정합니다. 1과 100 사이의 정수는 1 바이트를 소비하기 때문에, 당신은 4TB의 하드 드라이브가 2 개이고을 사용하고, 각 하드 드라이브는 1cm 높은 가정하면

[number of combinations] * [number of f_i in the set] * [number of bytes] 
    = [num_fi] * i * 1byte 
    = (10^300 * 150) bytes 
    = 1.5 * 10^290 TERABYTES. 

를 저장해야합니다, 당신은

3.75 * 10^289 

4TB의 하드 드라이브가 2 개이고이 필요합니다 . 이 하드 드라이브가 2 개이고 서로 위에 쌓인 때,

(3.75*0.01*10^289)/384400000/2 = 4.87 * 10^278 

시간 to the moon 다시, 또는 다시 Andromeda galaxy과에

(3.75*0.01*10^289)/2.54e6/9.4605284e15/2 = 7.80 * 10^264 

번, 또는

(3.75*0.01*10^289)/13.2e9/9.4605284e15/2  
= 1.50 * 10^261 
에 도달하는 타워를 만들 것

번 ~ UDFj-39546284및 뒷면. 이 금요일 이래로

, 나는 몇 가지 보너스로 던질거야 :

하드 드라이브가 2 개이고은 채울 것 : 반경 39AU 태양에서와 함께 중심

  • 1.59e + 247 배 구, (
  • 3.75e가 + 222 배 은하의 중심에서 SMB 중심 구, 반경 10 만 광년 (전체 은하)
  • 1.39e가 + 207 배 구, 지구 중심과 반지름) 명왕성에 139 억 빛의 해 (관측 가능한 우주)

그리고 그래서 하지 않는 한 당신이 f_i의에 달성하기 위해 노력하고 무엇을 우리에게 더 많은 컨텍스트를 제공, 우리가 여기에서 할 수있는 많은 진짜가 아니다 (100)

의 최대 값을 그냥.

+0

예, MATLAB은 대부분의 주파수에 많은 0을 지정할 것입니다. 그러나 그런 솔루션은 필요하지 않습니다. 주파수는 이러한 조건을 만족하는 0이 아닌 양의 정수 여야합니다. 프로그램을 실행하지 않고도이 두 조건을 만족하는 모든 가능한 조합을 열거 할 수 있습니까? – Niyan

+0

@Niyan : 최신 편집을 참조하십시오. –

+0

바로 가기 포인트 ->'100^6 = 1000 만' –