插值法

插值法主要解决的问题就是,用一个多项式函数来逼近原函数,或者用多项式函数来拟合离散数据,在计算机图形的处理中,插值法应用广泛

插值法基本的有两种,拉格朗日插值法和牛顿插值法

还有一种要求更为严格的差值方法赫米特(Hiemite)插值法

插值法用多项式来逼近原函数,可以证明给定N个插值节点,只能构造唯一的,最高次不高于n的差值多项式

一般我们可以使用待定系数法,列出若干个方程,来求解系数,得到差值多项式。

拉格朗日插值法则构造一个差值基函数,保证这一部分在X取X0的时候等于1,在其他的时候等于0,不让其他的点干扰

基本形式为

插值基函数为

牛顿插值法则是引入差商的概念

关于差商的计算,我们可以使用递推的方式

最后牛顿插值法的基本形式为

拉格朗日插值法不具有承袭性,当增加了一个新的插值节点,我们需要全部重新计算

而牛顿插值法,改进了这一点,以上情况出现时,只需要在后面增加多一项即可。

拉格朗日插值法

double Lagrange(double *p,int n,double x)
{//P是插值节点数组,n是插值节点格式,x是自变量的取值int i,j,k;double numerator,denominator,ans;ans=0;//numerator分子,denominator分母for(k=0;k<n;k++){numerator=1;denominator=1;for(i=0;i<n;i++){if(i!=k){numerator*=(x-(*(p+i*2)));denominator*=( (*(p+k*2)) - (*(p+i*2)) );}//求插值基函数值elsecontinue;}//End for-ians=ans+( (numerator/denominator) * (*(p+k*2+1)) );//插值基函数*函数值Yi}//End for-kreturn ans;
}

牛顿插值法

double Newton(double *p,int n,double x)
{//P是插值节点数组,n是插值节点格式,x是自变量的取值int i,j,k;double numerator,denominator,ans=0;double *np=(double *)malloc(n*sizeof(double));//用以保存差商//使用滚动数组保存插值,节约存储空间double ny=(x-(*p));//x-x0for(i=0;i<n;i++)//差商数组初始化*(np+i)= *(p+i*2+1);ans=(*(np+n-1));//一阶差商即为函数值for(k=1;k<n;k++){for(i=n-1;i>=k;i--){//从后往前求差商,保存在np数组内numerator=( *(np+i-1) ) - ( *(np+i));denominator=( *(p+(i-k)*2)) - ( *(p+i*2) );*(np+i)=(numerator/denominator);}//End for-ians+=(*(np+n-1))*ny;ny*=(x-(*(p+k*2) ));//累乘(x-xi)的结果}//End for-kreturn ans;
}

Hiemite插值法

赫米特插值法在前两种插值法的基础上,不仅要求在插值节点处函数值相同,而且导数值也相同,比较常见的就是二点三次插值,即给定两个插值节点和函数值和一个点的导数值

基本形式为

赫米特插值法

double Hiemite(double *p,int n,double x)
{//p表示插值节点,n表示插值节点个数,x是自变量的取值//p是一个三维数组,第一维为X,第二维度为y,第三维度为导数值y′int i,j,k;double ans=0;double numerator,denominator;//前者为分子,后者为分母double *lx=(double *)malloc(n*sizeof(double));//记录插值基函数的平方double *ax=(double *)malloc(n*sizeof(double));//记录系数αdouble *bx=(double *)malloc(n*sizeof(double));//记录系数βfor(k=0;k<n;k++){numerator=1;    denominator=1;for(i=0;i<n;i++){if(i!=k){numerator*=(x- (*(p+i*3)));denominator*=(*(p+k*3) - *(p+i*3));}//End if}//End for-i*(lx+k)=(numerator)/(denominator);*(lx+k)=pow( (*(lx+k)) ,2);//求插值基函数的平方*(ax+k)=1-2*( (x-(*(p+k*3))) / (*(p+k*3) - *(p+((k+1)%2)*3) ) );*(bx+k)=(x-( *(p+k*3) ));ans+=(*(p+k*3+1)) * (*(ax+k)) * (*(lx+k));//Yi*αi*Li^2ans+=(*(p+k*3+2)) * (*(bx+k)) * (*(lx+k));//Y′i*βi*Li^2}//End for-kreturn ans;
}

最小二乘法

二乘法是为了在一系列离散点中找到一条曲线,最好地拟合这些点

为了达到最好的拟合效果,我们使其曲线的残差平方和最小

最小二乘法

