シンボリックな総和
Symbolic Math Toolbox™ には、和を計算するために次の 2 つの関数が用意されています。
symsum
と sum
の比較
sum
と symsum
のいずれを使用しても、総和 (definite sum) を求めることができます。関数 sum
は入力の和を次元について計算するのに対して、関数 symsum
は入力の和をインデックスについて計算します。
総和 (definite sum) について考えます。まず、式の k
にインデックス値を代入して、総和 (definite sum) の項を求めます。次に、得られたベクトルの和を sum
を使用して求めます。
syms k f = 1/k^2; V = subs(f, k, 1:10) S_sum = sum(V)
V = [ 1, 1/4, 1/9, 1/16, 1/25, 1/36, 1/49, 1/64, 1/81, 1/100] S_sum = 1968329/1270080
symsum
を使用し、インデックスと総和の範囲を指定して、同じ和を求めます。sum
と symsum
は同一の結果を返します。
S_symsum = symsum(f, k, 1, 10)
S_symsum = 1968329/1270080
symsum
と sum
の計算速度
有限級数の和を求める場合は、symsum
の方が sum
よりも高速な場合があります。無限級数の和を求める場合は、symsum
のみが使用できます。
などの上限値が大きな有限級数の和を求めることによって、symsum
が sum
よりも高速になり得ることを示すことができます。
コンピューターで実行時間を比較するには、次のコマンドを実行します。
syms k
tic
sum(sym(1:100000).^2);
toc
tic
symsum(k^2, k, 1, 100000);
toc
symsum
と sum
の出力形式の違い
symsum
は sum
よりも洗練された和の表現を提供できます。この違いは、有限級数 の関数出力の比較によって示されます。解を単純化するため x > 1
と仮定します。
syms x assume(x > 1) S_sum = sum(x.^(1:10)) S_symsum = symsum(x^k, k, 1, 10)
S_sum = x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x S_symsum = x^11/(x - 1) - x/(x - 1)
isAlways
を使用して、出力が等しいことを示します。関数 isAlways
は、logical 1
(true
) を返し、出力が等しいことを示します。
isAlways(S_sum == S_symsum)
ans = logical 1
計算を続行するよう仮定を消去します。
assume(x, 'clear')