コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/c_programming_2018.pdfコンピュータプログラミング入門...

16
コンピュータプログラミング入門 有村秀孝 1 0.レポートの書き方 表紙を付ける.コンピュータプログラミング入門 (x)(xは回), 実習日,学籍番号,氏名 を記入すること.プログラムのアルゴリズムと実行結果,プログラム自体を付けること.1つに まとめてホッチキス止めして提出すること.以上を満たさないレポートは受け取らないコンパイラとテキストエディタのインストール Windows ユーザ: gcc コンパイラ Cygwin インストール: https://www.sw.it.aoyama.ac.jp/2011/CP1/cygwin/ テキストエディタ Terapad のインストール: https://tera-net.com/ Mac ユーザ: gcc コンパイラ Xcode インストール: https://webkaru.net/clang/mac-compiler-gcc-install/ テキストエディタ mi インストール: https://www.mimikaki.net/ 1.C 言語基礎 (1)プログラム作成の流れ プログラミングとは、プログラムを作ることです。作ったプログラムは、一般的には、ソフトウエアと呼 ばれます。ソフトウエアは、コンピュータ(CPU,メモリ、ハードディスクなど)、プリンターなどのハー ドウエアを使って、いろいろな計算、画像処理などを実行します。したがって、ソフトウエア無しに、コン ピュータは動作しません。本演習では主に、画像処理のプログラムを作成します。皆さんが作成したプログ ラムに従って、コンピュータが画像を処理し、その結果を示してくれます。ただし、皆さんが作ったC言語

Upload: others

Post on 24-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

1

0.レポートの書き方 表紙を付ける.コンピュータプログラミング入門 (x)(xは回), 実習日,学籍番号,氏名

を記入すること.プログラムのアルゴリズムと実行結果,プログラム自体を付けること.1つに

まとめてホッチキス止めして提出すること.以上を満たさないレポートは受け取らない.

コンパイラとテキストエディタのインストール Windowsユーザ: gccコンパイラ Cygwinインストール: https://www.sw.it.aoyama.ac.jp/2011/CP1/cygwin/ テキストエディタ Terapadのインストール: https://tera-net.com/ Macユーザ: gccコンパイラ Xcodeインストール: https://webkaru.net/clang/mac-compiler-gcc-install/ テキストエディタ miインストール: https://www.mimikaki.net/ 1.C言語基礎 (1)プログラム作成の流れ プログラミングとは、プログラムを作ることです。作ったプログラムは、一般的には、ソフトウエアと呼

ばれます。ソフトウエアは、コンピュータ(CPU,メモリ、ハードディスクなど)、プリンターなどのハー

ドウエアを使って、いろいろな計算、画像処理などを実行します。したがって、ソフトウエア無しに、コン

ピュータは動作しません。本演習では主に、画像処理のプログラムを作成します。皆さんが作成したプログ

ラムに従って、コンピュータが画像を処理し、その結果を示してくれます。ただし、皆さんが作ったC言語

Page 2: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

2

のプログラムはそのままでは、人間は理解できても、コンピュータは理解できません。皆さんが作るプログ

ラムはソースプログラム(ソースファイル)と呼ばれます。C言語では、*.cという形式にファイルで作成します。そのソースプログラムをコンピュータが理解できるようなデータ形式に変換することをコンパイルと

呼びます。コンパイルした後のファイルは、マシン語の形式になっており、実行ファイルと呼ばれます。

Cygwinでは、*.exeという形式になります。つまり、ソースプログラムをコンパイルすることによって、プログラムを実行することができます。実は、コンパイルの後に「リンク」も実行されます。リンクとは、い

ろいろな標準関数(printf(表示する), scanf(入力する), fopen(ファイルを開く)など、ユーザーが作る必要が無い標準的な関数)のオブジェクトファイル(マシン語の形式に変換されている)を皆さんが作った

プログラムに組み込むことです。以上のことをいかにまとめます。 (1) エディターを使って、ソースプログラム(*.c)作成する。本実習では、エディタとして、TeraP

adを使います。 (2) コンパイラを使って、ソースプログラムをマシン語に変換し、実行ファイルを作成する。本実習

では、コンパイラとして Cygwinの gccを使います。 (3) 実行ファイルを使って、プログラムを実行します。

