スプレッドシートのSERIESSUM関数の使い方|係数の自動生成と近似誤差

スポンサーリンク

「多項式やべき級数をスプレッドシートで計算したいけれど、POWERを何個も並べるのは面倒……」。そんなふうに感じたことはありませんか?

項数が増えるほど式は長くなり、係数の打ち間違いにも気づきにくくなります。公式ヘルプの例を真似ると、eの近似のつもりが「34」になることも。

この記事では、GoogleスプレッドシートのSERIESSUM関数を構文と係数の順番から解説します。SEQUENCEで係数を自動生成する式や、項数ごとの誤差表もコピペできる形で紹介しますね。

スプレッドシートのSERIESSUM関数とは?構文と引数(x, n, m, 係数)の意味

SERIESSUM関数(読み方: シリーズサム)は、べき級数の和を返す関数です。名前は「Series(級数)」と「Sum(合計)」の組み合わせ。xのべき乗に係数を掛けて全部足す計算を、1つのセルで済ませられます。

=SERIESSUM(x, n, m, 係数)

引数は4つとも必須です。公式ヘルプの「a」を、この記事では「係数」と呼びますね。

べき級数と引数の対応表

引数意味指定の例
xべき級数に代入する値2、PI()/6 など
n最初の項の指数0なら定数項から始まる
m項が1つ進むごとに増える指数の幅1なら指数は0, 1, 2…
係数各項に掛ける数の配列またはセル範囲{5, 2, 3}、A1:A4 など

mは「指数の増分」と覚えるのがコツ。計算される式は次の形です。

係数1 × x^n + 係数2 × x^(n+m) + 係数3 × x^(n+2m) + …

係数は低次の項から並べる・個数が項数を決める

つまずきやすいのが係数の順番です。1番目の係数がx^nに、2番目がx^(n+m)に掛かります。n=0なら定数項→1次→2次の順で、ふだんの書き方とは逆向き。

また、項数を指定する引数はありません。係数の個数がそのまま項数になり、5個渡せば5項の和に。

途中の次数を飛ばすときは、その位置に0を入れます。2x^2+1なら係数は{1, 0, 2}です。空白セルは詰めて計算されるので注意しましょう(エラー対処の節で解説)。

SERIESSUM関数の基本的な使い方

ここからは実際に数式を入れて、動きを確かめます。この節の結果は、Googleスプレッドシートで計算した値です。

多項式 3x^2+2x+5 を計算する(配列リテラル)

多項式3x^2+2x+5に、x=2を代入した値を求めてみましょう。係数は定数項の5から並べて{5, 2, 3}と書きます。

=SERIESSUM(2, 0, 1, {5, 2, 3})

結果は21です。展開すると5×2^0+2×2^1+3×2^2=5+4+12=21で、ふつうに計算した値と一致しますね。

係数を{3, 2, 5}と見た目どおりに並べると、3+2x+5x^2の値の27が返ります。エラーにならないぶん、順番の間違いには気づきにくいもの。

係数をセル範囲で指定する

係数が多いときは、セルに入れておくと管理がラクです。A1〜A4に係数を入れた例で試します。

セル係数対応する項
A11x^0
A2−3x^1
A32x^2
A45x^3
=SERIESSUM(3, 0, 1, A1:A4)

結果は145です。内訳は1×3^0+(−3)×3^1+2×3^2+5×3^3=1−9+18+135。セルを書き換えれば、結果も自動で更新されるのが便利なところ。

2次元の範囲も指定できます。A1:B2に「1, 2」(1行目)と「3, 4」(2行目)を入れた例です。

=SERIESSUM(2, 0, 1, A1:B2)

結果は49で、1→2→3→4の行優先で読まれました(列優先の1→3→2→4なら47)。迷わないよう、係数は1列か1行にまとめるのが安全でしょう。

SEQUENCE・FACT・ARRAYFORMULAで係数を自動生成する

ここからはスプレッドシートならではの使い方。配列を作る関数と組み合わせれば、係数を手で書く必要がなくなります。

SEQUENCE+FACTで1/n!の係数を作る

e^xの近似に使う係数は、1/0!, 1/1!, 1/2!…と続きます。項数が増えると、手で書くのはつらいところ。

そこでSEQUENCEで0から始まる連番を作り、FACT関数で階乗にしてから逆数を取ります。

=SERIESSUM(1, 0, 1, ARRAYFORMULA(1/FACT(SEQUENCE(1, 6, 0))))

