【数值分析】拉格朗日插值与牛顿插值
拉格朗日插值法
牛顿插值法
x | 8.1 | 8.3 | 8.6 | 8.7 |
f(x) | 16.94410 | 17.56492 | 18.50515 | 18.82091 |
具体代码实现如下:
#include<iostream>
#include<vector>
using namespace std;
//-----------------拉格朗日插值法BEGIN---------------------//
double Lagrange(vector<double> x,vector<double> y ,double X)//x,y分别为x和f(x)的值,X为要求的点,返回值为f(X)
{double result=0;double temp=1;for(int i=0;i<x.size();i++){temp=1;for(int j=0;j<x.size();j++){if(j!=i){temp=temp*(X-x.at(j))/(x.at(i)-x.at(j));} }result+=temp*y.at(i);}return result;
}
//-----------------拉格朗日插值法END---------------------//
//-----------------牛顿法BEGIN---------------------//
double DifferenceQuotient(vector<double> x,vector<double> y ,int k)//计算差商
{double result=0;for(int i=0;i<=k;i++){double temp=1;for(int j=0;j<=k;j++){if(i!=j){temp=temp/(x.at(i)-x.at(j));}}temp=y.at(i)*temp;result+=temp;}return result;
}
double Newton(vector<double> x,vector<double> y ,double X)
{double result=y.at(0);double temp=1;for(int i=1;i<x.size();i++){temp=1;for(int j=0;j<i;j++){temp*=(X-x.at(j));}result+=DifferenceQuotient(x,y,i)*temp;}return result;
}
//-----------------牛顿法END---------------------//
void main()
{vector<double> x;vector<double> y;//这里输入x的值,这里使用向量vector是为了方便添加数据点,可以根据实际的观测点更改x.push_back(8.1);x.push_back(8.3);x.push_back(8.6);x.push_back(8.7);//这里输入f(x)的值y.push_back(16.94410);y.push_back(17.56492);y.push_back(18.50515);y.push_back(18.82091);cout.precision(10);//设置显示精度//下面是根据上面的4个样本点及其函数值来分别使用两种插值法计算在x=8.4处的函数值cout<<"使用拉格朗日插值法:";cout<<Lagrange(x,y,8.4)<<endl;cout<<"使用牛顿插值法:";cout<<Newton(x,y,8.4)<<endl;
}
程序运行结果如下:
Matlab实现多种插值函数
function f = Language(x,y,x0)
%x y为坐标向量 x0为插值点的x坐标|| f0为x0对应的值syms t;
if(length(x) == length(y))n = length(x);
elsedisp('x和y的维数不相等!');return;
end %检错f = 0.0;
for(i = 1:n)l = y(i); for(j = 1:i-1)l = l*(t-x(j))/(x(i)-x(j)); end;for(j = i+1:n)l = l*(t-x(j))/(x(i)-x(j)); %计算拉格朗日基函数end;f = f + l; %计算拉格朗日插值函数 simplify(f); %化简if(i==n)if(nargin == 3)f = subs(f,'t',x0); %计算插值点的函数值elsef = collect(f); %将插值多项式展开f = vpa(f,6); %将插值多项式的系数化成6位精度的小数endend
end
牛顿插值函数如下:
function f = Newton(x,y,x0)
%x y为坐标向量 x0为插值点的x坐标|| f0为x0对应的值
syms t;if(length(x) == length(y))n = length(x);c(1:n) = 0.0;
elsedisp('x和y的维数不相等!');return;
endf = y(1);
y1 = 0;
l = 1;for(i=1:n-1) for(j=i+1:n)y1(j) = (y(j)-y(i))/(x(j)-x(i));endc(i) = y1(i+1); l = l*(t-x(i)); f = f + c(i)*l;simplify(f);y = y1;if(i==n-1)if(nargin == 3)f = subs(f,'t',x0);elsef = collect(f); %将插值多项式展开f = vpa(f, 6);endend
end
为了使用上面两个函数,脚本文件如下:
clear all
clc
format long
format compactx=[8.1 8.3 8.6 8.7 ];
y=[ 16.94410 17.56492 18.50515 18.82091];
x0=8.4;
disp('拉格朗日插值法:')
disp(Language(x,y,x0))
disp('牛顿插值法:')
disp(Newton(x,y,x0))
结果显示如下:
原文:http://blog.csdn.net/tengweitw/article/details/43025225
作者:nineheadedbird
【数值分析】拉格朗日插值与牛顿插值相关推荐
- matlab全域基函数,多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]...
全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见"计算基本理论". 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值 ...
- 拉格朗日插值和牛顿插值的龙格现象
文章目录 一.实验目的 二.实验设备信息 三.实验内容 (一)拉格朗日插值多项式 (二)牛顿插值多项式 四.实验步骤 (一)拉格朗日插值函数实现 (二)牛顿插值函数实现 (三)观察拉格朗日插值和牛顿插 ...
- Matlab实现线性插值、抛物插值、牛顿插值、拉格朗日插值、分段抛物插值、分段线性插值
目录 线性插值 原理 流程图 代码 抛物插值 原理 流程图 代码 拉格朗日插值 代码 牛顿插值 原理 代码 分段线性插值 代码 线性插值 原理 流程图 单个点的线性插值代码 X=[0.2 0.4]; ...
- 【插值】牛顿插值、拉格朗日插值、三次样条插值的Python代码实现
插值简介 插值即根据有限的离散点绘制出穿过所有样本点的曲线,从直观上想象似乎画一条穿过n个特定点的曲线有无数种画法,但从数学意义上来说我们希望画出的曲线能够尽量平滑,震荡幅度尽量小能够在非样本点上符合 ...
- 数值分析之 拉格朗日插值、牛顿插值、分段线性插值实现
1.拉格朗日插值法 考虑全局信息的比较经典的插值方法,编程简单,计算量大. #coding=utf-8 from matplotlib import pyplot as pltdef Lg(data, ...
- 1月16日:拉格朗日中值定理,罗尔定理,柯西中值,拉格朗日插值,牛顿插值,重心插值,拉格朗日乘子法的证明
拉格朗日中值定理 https://www.bilibili.com/video/BV117411E7kx?from=search&seid=17921778669593975548 拉格朗日中 ...
- 插值问题(拉格朗日插值、牛顿插值)
agui_lagrange.m: function f=agui_lagrange(x0,y0,x) % x0为节点向量,y0为节点上的函数值,x为插值点,f为返回插值 n=length(x0);m= ...
- Hermite插值是牛顿插值的极限情形
Hermite插值可以看作牛顿插值的极限状况.为什么可以这么说呢?我们来看一个实例: 构造一个三次多项式 $p_3$ 使得 $p_3(0)=0$,$p_3(1)=1,p_3'(0)=1,p_3'(1) ...
- 【数值分析】插值法:拉格朗日插值、牛顿插值
本科课程参见:<软件学院那些课> 拉格朗日插值法 (*以下定义选自维基百科) 算法流程图 算法代码 #include<iostream> #include<string& ...
- 插值法:拉格朗日插值、牛顿插值
拉格朗日插值法 (*以下定义选自维基百科) 算法流程图 算法代码 [cpp] view plaincopy #include<iostream> #include<string> ...
最新文章
- 方便的图片修改Sql代码
- HDU - 3081 Marriage Match II(二分+并查集+最大流/匈牙利删边)
- 乔安监控云存储_智能运维丨全栈监控,护航云上业务
- Effective C++学习第六天
- 【Java基础】List迭代并修改时出现的ConcurrentModificationException问题
- DeFi 借贷协议 NAOS Finance 完成种子轮融资
- java.lang.IllegalArgumentException: An invalid character [10] was present in the Cookie value
- 同花顺黄金分割线及斐波那契数列分析网格(主图公式)
- java线程(线程的概念,线程的状态)
- Mac好用的截图工具:Snipaste
- 冰点还原容易出现的问题总结
- 液压与气压传动原理及实验装置,QY-QD11
- 教你防范QQ黑客工具!!!!
- 计算机操作系统--缺页中断与越界中断
- 17家中国初创IT公司的失败史
- 【模块】MAX31865 铂电阻温度检测器模块 RTD传感器PT100-PT1000
- Unity 2D手游——坦克大战 C#
- 粉笔公考——判断推理
- 厉害!张近东钦点,80后郝嘉成苏宁北京300亿市场掌舵人
- web常见漏洞解析 注入 xss csrf 文件上传 文件包含 -dvwa演示