1

nx2 の分数行列 F ( [num1, den1; num2, den2; ...]) が与えられた場合、それらの加算から得られる分数を効率的に計算するにはどうすればよいでしょうか? (つまり[F(1,1)*F(2,2)*...*F(n,2) + F(1,2)*F(2,1)*F(2,3)*...*F(n,2) + ... , F(1,2)*...*F(n,2)])。結果は既約形式である必要はありません。ポイントは効率です (つまり、C コードではなくベクトル化されます)。

4

1 に答える 1

3

arrayfun関数を配列に適用しprod、積を取得するために使用できます

p = prod(F(:,2));
G = arrayfun(@(x, y) x * p / y, F(:,1), F(:,2));

次に、あなたの答えは

[sum(G), p]

または、Divakarが提案したようにベクトル化された方法で行うことができます

p = prod(F(:,2));
G = F(:,1).*(p./F(:,2));
[sum(G), p]

50x2 アレイで 1000 回試行して両方をテストしたところ、結果は次のようになりました。

Elapsed time is 0.594867 seconds.
Elapsed time is 0.012170 seconds.

実際、ベクトル化された方法ははるかに高速です。

于 2016-04-05T09:28:19.820 に答える