double Fitting(double *p,int n)
{int i,j,k;double b,a;double ans[4]={0};double *m=(double *)malloc(2*3*sizeof(double));for(i=0;i<n;i++){//用X,Y,x*x,x*y的累加和ans[0]+=(*(p+i*2));//保存Xi求和结果ans[1]+=(*(p+i*2+1));//保存Yi求和结果ans[2]+=( (*(p+i*2)) * (*(p+i*2)) );//保存Xi*Xi求和结果ans[3]+=( (*(p+i*2)) * (*(p+i*2+1)) );//保存Xi*Yi求和结果}//End for-i*(m+0)=n;   *(m+1)=ans[0];   *(m+2)=ans[1];//第一个方程组的系数*(m+3)=ans[0];  *(m+4)=ans[2];  *(m+5)=ans[3];//第二个方程组的系数//以下过程模拟解方程的过程for(i=0;i<3;i++){//i循环两个方程组的三个系数*(m+i)/=n;//第一个方程组左右两边除以N*(m+i+3)-=( ans[0] * ( *(m+i) ) );//模拟第一个方程组乘以Xi的累加和后消去a的过程}b= ( *(m+5) )/( *(m+4) );//a消去以后直接求ba= ( (*(m+2))-( b*(*(m+1))) ) /(*m);//带入第一个方程组中求出aprintf("b=%lf a=%lf\n",b,a);printf("线性拟合的结果为Y=%lfX",b);a<0?printf("%lf\n",a):printf("+%lf\n",a);
}

数值计算(二)之插值法与线性回归(拉格朗日插值法,牛顿插值法,赫米特插值法,最小二乘法)相关推荐

  1. 理解插值法(拉格朗日、牛顿插值法)

    引言 我们首先理解下插值法主要用来做什么事:插值法就是利用已知的点建立合适的插值函数 f ( x ) f(x) f(x) ,未知点 x i x_i xi​ 由插值函数 f ( x ) f(x) f(x ...

  2. 吴恩达机器学习系列理论加实践(二 、单变量线性回归及matlab实践)

    二.单变量线性回归 2.1模型表示 同样以之前的房屋价格预测实例开始: 通过学习算法利用训练集训练模型h,对于新输入的数据size of house就可以输出其预测值price: 如何表达这个模型h: ...

  3. C#实现拉格朗日、牛顿、Hermite插值

    拉格朗日.牛顿插值法 初始时需要至少两个参考坐标点,在参考点的基础之上构造插值函数y=f(x),然后由插值函数确定需要求解的x坐标的函数值.相较于拉格朗日插值,牛顿插值公式更加复杂,但是在增加一个参考 ...

  4. 函数插值的python实现——拉格朗日、牛顿插值

    函数插值的python实现--拉格朗日.牛顿插值 1. 拉格朗日(Larange)插值 实现代码 2. 牛顿(Larange)插值 2.1 牛顿插值多项式的基本形式 2.2 牛顿均差插值多项式 (1) ...

  5. 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 一. 背景 在工程和科学研究中出现的函数是多种多样的.常常会遇到这样的情况:在某个实际 问题中,虽然可以断定所考虑的函数 ) ( x f 在区 ...

  6. 拉格朗日插值法matlab上机,拉格朗日插值法使用MATLAB做的例题

    <拉格朗日插值法使用MATLAB做的例题>由会员分享,可在线阅读,更多相关<拉格朗日插值法使用MATLAB做的例题(2页珍藏版)>请在人人文库网上搜索. 1.一物体廓线数据如下 ...

  7. 使用拉格朗日多项式(Lagrangian polynomials)的插值法(python,数值积分)

    第三十五篇 拉格朗日多项式插值 插值多项式 首先考虑一个函数的推导,该函数精准地通过一系列np离散数据点.虽然有无限多的函数具备这个条件,但我们将专注于最简单的一个,一个n阶多项式,其中n = np− ...

  8. 插值法补齐缺失数据_缺失数据处理-插值法

    缺失数据处理-插值法 在数据挖掘中,原始海量的数据中存在着大量不完整.不一致.有异常.偏离点的数据.这些问题数据轻则影响数据挖掘执行效率,重则影响执行结果.因此数据预处理工作必不可少,而其中常见工作的 ...

  9. 插值法在计算机中的应用,常见的插值法及其应用.pdf

    常见的插值法及其应用 2006 年 6 月 郧阳师范高等专科学校学报 J un . 2006 第 26 卷第 3 期 J ournal of Yunyang Teacher s College Vol ...

  10. 【Machine Learning 二】单变量线性回归,代价函数,梯度下降

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

最新文章

  1. Linux的常用的命令
  2. tfs java开发需要jar_使用Spring框架开发最少需要哪些jar包,依赖jar包有哪些?
  3. 又做了3个极品菜[图]
  4. SQL ORDER BY Clause
  5. scjp java程序员_Sun认证Java程序员SCJP考题常见陷阱
  6. 游戏盒子源码_如何用8K电视盒子组建“家庭影院”(设备入门篇)
  7. [2019杭电多校第四场][hdu6616]Divide the Stones
  8. ir2104s的自举电容_有关IR2104的自举电容和NMOS选择问题教程.docx
  9. VSLAM算法(二):PnP求解 3D-2D 相机位姿及 BA优化算法
  10. 2022-2027年中国OLED行业市场调研及未来发展趋势预测报告
  11. vc c语言标准库头文件,VC++ 6.0中添加库文件和头文件
  12. 跟开涛学shiro练习代码
  13. 杭电18年计算机考研人数,2018杭州电子科技大学考研报考统计
  14. win10下实现PyAudio持续监听并录音(麦克风/扬声器)
  15. gbt7714在overleaf中如何把英文作者大写变小写
  16. 用计算机测试生日,超准生日爱情配对测试
  17. java使用 openoffice+swftools+flexpaper 在window下完成简单的文件预览
  18. 讲解SQL数据库语句
  19. MySQL的多表关联查询
  20. XP与Win2003下网站配置

热门文章

  1. 【MODIS数据处理#10】例五:用NDVI估算植被覆盖度
  2. MongoDB——聚合管道之$group操作
  3. 计算机绘图CAD实训指导,【精品】CAD计算机绘图实习指导书
  4. Vue项目:style样式篇
  5. 从快感到成就感:多巴胺vs内啡肽
  6. 使用腾讯云服务器搭建自己网站应该怎么做
  7. 18年,中国互联网的产品墓场
  8. 《王垠、赵海平列传(1)》:“成为最伟大的计算机科学家!”
  9. 如何复制虚拟机中的数据到真实主机
  10. 对话系统-口语理解-意图检测和槽填充:A Co-interactive Transformer for joint Slot Filling and Intent Detection