拉格朗日差值
来源:互联网 发布:大数据与量化投资 编辑:程序博客网 时间:2024/06/06 13:18
插值基函数:
这玩意不知道是啥的话,没关系,简单看一下插值法从一次,二次,到n次推倒过程,到n阶就是上面那一坨..
线性插值也叫两点插值,已知函数y = f (x)在给定互异点x0, x1上的值为y0= f (x0),y1=f (x1)线性插值就是构造一个一次多项式
P1(x) = ax + b
使它满足条件
P1 (x0) = y0 P1 (x1) = y1
其几何解释就是一条直线,通过已知点A (x0, y0),B(x1, y1)。
线性插值计算方便、应用很广,但由于它是用直线去代替曲线,因而一般要求[x0, x1]比较小,且f(x)在[x0, x1]上变化比较平稳,否则线性插值的误差可能很大。为了克服这一缺点,有时用简单的曲线去近似地代替复杂的曲线,最简单的曲线是二次曲线,用二次曲线去逼近复杂曲线的情形。
拉格朗日插值时数学中最基本的插值算法,我们在差值时,如果插值点位于一直数据点之间,可以使用n次拉格朗日插值多项式来进行计算,如果插值点位于所给取件的某个端点时,可以少取几个数据点进行插值,如果差致电位于给定的区间以外,那么可以取最近的m个数据点进行插值.
拉格朗日插值法可以帮助我们解决以下的问题
已知x取值0,1,-1,2时, f{x}取值2,2,0,6
求x=3时f{x}的值。
示例1:
int xs[]={0,1,-1,2};
int ys[]={2,2,0,6};
//f(3)?
demo:
/************************************************************************* > File Name: lagrange.cpp > Author: dulun > Mail: dulun@xiyoulinux.org > Created Time: 2016年11月27日 星期日 16时57分43秒 ************************************************************************/#include<iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#define LL long longusing namespace std;const int N = 50086;//x, y一一对应,共n对,按x升序排列, 插值点tdouble Lagrange(double x[], double y[], int n, double t){ int i, j, k, m; double s, result = 0.0; if(n < 1) return result; if(n == 1){ result = y[0]; return result; } if(n == 2){ result = ( y[0] * (t-x[1]) - y[1] * (t - x[0]) / x[0] - x[1] ); return result; } else{ i = 0; while((x[i] < t) && (i < n)) i += 1; k = i - 4; if(k < 0) k = 0; m = i + 3; if(m > n-1) m = n-1; for(i = k; i <= m; i++){ s = 1; for(j = k; j <= m; j++){ if(j != i) s = s*(t - x[j]) / (x[i] - x[j]); } result += s * y[i]; } } return result;}int main(){ double t, z; char again; // static double x[] = {0.1, 0.15, 0.30, 0.4, 0.5, 0.6, 0.7, 0.85, 0.9, 1}; // static double y[] = {0.9, 0.86, 0.78, 0.67, 0.6, 0.55, 0.48, 0.42, 0.38, 0.36}; // 简单例子:y = f(x) = x^2 static double x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; static double y[] = {1, 4, 9, 16, 25, 36, 49, 64, 81, 100};//拽一下goto~S1: printf("Mission is a go!\nInput insert point: "); cin>>t; z = Lagrange(x, y, sizeof(x) / sizeof(x[0]), t); cout << t << " : " << z << endl;S2: cout << "continue?(y/n)" << endl; cin>>again; if(again == 'y' || again == 'Y') goto S1; else if(again == 'n' || again == 'N') goto S3; else goto S2;S3: cout << "mission Success!" << endl; return 0;}
0 0
- 拉格朗日差值
- 差值
- 差值
- 二分查找与拉格朗日差值查询
- python简单实现拉格朗日差值计算
- 利用牛顿差商法与拉格朗日差值法进行拟合
- 計算時間差值
- 时间差值
- * 正差值
- 正差值
- 两书正差值
- 正差值
- 求两数正差值
- 求两数正差值
- 正差值
- 正差值
- 正差值
- 两数正差值
- 随机蕨分类器
- HTML 后台管理页面布局
- js闭包详解
- Mac版R语言入门(三)数据的导入
- C# 13章
- 拉格朗日差值
- 第三本 十三章上机
- DeepNet深度学习框架的使用
- 比特币真的适合"洗钱"和投机吗?
- 限制对比度自适应直方图均衡化算法(CLAHE)实现
- SQL 十三章QQ数据
- Linux shell脚本,jpg文件批量化转pdf
- Android中线程间通信:消息机制
- JS中的常用事件