ラグランジュ補間

ラグランジュ補間


サイト全体の目次

稿


稿

ラグランジュ補間

ある関数


について

の時の値がわかって、それぞれ

だとします。すなわち、

です。このとき、

を満たす関数

を考えて、これを

の近似式と考えることにします。そこで、式(1)を満たす

として

とおきます。このとき、各 k

に対して

と定義すれば式(2)式は式(1)を満たします。そこで、この式(3)を満たす

を考えます。これは

の形で与えられます。すると、確かに

となり、式(3)を満たします。結局、



とあらわされます。これがラグランジュ補間公式と呼ばれるものです。この方法では

の間隔が等しくなくても目的の値を求めることができます。

サンプルプログラム

ラグランジュ補間計算関数

// ver.041027.1
#ifndef __LAGRANGE_H
#define __LAGRANGE_H

#include <vector>

// x: 求めたい点
// xy: 既知の(x,y)の組 ただし (x,y)=(first,second)
double Lagrange(double x, std::vector<std::pair<double, double> > &xy)
{
	double p = 0;
	for(long i = 0; i < (long)xy.size(); i++){
		double pi = 1;
		for(long j = 0; j < (long)xy.size(); j++){
			if(i != j){
				pi *= (x - xy[j].first) / (xy[i].first - xy[j].first);
			}
		}
		p += xy[i].second * pi;
	}
	return p;
}

#endif

メインプログラム

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
#include "Lagrange.h"

main()
{
	vector<pair<double, double> > xy;

	double d = 0.1;
	for(long i = 0; i < 10; i++){
		xy.push_back(make_pair(i * d, sin(i * d)));
	}

	cout << Lagrange(0.05, xy) << endl;
	cout << sin(0.05) << endl;

	return 0;
}


読み込み中・・・
10秒待っても表示が変わらない場合、次の理由が考えられます。
・Javascript が無効になっています。
・検索エンジンのキャッシュを見ています。
サイトホームへ / 上位ページへ / ページトップへ / PAROFトレンドショッピングへ
Copyright (C) 2010 totobon all right reserved.