シンボリックな総和
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);
tocsymsum と 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')