2

次の制約を満たす周波数f_iのすべての可能な値を見つけるためのMATLABプログラムを書いています。

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

ネストされたforループが非常に大きいため、プログラムに非常に長い時間がかかりますが、答えを得ることができませんでした。この問題の可能な解決策は何でしょうか。

また、私の本当の問題ははるかに大きく、150f_iのようなすべての可能な周波数を同様の制約で持つ必要があります

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

それで、そのような問題に取り組む方法または技術はありますか?そうであれば、どのように?

4

3 に答える 3

1

ループは必要ありません。線形代数が必要です。2 つの線形方程式と 6 つの変数があります。これにより、4 つの自由度が残ります。

変数はある範囲に制約された整数であると想定しています。そうでない場合、解は無限にあります。

f1f2f3に整数値をf4代入し、残りの方程式を解きます。それを行う 1 つの方法は、ある範囲内のすべての整数の 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(:)]
于 2012-10-17T12:13:01.210 に答える
0

あなたの問題は直線的です。

したがって、おそらくできることは、問題を行列形式で記述してから、行列カーネルを探すことです。これは、matlabが計算で実行します(少なくともその方向を見つけるという点では、 http: //www.mathworks.de/matlabcentralを参照してください)。 / newsreader / view_thread / 45457)。

ただし、ここでは、周波数が実際のものであると想定しています(物理的に意味がある場合)。そうでなければ、問題ははるかに困難です。

于 2012-10-17T12:15:02.260 に答える