(2)基本プログラム1とコンパイル・実行の方法 1)基本プログラム1 以下のプログラムを TeraPadで作成してください.字下げをうまく使ってプログラムを書いてください. #include <stdio.h> /* (1) */ int main( ) /* (2) */ { /* (3) */ printf("Hi! How are you?¥n"); /* (4) */ } /* (5) */ TeraPadでファイルの種類は C/C++を選んで、****.cという名前にする。****は適当につける。 この例では、hello.cという名前で保存します。保存先は Cドライブの arimuraとします.Cygwinでのディレクトリ(ホルダ)の移動は以下のように行う. cd /cygdrive/c cd arimura 2)コンパイル方法 Cygwinの gccを用いて、コマンドラインで、つぎのようにタイプし、Enterを押します。以下の例では、hello.cというソースプログラムをコンパイルして、helloという実行ファイルを作ります。 $ gcc –o hello hello.c (-o : この次にある引数は、実行ファイル名を書きます) 3)実行方法 実行ファイル名をコマンドラインに書いて Enterを押します。 $ ./hello Hi! How are you?

Page 3: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

3

4)基本プログラム1の解説 このプログラムはC言語の基本中の基本プログラムです。これを番号順に説明します。 1行目:stdio.h はインクルードファイルと呼ばれるファイルです。インクルードファイルにはいろいろあり、例えば、この stdio.hにはC言語プログラムで使う基本的な関数(例えば、標準出力する関数 printf、ファイルを開く関数 fopen、データを読み込む関数 fread、データを書き込む関数 fwriteなど)の定義が書かれています。他には、数学的な関数 sin( ), cos( )などが定義されている math.hなどもあります。 #include< >はインクルードファイルをここに読み込むという命令文です。このファイルを読み込むこと(インクルード)をしないと、こ

れらの基本的な関数を使えません。/* */で囲んだものはコメント文として処理されます。 2行目:C言語のプログラムは必ず main関数1つを持ちます。main関数の3と5行目の{ }の中にいろいろな処理を書いていきます。main関数の{ }を忘れないようにしてください. 3行目:printf は画面に文字列、数を出力したいときに用います。stdio.h に定義されている基本関数の一つです。“Hi! How are you?¥n”のようにダブルコーテーションで囲んだ文字列を出力します.¥nは改行するためのコードです。 (3)基本プログラム2 エディタを使って、「二つの整数の足し算をする」プログラムを作成します。 プログラム例(右側の説明はアルゴリズム)を以下に示します。 #include <stdio.h> /* (1) stdio.hを読み込む*/ int main(int argc, char *argv[]) /* (2) main関数の定義*/ { int a, b, c; /* (3) 変数宣言(a, b, cを使えるようにする)*/ a=atoi(argv[1]); /* (4) argv[1]の文字列を atoiの関数を用いて整数型の数値へ変換する*/ b=atoi(argv[2]); /* (5) argv[2]の文字列を atoiの関数を用いて整数型の数値へ変換する*/ c=a+b; /* (6) a+bを実行し、その結果を cへ代入する */ printf("sum = %d¥n", c); /* (7) “sum=cの値(十進数)”を、printf関数を用いて表示する */ } 2)コンパイル方法 $ gcc –o cal_sum cal_sum.c 3)実行方法 $ ./cal_sum 10 20 sum = 30 このプログラムもC言語のの基本プログラムです。これを番号順に説明します。 2行目:上記で説明しましたように,C言語のプログラムは必ず main関数1つを持ちます。この main関数は関数なので引数をとることができます。

Page 4: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

4

int main(int argc, char *argv[]) /* (2) */ int argc コマンドラインに並べた引数の数を入れる変数です。実行プログラムを含みます。intは「argcは整数型として使います」という意味です。 char argv[ ] コマンドラインに並べた引数の文字列を入れる配列変数です。引数が順番に入ります。charは「*argv[ ]は文字列型として使います」という意味です。 例えば、以下のようにプログラムを実行すると、 $ ./cal_sum.exe 10 20 以下のように代入されます。 argc = 3 argv[0]=’cal_sum’ argv[1]=’10’ argv[2]=’20’ 3行目:ここにはプログラムで使いたい変数をまず記述します。これを変数宣言といいます。例の場合、二つ

の整数の合計を計算するので、それらの変数を aと bとし、整数型の int型で宣言しています。C言語の文の

終わりには必ずセミコロン「;」を付けます。

4行目:argv[1]と argv[2]に入っている文字列を整数に変換するために atoi( )関数を用いています。ascii to integerの略です。戻り値は変換された整数になります。例の場合、a=atoi(argv[1]);では argv[1]に’10’が入っていたら、aには整数10が代入されます。 5行目:これは「aとbを足して、その結果をcに代入する」と意味です。cはa+bに等しいという意味で

