総和(summation,記号 Σ)の計算は, プログラムで実装するのがとても簡単です. forループで回して足し合わせればよいだけです.
という総和記号があった場合,実際には
と足し算で計算する決まりになっています. Σ の下の記号からはじまって,1ずつ増やしながら上の記号まで足すのです. これがそのままアルゴリズムです.
数学の公式から
となることが分かっています. 数値計算で純粋に足し算計算したものと, この公式で計算したものとを比較してみます. n は変数ですのでこのままでは計算できませんから, ここでは n = 10 の場合を計算しておきます.
まず,公式を利用した場合ですが,n=10とおくと
(1) | ||
(2) | ||
(3) |
となります.これが解析解です.
実際にプログラムを書いてみます. 赤字が直接アルゴリズムに関係した部分です.
#include <stdio.h> #define N 10 int func(int n) { return n; } int main(void) { int sum = 0, i; for (i=1; i<=N; i++) { sum += func(i); } printf("sum = %d\n", sum); return 0; }
これをコンパイルして実行すると
sum = 55
という結果が表示されます.いまのプログラムは, 関数 func で n を返すように設定しています. ですからこれは,式 (1) の結果です. 式 (2) の計算するには n*n を返すように, 式 (3) を計算するには n*n*n を返すようにすればいいです.
いまは整数の計算なのですべて int 型で宣言していますが, 一般には整数でないことが多いです. その場合は double 型で宣言しておきます.