先週の課題1と同じ5点の点群データを用いて,ラグランジュ補間を行ってみよう.
(n+1 点の点群から n次関数が決定できる.ここでは5点があるので,4次関数を決定する.)
上記の関数および下記を参考に,x の値を -4.0 から 3.0 まで,0.1 ずつ増加させてそれぞれ y を計算し,グラフを書け.
下記を参考に,ソースコードおよびExcelファイルを提出せよ.
struct Point2D
{
double x;
double y;
};
int main()
{
const int N = 5;
Point2D points[N] = {
{-3.5, -2.2},
{-2.2, -0.3},
{-1.0, 1.5},
{ 0.2, 1.9},
{ 2.3, 2.2}
};
/* xの値を変化させながら LagrangeInterp 関数により y の値を順次計算,出力 */
}
以下に計算結果の一例を示す.
図1.補間結果.赤点が既知の制御点,黒丸が補間により求めた点群である.
Excelの機能で,補間により求めた点を線で接続している.
参考までに,以下の手順でグラフを作成すると良い.
詳しくは各自でExcelのオンラインヘルプを参照のこと.
スプライン補間の詳細なアルゴリズムは以下のソースコードおよび各種文献を参照すること.
153R000000?04?2.cpp
このソースコードを使用して,課題1と同様に5点の補間を行い,x の値を -4.0 から 3.0 まで,0.1 ずつ増加させてそれぞれ y を計算し,グラフを書け.
下記を参考に,ソースコードおよびExcelファイルを提出せよ.
また,ラグランジュ補間の結果と比較せよ.
以下に計算結果の一例を示す.
図2.補間結果,図1のラグランジ補間とスプライン補間の比較.赤点が既知の制御点である.
補間法により,通過する位置が大きく異なる区間がある.
以下は提出課題としては必須ではないが,補間法についてより深く勉強したい諸君のために,関連する課題を示しておく.
解説
1.
補間法の基本は点群(制御点)の各点を必ず通過し,かつ制御点間はカーブを描くように
2.
点群をカーブで結ぶためには最低3点が必要であるが,3点だけであれば2次でよい.4点以上の点群において任意の3点を選択しつつ滑らかに保管するためには
3.
前後の点群
点群同士が影響しあい