はありません。 6行目:文字列だけでなく,printfは画面に計算結果の数値を出力したいときにも使えます。%dは出力するデータを符号付き整数(int型)と解釈して、10進数に変換します。この場合、cを10進数に変換して’sum=’の次に出力します。¥nは改行するためのコードです。 (4)変数宣言 プログラムで使いたい変数をまず記述します。これを変数宣言といいます。変数の型として主に以下のような

ものがあります。 int 整数型の変数に用いる。通常、4バイト。 符号付き(signed): -231(2147483648) ~ 231 – 1 (2147483647)、

符号無し(unsigned): 0 ~ 4294967296 short intより短い整数型。通常、2バイト。16ビット画像データを扱うときによく用いる。 符号付き(signed): -32768 ~ 32767、

符号無し(unsigned): 0 ~ 65535

Page 5: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

5

float 実数型の変数に用いる。通常、4バイト。 1e-38~1e+38

double 倍長実数型の変数に用いる。通常、8バイト。 1e-307~1e+308

char 1バイトの変数(通常、文字列の変数)に用いる。通常、1バイト。 (5)レポート課題 基本プログラム2で aと bに非常に大きな値を入力した場合,足し算の結果が間違う場合があります.理由を考えて,「変数の型とオーバーフロー」のレポートとして提出してください.提出日は、次回の演習時。

Page 6: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

6

2.ループ演算(1)

(1) for 文 ~指定回数くり返す~

「指定回数くり返す」ということを得意とする制御文があります。それが for文です。

for(式1;式2;式3) 文

for文は while文の拡張版と考えて差し支えありません。この文を whileで書き直すとこうなります。

式1; while(式2){ 文 式3; }

例を以下に示します。

#include <stdio.h> main() { int i; for(i = 0; i < 10; i++){ printf("i = %d¥n", i); } printf("end.¥n"); }

この例は、一番オーソドックスな for文の使い方です。ではこのプログラムがどう動いているのか、順を追

って説明します。while文で書き直した図を見ながら理解してください。

1. まず「式1」を評価(実行)するので、iは0になります。

2. 次に「式2」を評価します。この時iは0ですから条件は成り立ちます。

Page 7: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

7

3. よって「文」を実行します。つまり画面にiの内容が表示されます。

4. 次に「式3」を評価(実行)、つまりここではiが1増えて、iの内容は1になります。

5. これをくり返して、「式3」によってiが10になったときに、このループから抜け出します。

適用例

1. 数学の∑ は for文で計算できます.例えば,平均値(𝑓̅ = &'∑ 𝑓('()& )や分散(𝜎, = &

'∑ -𝑓( − 𝑓̅/

,'()& )を求めると

き. 2. 画像ファイルからピクセル値をピクセルごとに読み込むときに用いる. 3. フィルタ処理(畳み込み積分)の計算

課題1 1から 10までの足し算を求めてみる

S =1𝑖&3

()&

課題2.0.1を 100回足してみる(実数型の float と double, まるめ誤差)

S =10.1&33

()&

レポート課題 課題2の結果に基づいて,まるめ誤差についてまとめ,レポートとして提出してください。

Page 8: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

8

3.ループ演算(2) 課題1 for文を用いて、char型、short型、int型の変数における、階乗(n! = ∏ 𝑖:

()& = 1 ∙ 2 ∙ 3 ∙ ⋯ ∙ n)を求めてください。ただし n=20としてください。(階乗計算、変数の型とオーバーフロー) 課題2 ネイピアの数(自然対数の底)e(2.71828 18284 59045 23536 02874 71352…)を、マクローリン展開を使って、求めてみる。(for文) マクローリン展開

𝑓(𝑥) =@1𝑛! 𝑓

(:)(0)𝑥:B

:)3

