拉格朗日、牛顿插值法

初始时需要至少两个参考坐标点,在参考点的基础之上构造插值函数y=f(x),然后由插值函数确定需要求解的x坐标的函数值。相较于拉格朗日插值,牛顿插值公式更加复杂,但是在增加一个参考点时,不需要像拉格朗日插值那样从头再来。具体数学公式及背景介绍见参考1与参考2。

Hermite插值法

初始时不仅需要至少两个参考点坐标,还需要在参考点上的一阶导数值。除此之外,Hermite插值可以保证插值函数在参考点上一阶可导,且导数值与初始值一致。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace CsharpPro1.scienceCalculate
{class interpolation{private List<double> xx = new List<double>();  //存储自变量private List<double> known = new List<double>();private List<double> knownDerivatives = new List<double>();  //用来存储Hermite插值时的已知量的导函数值private List<double> tempW = new List<double>();   //用来存储牛顿插值时的中间变量private List<double> tempF = new List<double>();   //用来存储牛顿插值法需要的中间变量private List<double> tempL = new List<double>();   //用来存储Hermite插值时的中间变量private List<double> tempLL = new List<double>();   //用来存储Hermite插值法需要的中间变量private int knownCount;    //已知数数量private double pn;   //最终结果public static double angle2arc(double rangle){return rangle * Math.PI / 180;}public double fx(double rangle){rangle = angle2arc(rangle);return Math.Cos(rangle);}public interpolation(int knownCount, int sign)    //牛顿对象与拉格朗日对象构造函数{this.knownCount = knownCount;this.pn = 0;for (int i = 0; i < knownCount; i++){Console.WriteLine("请输入第{0}个已知点,以Enter结束一行的输入", i);known.Add(double.Parse(Console.ReadLine()));}}public interpolation(int knownCount){this.knownCount = knownCount;this.pn = 0;for (int i = 0; i < knownCount; i++){Console.WriteLine("请输入第{0}个已知点,以Enter结束一行的输入", i);xx.Add(double.Parse(Console.ReadLine()));Console.WriteLine("请输入第{0}个已知点的函数值,以Enter结束一行的输入", i);known.Add(double.Parse(Console.ReadLine()));Console.WriteLine("请输入第{0}个已知点的函数值,如不需要,则输入零即可,以Enter结束一行的输入", i);knownDerivatives.Add(double.Parse(Console.ReadLine()));}}public void lagrange(double x)//插值方法,拉格朗日插值{double tempNum=1;for(int i = 0; i < knownCount; i++){tempNum = fx(known[i]);for(int j = 0; j < knownCount; j++){if (j != i){tempNum *= (x - known[j]) / (known[i] - known[j]);}}pn += tempNum;}}public void setTempW(double x)     //tempW的set方法,最好由对象调用{tempW.Add(1);for(int i = 1; i < this.knownCount; i++){tempW.Add(tempW[i - 1] * (x - known[i - 1]));}}public double setTempF(int headNum,int endNum,double x){double tempresult;if (headNum == endNum){tempresult = fx(known[headNum]);}else{tempresult= (setTempF(headNum, endNum-1, x) - setTempF(headNum+1, endNum, x)) / (known[headNum] - known[endNum]);}if (headNum == 0)tempF.Insert(endNum,tempresult);return tempresult;}public void newton(double x)   //牛顿插值法{setTempW(x);setTempF(0, knownCount - 1, x);for (int i = 0; i < knownCount; i++){this.pn += tempW[i] * tempF[i];}}public void getlxAndLx(double x)  //hermite基函数与导基函数{double temp = 1, temp1 = 0;for(int i = 0; i < knownCount; i++){for(int j = 0; j < knownCount; j++){if (i != j){temp *= (x - xx[j]) / (xx[i] - xx[j]);temp1 += 1 / (xx[i] - xx[j]);}}tempL.Add(temp);tempLL.Add(temp1);temp = 1;temp1 = 0;}}public void hermite(double x)  //Hermite插值方法的实现,不适用于正余弦函数的插值{getlxAndLx(x);for (int i = 0; i < knownCount; i++){pn += known[i] * (1 - 2 * (x - xx[i]) * tempLL[i]) * Math.Pow(tempL[i], 2) +knownDerivatives[i] * (x - xx[i]) * tempL[i]*tempL[i];}}//static void Main(string[] agrs)//{//    Console.WriteLine("请输入已知参数个数");//    int knownCount = int.Parse(Console.ReadLine());//    interpolation hermiteDemo = new interpolation(knownCount);//    Console.WriteLine("请输入需要计算的自变量值");//    double rangle = double.Parse(Console.ReadLine());//    //rangle = angle2arc(rangle);//    hermiteDemo.hermite(rangle);//    Console.WriteLine("{0}的Cos值为{1}", rangle, hermiteDemo.pn);//}}
}

<参考1>http://baike.baidu.com/link?url=xEG2Gx2YJw5rC5yRiwi8Ngpt2kbabpz6ouRIRtmx4BX0KpI-3cZb0L4vFU3XgHzAEYjaAY1Kw3uBRP7RivuOLqu32-SkhFvw-t3h7sUOJuVXVhChCs1mMrZUazbk8gNMBhMRIBceS5jegTJfyAJmFKbdgFD3PshNWx-QkMykJ8_
<参考2>http://baike.baidu.com/link?url=UcEI_khjobQ5C1e_roIFE2krJ9p50KPgceHCiZA_0VG8aGtdgFPj2IC_B1dTfQPI-WgBqOVTC2eHibu_FMRs9YBzorzAkuz3x0IeFfTBFv5A0mf4w4sRewFA9MvZ_-TpLDuA10xVSHJpAWK1tieMo_

C#实现拉格朗日、牛顿、Hermite插值相关推荐

  1. 数学建模准备 插值(拉格朗日多项式插值,牛顿多项式插值,分段线性插值,分段三次样条插值,分段三次Hermite插值)

    文章目录 摘要(必看) 0 基础概念 什么是插值 插值用途 什么是拟合 插值和拟合的相同点 插值和拟合的不同点 1 常用的基本插值方法 1.1 多项式插值法 1.1.1 拉格朗日多项式插值法 多项式插 ...

  2. 插值与拟合 (一) : 拉格朗日多项式插值 、Newton插值 、分段线性插值、Hermite插值 、样条插值、 B 样条函数插值、二维插值

    插值:求过已知有限个数据点的近似函数. 拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小. 插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似 ...

  3. Hermite插值是牛顿插值的极限情形

    Hermite插值可以看作牛顿插值的极限状况.为什么可以这么说呢?我们来看一个实例: 构造一个三次多项式 $p_3$ 使得 $p_3(0)=0$,$p_3(1)=1,p_3'(0)=1,p_3'(1) ...

  4. 【12月学习进度3/31—计算机图形学期末准备01】拉格朗日插值 + 三次Hermite插值

    相关概念 型值点:事先给定的离散点 插值:得到的曲线通过所有的型值点 逼近:不要求通过给定的所有型值点,用给定型值点控制曲线形状 Hermite多项式 拉格朗日插值 拉格朗日插值是当 j=0j=0j= ...

  5. 数学建模之Hermite插值法和三次样条插值法(附上详细的matlab代码)

    插值算法 一般定义 若P(x)为次数不超过n的代数多项式,即 P(x)=a0+a1x+...+anxnP(x)=a_0+a_1x+...+a_nx^n P(x)=a0​+a1​x+...+an​xn ...

  6. 【数学与算法】【分段三次Hermite插值】和【分段三次样条插值】

    光滑曲线在数学上的定义是什么?? 原文链接:光滑曲线在数学上的定义是什么? 回答1: 定义:切线随切点的移动而连续转动. 若函数f(x)f(x)f(x)在区间(a,b)(a,b)(a,b)内具有一阶连 ...

  7. 埃尔米特(Hermite)插值

    Hermite插值满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值.对于高阶导数的情况,Hermite插值多项式比较复杂,在实际情况中,常常遇到的是函数值与一阶导数给定的情况.在此情 ...

  8. c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

    1.埃尔米特(Hermite)插值 1.1.Hermite插值多项式 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶.二阶甚至更高阶的导数值,这就是 Hermite 插值问 ...

  9. 艾尔米特插值的MATLAB实现,埃尔米特(Hermite)插值

    Hermite插值满足在节点上等于给定函数值,而且在节点上的导数值也等于给定的导数值.对于高阶导数的情况,Hermite插值多项式比较复杂,在实际情况中,常常遇到的是函数值与一阶导数给定的情况.在此情 ...

最新文章

  1. mysql 5.6 与5.7 区别_mysql5.6和5.7的区别
  2. 新装 Win7 系统装完驱动精灵,一打开到检测界面就卡死——原因与解决方案
  3. BZOJ4238 : 电压
  4. boost::mp11::mp_if相关用法的测试程序
  5. 51nod 更难的矩阵取数问题 + 滚动数组优化
  6. 查询输出优秀人数_sql 第五关多表查询
  7. Coder Essential之编程语言学习知识点纲要
  8. 单核CPU破解后量子加密候选算法只需一小时
  9. FPGA概述(对FPGA的基本认识)
  10. 模型的泛化能力--正则化
  11. 关于域名抢注:过期高PR域名抢注价值高吗?
  12. 【分库分表ShardingSphere】
  13. Webkit内核探究【1】——Webkit简介
  14. mysql安装教程 mac_Mac下MySQL安装配置教程
  15. 平行空间怎么设置32位_10月微信新花样!微信情侣空间怎么解除 情侣空间取消情侣关系设置方法...
  16. 1.静态方法只能访问静态成员(包括变量和方法不能直接访问实例成员,除非使用对象调用2.实例方法既可以访问静态成员,也可以访问实例成员
  17. 尝试搭建OPhone-sdk 手机模拟器的搭建
  18. Spring的核心是什么?
  19. Re: 征男友征男友(有女友者勿回) (转载)
  20. 快捷录播服务器怎么显示时间,半自动高清录播服务器 高清全自动录播系统 方便携带 搭建快捷...

热门文章

  1. Java笔记总结(一)
  2. java socket 加密,Java socket通信实现DES加密与解密
  3. html本地站点建立代码,实验目的通过编写一小网页熟练HTML语言书写方法;学会建立本地站点.doc...
  4. 市场同类产品对比分析
  5. Promodel®模拟和优化套装加速企业绩效改善 功能介绍
  6. unity打开ppt 打包后也可以运行
  7. 工作十年,你的职场核心竞争力在哪里
  8. 雷达通信 技术《相控阵入门到精通》 视频教程 代码 下载
  9. NASA发布史上最深的宇宙全彩照!韦伯如何回传150万公里外的太空数据?
  10. fate框架使用记录