怎么用c++语言实现拉格朗日插值把源代码写一下
1个回答
展开全部
代码实现无非也是实现上面的公式,将值代进去。点(x,y)序列已知,被求y 匹配的x 点已知。
[cpp] view plain copy
typedef struct
{
double x;
double y;
}LAGRANG_DATA;
[cpp] view plain copy
//获取拉格朗日插值里的L(n)
bool GetLagrangeLn1(const vector<LAGRANG_DATA> &data, const double inX , double &outY)
{
int length = data.size();
if(length < 1)
return false;
outY = 0;
vector<LAGRANG_DATA>::const_iterator it1 = data.begin();
for (; it1 != data.end(); it1++)
{
double a = 1;
double b = 1;
vector<LAGRANG_DATA>::const_iterator it2 = data.begin();
for (; it2 != data.end(); it2++)
{
if(it1 != it2)
{
a *= (inX - (*it2).x);
b *= ((*it1).x - (*it2).x);
}
}
outY += a/b * (*it1).y;
}
return true;
}
[cpp] view plain copy
typedef struct
{
double x;
double y;
}LAGRANG_DATA;
[cpp] view plain copy
//获取拉格朗日插值里的L(n)
bool GetLagrangeLn1(const vector<LAGRANG_DATA> &data, const double inX , double &outY)
{
int length = data.size();
if(length < 1)
return false;
outY = 0;
vector<LAGRANG_DATA>::const_iterator it1 = data.begin();
for (; it1 != data.end(); it1++)
{
double a = 1;
double b = 1;
vector<LAGRANG_DATA>::const_iterator it2 = data.begin();
for (; it2 != data.end(); it2++)
{
if(it1 != it2)
{
a *= (inX - (*it2).x);
b *= ((*it1).x - (*it2).x);
}
}
outY += a/b * (*it1).y;
}
return true;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询