𝑒D =1𝑥(

𝑖!

B

()3

= 1 +𝑥1! +

𝑥,

2! +𝑥F

3! + ⋯+𝑥:

𝑛! +⋯ , −∞ < 𝑥 < ∞

𝑒 =11𝑖!

:

()3

= 1 +11! +

12! +

13! + ⋯+

1𝑛!

上記の式とfor文を使って、ネイピアの数(自然対数の底)eの値を求めてください。 レポート課題 半径1の4分の1円の面積を求めることで,“π”の値を求めるプログラムを作成してください.二乗は x*xか pow(x, 2)です.√は sqrt( )()内は double型です.

Page 9: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

9

4.文字列と制御文 課題1 名前を表示してみる。(配列) 配列 char name[10]; /* 10個の nameの入れものができる。つまり、name[0], name[1], ,,,, name[9]で、name[9]には、NULLというコードが入る。NULLはここで終わりという意味。 したがって、入力したい文字数+1個分の入れ物が必要。

例えば、strcpy(name, “Hide”); とすると、 name[0] => “H” name[1] => “i” name[2] => “d” name[3] => “e” name[4] => NULL

例を以下に示します。

#include <stdio.h> #define MAX_NAME_LENGTH 30 main() { int i; char name[MAX_NAME_LENGTH]; strcpy(name, "Your Name"); for(i = 0; i <= strlen(name); i++){ printf("name[%d] => %c¥n", i, name[i]); } printf("end.¥n");

Page 10: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

10

} 上記のプログラム中の strcpy(name, "Your Name");において、"Your Name"のところを自分の名前に書き換えて

ください。ただし名前は半角英数字で入力してください。 また for 文を変更して、名前を逆の順序で作成してください。ただしNULL文字は表示させない。 <表示例> name[3] => “e” name[2] => “d” name[1] => “i” name[0] => “H” 課題2 double型の配列に適当な5個の実数を入れて、その中の最小値を求めてみる。

(配列、for文と if文) if文 制御の流れを分岐させるときの方法の一つとして、if文があります。 一般的な構文は if(式) {文}; 式が真ならば文を実行。(0以外は真) if(式) {文1}; else {文2}; 式が真ならば文1を実行、偽ならば文2を実行。

Page 11: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

11

式としては一般的には次のようなものになります。 式1 関係演算子 式2 式1 論理演算子 式2 具体的には次のようなものが考えられるでしょう。 A = = B Aが Bに等しいならば真。 A != B Aが Bに等しくないならば真。 A < B Aが Bより小さいならば真。 A >= B Aが B以上ならば真。 式1 && 式2 式1 かつ 式2の両方成り立つならば真。 式1 || 式2 式1 または 式2のどちらか成り立つならば真。 最大値を求めるプログラムの例 #include <stdio.h> main() { int i; double MaxValue;

double value[5] = {1.2, 3.4, 2.3, 5.1, 0.7}; MaxValue = 0.0;

for(i = 0; i < 5; i++){ if(MaxValue < value[i]){ MaxValue = value[i]; printf("value[%d] => %f¥n", i, value[i]); } } printf("Maximum value : %f ¥n", MaxValue); }

上記の最大値を求めるプログラム例をヒントにして、最小値を求めるプログラムを作成してください。 課題3 上記の最大値を求めるプログラム例を修正して、5個の実数の平均値を求めるプログラムを作成し

てください。平均値の式は𝒇K = 𝟏𝑵∑ 𝒇𝒊𝑵𝒊)𝟏 です.

Page 12: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

12

5.ループ演算と制御文 課題1 以下の 10 人分の身長のデータに対し、double 型の配列を用い、平均値、標準偏差 (σ =

Q&'∑ -𝑓( − 𝑓/̅

,'()& )を求め、平均値で2値化するプログラムを作成してください。(if文, sqrt関数, pow関数)

150.1, 186.4, 174.2, 189.9, 169.6, 159.2, 163.8, 156.9, 173.2, 167.4 (1)ルートの関数は、 sqrt( ここには double型の変数を入れる) です。 たとえば、

A = sqrt(2.0); printf(“A = %f ¥n”, A);

と書くと、実行結果は、 A=1.414…..

と表示されるはず。 (2)xのy乗を求めるために、powを使います。 Z = pow(x, y); Z, x, yは、すべて double型です。 注意! sqrt、powを使うために math.hをインクルードします。コンパイルする際は、最後に –lm を追加。 例) gcc –o kadai7 kadai7. c –lm 課題2 上記の課題1で作成したプログラムにおいて、平均値を求める関数を作成して、プログラムを書き

換えてください。(関数) 関数 C言語でのプログラムは「関数」という小さなプログラムの集まりで構成されます。 main() も関数ですし、

printf() や 上記の課題で用いた、pow()や sqrt()も関数です。 関数とは、いくつかの引数を受けて計算を行い、その結果を返すもので、何らかの値を与えると、それに応

じた値が返ってくる。関数は計算結果としてなんらかの型(intや char、double など)を持つ値を返します。しかし、型のない関数(つまり値を返さない関数)も存在します。 printf() などの標準関数は、すでに用意されている関数なので、プログラム中で単に呼び出すだけでよいのですが(実際には#include <stdio.h>によって標準関数についての読み込みが必要)、標準関数に用意

されていない関数は、自分で作らなければなりません。関数の定義は以下のとおりです。 [関数の型] 関数名[引数の宣言] { 関数本体 [return 返す値] } 関数の型とは、関数が返す値の型で、関数が扱う変数の型ではありません。関数名は、printfなどといった名前です。printf関数に渡していたデータを引数 といいます。

Page 13: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

13

関数が返す値を決めるものが return です。値を返すことで関数の働きは終了するのですから、このreturn 文で関数の実行が終了します。

関数が正しく設定され、利用されているかチェックするものに関数プロトタイプ宣言があります。関数プロト

タイプ宣言とは、関数の引数の数とその型、そして関数自身が返す値の型をあらかじめ宣言することです。コ

ンパイラは、関数と関数プロトタイプ宣言されたものと比較し、変数の数や戻り値の型が等しくなければエラ

ーを出します。 2ページの「二つの整数の足し算をするプログラム」を例に、「足し算」の関数を作成する例を示します。 #include <stdio.h> /* (1) */ int main(int argc, char *argv[]) /* (2) */ { int a, b, c; /* (3) */ a=atoi(argv[1]); /* (4) */ b=atoi(argv[2]); c=a+b; /* (5) */ printf("sum = %d¥n", c); /* (6) */ } 手順1.関数名、関数の返り値、引数を決める。 例)関数名→wa、関数の返り値の型→ int、引数の型→ int 、引数の個数→2個 手順 2.関数を定義する。 前頁の「関数の定義」を参考に定義する。 int wa(int a, int b){ } 手順3.関数を main()関数の外側に書く。 手順4.関数本体を作成。 関数 waは「二つの int型の引数を足して、intの値を返す」という役割なので、関数本体は以下のようになる。 int wa(int a, int b){ int c; c = a+b; return c; } 手順5.プロトタイプ宣言を関数の前に書く。 関数名、関数の戻り値の型、引数の型、個数を書く。 int wa(int a, int b); 手順6.main関数で呼び出す。

