matlab - 频率产生

标签 matlab linear-algebra

我正在编写一个 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 个自由度。

我假设您的变量是限制在某个范围内的整数,否则会有无限数量的解决方案。

将整数值赋给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(:)]

关于matlab - 频率产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933891/

相关文章:

Matlab 保存句柄实例不保存其属性值

r - 计算矩阵的特征值多少钱?

c++ - 大型矩阵的矩阵库?

matlab - 多维矩阵乘法

matlab - 用矩阵中值附近的插值替换 NaN 值

string - 删除元胞数组中字符串中的重复字符

c++ - 使用 3x3 矩阵和平移 vector 围绕一个点旋转

matlab - mldivide 与 (LU & linsolve)

algorithm - 找到与一组 N 条线的距离最小的点

c - 通过 mex 传回数组