.NET Visual C#言語入門 > ある物体の振動を計測した実験データを分析する
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
例えば、ある物体の振動を計測した実験データがあります。
データをグラフ化すると、時間経過と共に振幅が減衰していくのがわかります。
問題:「ある実験結果のデータ2,500個が記録されたファイルがあります。このファイルからデータを読み込み、5周期分の最大点・値と最小点・値を求め、結果をファイルに出力するプログラムを作りなさい。ただし、波形はマイナス側からはじまる場合も考慮しなさい。」
グラフを拡大すれば、手作業でもできる単純作業です・・・。
プログラムを作りなさい。・・・そういわれると皆さんまじめです。プログラムからはじめてしまうのです。でも、ちょっと待ってください。何を根拠にしてプログラムを考えることができるのでしょうか?
2,500個のデータから±ピーク点をどのようにして求めればいいのかわかっていますか?プログラムを書いて行けばわかるだろうと、ファイルからデータを読むことに執着したり、画面に向かって考えているだけの人もいます。皆さん優秀なのに、いざプログラミングと聞くと混乱してしまうのです。
その前に、データを調べましょう。2500の浮動小数のデータが改行付きで記録されている。複数のファイルがあり、0以上のデータ、0以下(負数)のデータ、0をはさんで±のデータ、上昇波形からはじまるデータ、下降波形からはじまるデータと様々です。
そして、グラフをよく見るとノイズがありきれいな波形になっていません。拡大(上図の350点目前後)してみると・・・
グラフから手作業で±ピーク点を見つけるのは簡単です。拡大して±ピーク点と値をグラフから読み取ればいいだけです。もし数値データのみで判断しようとしたら・・・大変なことになります。、
0.855865
0.854645
0.854034
0.853424
0.854797
0.853577
0.852814
0.852661
0.851898
0.854187
0.854797
0.854797
0.852356
0.852051
さらに、ファイルが3000ファイルあったとしたらどうでしょう?
手作業で、1データに付き、±5つのピーク点を見つけて記録していかなければなりません。これを3000回繰り返すことになります。
さらに、ファイルがが増えたら・・・もはや、手作業では無理です。こんな単調な作業はやりたくはありません。
プログラムで対応したくなります。・・・つまり「自動化」です。
ここですぐに画面に向かうのではなく、考えなければならないことがあります。人は、直感的にわかりやすくするためにグラフを利用しました。
もし正確さを求める場合、グラフで当たりを付けた位置の前後の数値データを確認して本当の点を見つけなければなりません。
プログラムの場合も同様(グラフではなく)数値のみで判断することになりますが、どのようにして、5つの波形の±ピーク点を見つければいいのでしょうか?
論理的に考えてみてください。・・・プログラムではないですよ。
最大点、最小点を数値だけで±ピーク点を判断しなければなりません。
もし、判断する方法が見つからなければ、プログラムは永遠に書けません。プログラムが書けない、わからない・・・この状況の場合が大半です。プログラミングが苦手というよりも、論理を考えるのが苦手ということになるのですが、トレーニングを積むことで一般プログラミングに支障のないレベルに到達できます。
事前にデータを調べ、机上で解法を考えることの重要性がわかってもらえたでしょうか?
この解法のことを、狭義ではアルゴリズム、広義ではロジックと呼びます。解法を考えて、それをプログラムコードに変換して解法の正しさを検証する。実際に行ってみると、間違っていたり漏れがあったりするかもしれません。その時には、実行結果をよく見て解法を考え直す。といった作業を繰り返して完全な解法を見つけ出せばいいのです。これがプログラミングです。