Main Content

シンボリックな総和

Symbolic Math Toolbox™ には、和を計算するために次の 2 つの関数が用意されています。

  • sum はシンボリック ベクトルと行列の要素の和を求めます。MATLAB®sum とは異なり、シンボリック関数 sum は多次元配列に対して機能しません。詳細は、MATLAB の sum ページに従います。

  • symsum はシンボリック級数の和を求めます。

symsumsum の比較

sumsymsum のいずれを使用しても、総和 (definite sum) を求めることができます。関数 sum は入力の和を次元について計算するのに対して、関数 symsum は入力の和をインデックスについて計算します。

総和 (definite sum) S=k=1101k2. について考えます。まず、式の 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 を使用し、インデックスと総和の範囲を指定して、同じ和を求めます。sumsymsum は同一の結果を返します。

S_symsum = symsum(f, k, 1, 10)
S_symsum =
1968329/1270080

symsumsum の計算速度

有限級数の和を求める場合は、symsum の方が sum よりも高速な場合があります。無限級数の和を求める場合は、symsum のみが使用できます。

S=k=1100000k2. などの上限値が大きな有限級数の和を求めることによって、symsumsum よりも高速になり得ることを示すことができます。

コンピューターで実行時間を比較するには、次のコマンドを実行します。

syms k
tic
sum(sym(1:100000).^2);
toc
tic
symsum(k^2, k, 1, 100000);
toc

symsumsum の出力形式の違い

symsumsum よりも洗練された和の表現を提供できます。この違いは、有限級数 S=k=110xk. の関数出力の比較によって示されます。解を単純化するため 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')