Page 14: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

14

6.演習(1) 課題1 角度 θ[度]を入力し、sinθ,cosθ,tanθの計算結果を出力するプログラムを作成してください。 C言語での三角関数は、以下のとおりです。 double sin(double x) double cos(double x) double tan(double x) 引数の単位はラジアンです。 数学関数を使用するためには #include <math.h> として math.h というヘッダをインクルードする必要があります。また、コンパイル時は最後に –lm を追加。 例) gcc –o kadai9 kadai9. c –lm 課題2 次の微分方程式をオイラー法とルンゲクッタ法を使って解いてください。またそれぞれの方法によ

って得られた数値解の精度を理論値(解析的に解いた解の式から求めた値)と比較してください。

常微分方程式の数値計算 物理学や工学において、導関数を含む関係式が与えられているとき、このような関係式を満たす関数を求め

る必要がしばしば生じます。導関数を含む関係式から、関数そのものを求めるとき、導関数を含む関係式を微

分方程式といい、微分方程式に含まれる導関数が、一つの変数による微分であるとき、常微分方程式といいま

す。 常微分方程式の数値解は,以下のようにして求めます。

を数値的に解くということは、 t = t0 = 0 で x=x0 から出発して,t = t1, t2, ……, tk, ….., tn での xの数値 x = x1, x2, ……, xk, ….., xn を求めていくことである。ただし とする。 オイラー法 ルンゲクッタ法

xdtdx

= 05.0,10,1)0( =££= htx

),( txfdtdx

= t = 0 で x=x0

htt ii =-+1

)(1 kkkk txhfxx ++=+

)22(61

43211 kkkkhxx kk ++++=+

Page 15: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

15

),(

)2

,2

(

)2

,2

(

),(

34

23

12

1

hthkxfk

hthkxfk

hthkxfk

txfk

kk

kk

kk

kk

++=

++=

++=

=

Page 16: コンピュータプログラミング入門web.shs.kyushu-u.ac.jp/~arimura/C_Programming_2018.pdfコンピュータプログラミング入門 有村秀孝 3 4)基本プログラム1の解説

コンピュータプログラミング入門 有村秀孝

16

7.演習(2) 課題1 以下に示す範囲の f(x)をフーリエ級数展開してみましょう。 また級数において第 N 項まで求める際、N=10、20、30とした場合の結果を比較してください。

フーリエ級数展開 区間[-p, p] における積分可能な関数 f(x)は次のように展開することが可能です。

このように表現されるとき、上式の an、bnは以下のように与えられる。

<手順1> a0、an、bnを求める。 <手順2> a0、an、bnをフーリエ級数展開の式に代入し、関数 f(x)を sinと cosで表現する。