频率产生



我正在编写一个MATLAB程序,用于查找满足以下约束的所有可能值F_I的值:

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

该程序花了很大的时间,因为循环的大量嵌套了,但我无法得到答案,那么解决此问题的可能解决方案是什么?

我的真正问题也要大得多,我需要在150 f_i的情况下具有所有可能的频率,其限制类似于

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

那么,是否有任何方法或技术解决此类问题,如果是,则如何?

您不需要循环,需要线性代数。您有2个线性方程和6个变量。这给您留下了4个自由度。

我假设您的变量是整数限制为一定范围的,否则有无限量的解决方案。

将整数值分配到f1f2f3f4中,并求解其余方程。一种方法是在某些范围内生成所有整数的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(:)]

您给出的示例问题有6个未知数,只有2个方程。在您的实际问题中,您说您可以有150个变量,但仍然只有2个方程。

这些问题严重确定,并且可以分配给f1--f150的无限数量可以满足这两个约束。列举所有可能的解决方案是毫无意义的 - 最好是为每个频率生成一个数组,并在使用特定组合后检查约束。这要效率要高得多,因为从一开始就几乎没有限制。

现在,您说所有f_i都是非零的正整数。这仍然没有帮助,因为1/0也是整数。我假设还有一个其他约束,那就是所有频率可能并不大于某些预定义的最大值。

我会给你一个关于我的关注的说明。假设最大值为100。那么有多少种不同的组合?对于6个不同的频率(如示例),

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

组合。对于f_ii = 150

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

(这是十到300!)不同的组合。

假设您想存储它们。由于1至100之间的整数仅消耗1个字节,因此您必须存储

[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. 

假设您使用4TB硬盘,每个硬盘驱动器高1厘米,您需要

3.75 * 10^289  

4TB硬盘。这些硬盘彼此堆叠时,将创建一个将达到

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

月球和后背的时间,或

(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 

to to udfj-39546284 和back

由于是星期五,我将获得一些奖金:

硬盘将填充:

  • 1.59e 247倍的球体,以阳光为中心和半径39au(到冥王星)
  • 3.75E 222倍球体,以银河系中心的SMB为中心,半径为100,000灯泡(整个星系)
  • 1.39e 207倍的球体,以地球为中心,半径为139亿光年(可观察到的宇宙)

,最大值为100。

因此,除非您为您尝试使用f_i'S >提供更多的上下文,否则我们在这里确实没有什么能做的。

您的问题是线性的。

因此,您可以做的是以矩阵形式编写问题,然后查找矩阵内核 - MATLAB在计算上可以做到(至少就找到其方向而言,请参见例如http://www.mathworks。de/matlabcentral/newsreader/view_thread/45457)。

在这里,我们假设频率是真实的(前提是物理意义)。否则问题更难。

相关内容

  • 没有找到相关文章

最新更新