結果は2.71666666666667で、eの6項近似になります。SEQUENCE(1, 6, 0)は「1行・6列・0から開始」という意味。項数を変えたいときは、2つ目の6を書き換えるだけで済みます。

WARNING

ARRAYFORMULAを外すと、結果は1になります。先頭の1項(1/0!)だけで計算され、エラーも出ません。係数を計算式で作るときは、必ずARRAYFORMULAで囲んでください。

ちなみに、Google公式ヘルプには次の例が載っています。

=SERIESSUM(1, 0, 1, {FACT(0), FACT(1), FACT(2), FACT(3), FACT(4)})

結果は34です。0!+1!+2!+3!+4!=1+1+2+6+24という階乗の和なので、eにはなりません。e^xにしたいなら、上の式のように逆数にしましょう。

縦向きの配列でも計算できます。次の式はe^2の6項近似で、結果は7.26666666666667でした。

=SERIESSUM(2, 0, 1, ARRAYFORMULA(1/FACT(SEQUENCE(6, 1, 0))))

ARRAYFORMULAで複数のxを一括計算する

1+x+x^2に、x=1, 2, 3をまとめて代入してみましょう。

=ARRAYFORMULA(SERIESSUM({1;2;3}, 0, 1, {1, 1, 1}))

結果は3行にスピルし、上から3(1+1+1)、7(1+2+4)、13(1+3+9)が返ります。{1;2;3}の代わりにA2:A4などのセル範囲を渡してもスピルしました。ARRAYFORMULAを付けないと、先頭のx=1の結果3だけになるので注意。

MAPとLAMBDAを使う書き方でも、同じ3行の結果が得られます。

=MAP({1;2;3}, LAMBDA(x, SERIESSUM(x, 0, 1, {1, 1, 1})))

「xを1つずつ取り出して計算する」流れが読み取りやすいのが、こちらの良さです。

n・mで偶数次・奇数次だけを足す

mを2にすると、指数が1つ飛ばしになります。n=0, m=2なら偶数次(x^0, x^2, x^4…)だけの和です。

=SERIESSUM(2, 0, 2, {1, 1, 1})

結果は21(1+2^2+2^4)。奇数次だけなら、n=1, m=2で指数を1, 3, 5…にします。次の節のsinの近似がこの形です。

nには小数、mには負数や0も指定できました。

式結果計算の中身
=SERIESSUM(2, 0.5, 1, {1, 1})4.242640687119292^0.5+2^1.5
=SERIESSUM(2, 0, -1, {1, 1, 1})1.751+2^−1+2^−2
=SERIESSUM(2, 0, 0, {1, 1, 1})3全項がx^0
=SERIESSUM(0, 0, 1, {7, 1, 1})70^0は1扱いで定数項が残る

sin・e^xを近似計算して項数ごとの誤差を確かめる

SERIESSUM関数の代表的な用途が、テイラー展開による近似計算です。項数を増やすと誤差がどれだけ減るのか、表で確かめてみましょう。

e^1の誤差表(項数2〜8・EXP(1)との差)

A列に項数(2〜8)を入れ、B列とC列に次の式を入れて下にコピーします。基準値にはEXP関数のEXP(1)を使いました。

B2: =SERIESSUM(1, 0, 1, ARRAYFORMULA(1/FACT(SEQUENCE(1, A2, 0))))
C2: =EXP(1)-B2

計算結果がこちら。

項数SERIESSUMの値EXP(1)との差
220.7182818
32.50.2182818
42.666666666666670.0516152
52.708333333333330.0099485
62.716666666666670.0016152
72.718055555555560.0002263
82.718253968253970.0000279

項数5・6・8はスプレッドシートの計算値、ほかは同じ計算を手元で行った値です。差の列は小数第7位までに丸めました。

項数を1つ増やすたびに、差は前の行の約3〜8分の1まで縮んでいます。8項では差が約0.00003となり、小数第4位まではeと同じ値に。必要な精度に合わせて、SEQUENCEの項数を決めるとよいでしょう。

sin(π/6)の近似

sin xのテイラー展開は、x−x^3/3!+x^5/5!−x^7/7!…と奇数次だけが並びます。そのためn=1, m=2にして、係数に符号付きの1/k!を渡しましょう。

=SERIESSUM(PI()/6, 1, 2, {1, -1/6, 1/120, -1/5040})

