注意:以下の課題については,完成したソースファイル,および,グラフを作成した .xlsx ファイルを提出すること.
Point2D points[N] = {{-3.5, -2.2}, {-2.2, -0.3}, {-1.0, 1.5}, { 0.2, 1.9}, { 2.3, 2.2} };
課題の準備で用いた上記の点群データ5点を用いて,各区間(計4区間)を通る
1 次関数を,式(1)を用いて求めよ.
計算結果として,$x^0$ および $x^1$ の係数(つまり「切片」と「傾き」)を画面に表示せよ.
ソースファイルのみ提出すればよい.
可能であれば,計算結果が正しいかどうか,グラフ用紙上,またはExcelで検証すること.
(得られた切片と傾きから直線を書き,直線上に2点が存在するかを確認.)
実行結果(数値は例であり,正しいとは限らない) | 切片 傾き --------+------------------ 区間1 | 5.234 0.222 区間2 | 2.333 1.333 区間3 | -1.133 3.444 区間4 | 2.334 2.111
ソースファイル 153R000000-04-1.cpp を提出.
同様の5点の点群データを用いて,ラグランジュ補間を行ってみよう.
($N+1$ 個の点群から $N$ 次関数が決定できる.ここでは5点あるので,4次関数を決定する.)
上記の関数および下記を参考に,$x$ の値を
-4.0 から 3.0 まで,0.1 ずつ増加させて,それぞれ
$y$ を計算し,グラフを書け.
下記を参考に,完成したソースコードと,Excelで描いたグラフを含むファイル (.xlsx形式)
を提出せよ.
ソースファイル 153R000000-04-2.cpp と,Excel(153R000000-04-2.xlsx) を提出.
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 の値を順次計算,出力 */
return 0;
}
以下に計算結果の一例を示す.
ここでは,Excelの機能で,散布図として描画している. また,補間機能により,求めた点を線で接続している.
次に, スプライン補間は以下のソースコード(文字コードはUTF-8)および各種文献を参照すること.
153R000000-04-3.cpp
このソースコードを使用して,5点の補間を行い,$x$
の値を -4.0 から 3.0 まで,0.1 ずつ増加させて,それぞれ
$y$ を計算し,下記を参考にグラフを書け.
ソースコードおよびExcelファイルを提出せよ.
また,グラフ上でラグランジュ補間の結果と比較せよ.
ソースファイル 153R000000-04-3.cpp,グラフ 153R000000-04-3.xlsx を提出.
以下に計算結果の一例を示す.
どちらの補間法でも必ず制御点を通るが,それ以外では通過する位置が大きく異なる区間がある.