FLOP のカウント方法を把握するのに苦労しています。ある瞬間、私はそれを理解したと思いますが、次の瞬間には意味がありません。これを説明する助けをいただければ幸いです。このトピックに関する他のすべての投稿を見てきましたが、私がよく知っているプログラミング言語で完全に説明されているものはありません (MATLAB と FORTRAN をいくつか知っています)。
これは、私の本の 1 つから、私がやろうとしていることの例です。
次のコードでは、フロップの合計数(n*(n-1)/2)+(n*(n+1)/2)
は と同じように記述できますn^2 + O(n)
。
[m,n]=size(A)
nb=n+1;
Aug=[A b];
x=zeros(n,1);
x(n)=Aug(n,nb)/Aug(n,n);
for i=n-1:-1:1
x(i) = (Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i);
end
n
上記と同じ原則を適用して、次のコード (MATLAB)の方程式の数の関数として FLOP の総数を見つけようとしています。
% e = subdiagonal vector
% f = diagonal vector
% g = superdiagonal vector
% r = right hand side vector
% x = solution vector
n=length(f);
% forward elimination
for k = 2:n
factor = e(k)/f(k‐1);
f(k) = f(k) – factor*g(k‐1);
r(k) = r(k) – factor*r(k‐1);
end
% back substitution
x(n) = r(n)/f(n);
for k = n‐1:‐1:1
x(k) = (r(k)‐g(k)*x(k+1))/f(k);
end