我正在编写一个 MATLAB 程序,用于查找满足以下约束的频率 f_i 的所有可能值:
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 - 频率产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933891/