Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 频率产生_Matlab_Linear Algebra - Fatal编程技术网

Matlab 频率产生

Matlab 频率产生,matlab,linear-algebra,Matlab,Linear Algebra,我正在编写一个MATLAB程序,用于查找满足以下约束条件的频率f_I’s的所有可能值: f1+f2+f3+f4+f5+f6=100 f2+2*f3+3*f4+4*f5+5*f6=95 由于嵌套的for循环太多,程序需要花费大量的时间,但我无法得到答案,那么这个问题的可能解决方案是什么呢 而且我真正的问题要大得多,我需要有所有可能的频率,比如150 f_I,具有与 f1+f2+...+f150=10,000,000 f2+3*f3+...+17*f150=9,500,000 那么,有没有任何

我正在编写一个MATLAB程序,用于查找满足以下约束条件的频率f_I’s的所有可能值:

f1+f2+f3+f4+f5+f6=100 
f2+2*f3+3*f4+4*f5+5*f6=95
由于嵌套的for循环太多,程序需要花费大量的时间,但我无法得到答案,那么这个问题的可能解决方案是什么呢

而且我真正的问题要大得多,我需要有所有可能的频率,比如150 f_I,具有与

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

那么,有没有任何方法或技术来解决这些问题,如果有,那么如何解决呢?

你不需要循环,你需要线性代数。你有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(:)]

你的问题是线性的

因此,您可能要做的是以矩阵形式编写问题,然后查找矩阵核-这是matlab计算所做的(至少在寻找方向方面,请参见示例)


然而,在这里,我们假设频率是真实的(只要它有物理意义)。否则问题就更难了。

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

这些问题的确定程度严重不足,您可以为
f1--f150
分配无限多不同的值来满足这两个约束。列举所有可能的解决方案是毫无意义的——最好为每个频率生成一个数组,在使用特定的组合时,检查约束。这要有效得多,因为一开始几乎没有约束

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

我将向你说明我的关切。假设最大值为100。那么有多少种不同的组合呢?对于6个不同的频率(如示例中所示)

组合。对于具有
i=150的
f_i

num_fi = 100*100*...150 times...*100 = 100^150 = 10 ^ 300
(这是10比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 
往返时间,或

(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 
来来回回的时间

既然今天是星期五,我会给你一些奖金:

硬盘驱动器将填满:

  • 1.59e+247倍球体,以太阳为中心,半径39AU(到冥王星)
  • 3.75e+222倍球体,中心位于星系中心的SMB,半径100000光年(整个星系)
  • 1.39e+207倍球体,以地球为中心,半径为139亿光年(可观测宇宙)
这就是最大值100


所以我们在这里真的没什么可做的,除非你给我们提供更多关于你试图用
f_i
实现什么的上下文

如果你没有两个以上的约束条件,那么有无限多的解。同样,这可能应该转移到数学或物理SE站点。问题似乎是在f_1.的情况下枚举所有解。。f_n是具有可能附加约束的整数(假设它们是频率)。在我的例子中,频率是正整数。是的,MATLAB将为大多数频率分配许多零,但我不需要这样的解决方案。频率必须是满足这些条件的非零正整数。我们能不能不用运行一个程序,就列举出满足这两个条件的所有可能的组合呢?等等,我怀疑我自己。100^6不是1000万对吗???@AK4749:哦,哈哈,显然是该回家了。你说得对——100^6=(10^2)^6=10^12=1万亿。我会编辑的。天哪!!让我更清楚地起草我的问题,然后再回复你,谢谢你的评论。我可以看到它是有效的,但我需要频率为非零正整数。现在可以实现吗?