PI()/6は30度をラジアンで表した値です。係数は順に1/1!, −1/3!, 1/5!, −1/7!で、指数は1, 3, 5, 7と増えていきます。

結果は0.499999991869023。sin 30°=0.5との差は約−8.13×10^−9で、4項でも1億分の1未満の誤差に収まりました。

SERIESSUM関数の使い分けとエラー対処・よくある質問

最後に、似た関数との違いとエラーの対処をまとめます。エラーが出ないまま値がずれるケースも、あわせて押さえておきましょう。

POWER・SUMSQ・SUMPRODUCTとの使い分け

関数得意なことSERIESSUMとの違い
SERIESSUMべき級数・多項式の和指数の始まりと増分、係数をまとめて指定
POWER1つのべき乗x^nを1つ返すだけ。和は自分で足す
SUMSQ平方和指数は2で固定
SUMPRODUCT配列どうしの積の和べき乗の計算は含まない

たとえば最初の3x^2+2x+5をPOWERで書くと、次のようになります。

=5 + 2*POWER(2, 1) + 3*POWER(2, 2)

結果は同じ21ですが、項が増えるほど式は長くなる一方。項数が多いなら、SERIESSUMの方が見通しやすいでしょう。

エラーと対処

まずはエラーの種類ごとの原因と対処から。

エラー原因式の例対処
#VALUE!xが文字列=SERIESSUM(“abc”, 0, 1, {1, 2})xに数値を指定する
#VALUE!係数の範囲に文字列のセルがある範囲の途中に「a」など数値に直す
#VALUE!配列リテラルに空文字列=SERIESSUM(2, 0, 1, {1, “”, 2})“”を0に置き換える
#NUM!0の負のべき乗=SERIESSUM(0, -1, 1, {1, 2})x=0ならnを0以上にする
#NUM!負のxの分数べき=SERIESSUM(-8, 1/3, 1, {1})nとmを整数にする
#N/A引数が足りない=SERIESSUM(2, 0, 1)4つ目の係数を指定する

やっかいなのは、エラーが出ないまま値がずれるケースです。代表的な3パターンを並べておきます。

=SERIESSUM(2, 0, 1, {3, 2, 5})   → 27(係数が逆順。正しくは {5, 2, 3} で 21)
=SERIESSUM(1, 0, 1, 1/FACT(SEQUENCE(1, 6, 0)))   → 1(ARRAYFORMULAの付け忘れ)
=SERIESSUM(2, 0, 1, A1:A3)   → 5(A1=1、A2が空白、A3=2)

3つ目は空白セルが詰めて扱われ、1+2×2^1=5になりました。0とみなすなら1+0×2+2×4=9のはずです。抜けた次数のセルには、必ず0を入力しておきましょう。

一方、配列リテラル内の""は#VALUE!になります(上の表)。同じ「空」でも扱いが違う点に注意してください。

FAQ

Q. 係数が1つだけでも使えますか?

A. 使えます。=SERIESSUM(2, 0, 1, 5) の結果は5で、5×2^0の1項だけの計算です。

Q. Excelでも同じ式が使えますか?

A. Excelにも同名の関数があります。ただし、この記事の結果はスプレッドシートで確かめたもので、Excelでの挙動は未確認です。Excelで使う場合はExcelのSERIESSUM関数の使い方を参考にしてください。

まとめ

SERIESSUM関数は、xのべき乗に係数を掛けて足し合わせる計算を、1つの式で済ませられる関数です。スプレッドシートでは、SEQUENCEやARRAYFORMULAと組み合わせると係数づくりまで自動化できます。

  • 構文は=SERIESSUM(x, n, m, 係数)で、4つの引数はすべて必須
  • 係数は低次の項から並べ、個数がそのまま項数になる
  • 計算で作る係数はARRAYFORMULAで囲む。外すと先頭の1項だけになる
  • 空白セルは詰めて扱われるので、抜けた次数には0を入れる(2次元の範囲は行優先)
  • 公式ヘルプの階乗の例は34になる。e^xの近似には1/k!を使う
  • 複数のxを一度に計算するなら、ARRAYFORMULAかMAP+LAMBDAでスピルさせる

まずは誤差表の式をコピーして、項数を変えながら近似の様子を眺めてみてください。関連する数学関数もあわせてチェックすると、計算の幅がぐっと広がりますよ。

タイトルとURLをコピーしました