Lagrange插值C++程序
输入:插值节点数组、插值节点处的函数值数组,待求点
输出:函数值
代码如下:把printf的注释取消掉,能打印出中间计算过程,包括Lagrange多项式的求解,多项式每一项等等(代码多次修改,这些prinft不知道还有没有疏漏,日后再检查检查)
注:如果要求解插值区间内的多个点的函数值,把newx改成数组类型,把result改成指针类型,然后加一层for循环即可
/* 这里形参必须是int x[], 写作int[] x产生语法错误
n次插值Lagrange形式
x: 插值节点
y : 插值节点函数值
len : 插值节点个数
newX: 所求节点
*/
double lagrangeInterpolation(double x[], double y[], int len, double newx) {
//printf("--------------\n");
double result = 0;// 这里要记得初始化,否则结果错
double L; // lagrange interpolation polyminoal for (int j = 0; j < len; j++) {
// every interpolation polyminoal
L = y[j];
for (int k = 0; k < len; k++) {
// every term
if (j == k) {
continue;
}
//printf("newx[i]=%lf, x[j]=%lf, x[k]=%lf, \n (newx[i] - x[k]) / (x[j] - x[k])=%lf\n", newx[i], x[j], x[k], (newx[i] - x[k]) / (x[j] - x[k]));
//printf("L*(newx[i] - x[k]) / (x[j] - x[k])=%lf\n", L*(newx[i] - x[k]) / (x[j] - x[k]));
L *= (newx - x[k]) / (x[j] - x[k]);
}
//printf("result[%d]=%lf\n", i, result[i]);
result += L;
//printf("result[%d]=%lf , iter=%d\n", i, result[i], j); //printf("array[%d] is: %lf\n", i, result[i]);
}
return result;
}
主函数示例:
int main() {
printf("Nuerical Analysis Lagrange Interpolation!\n");
// 插值节点与函数值double x[] = { 0.46, 0.47, 0.48, 0.49 };
int len = sizeof(x) / sizeof(x[0]);
double y[] = { 0.4846555, 0.4937452, 0.5027498, 0.5116683 };
// 待求节点
double newX = 0.472;
double result = lagrangeInterpolation(x, y, len, newX);
printf("f(0.472) = %lf\n", result);return 0;
}
结果0.495553
Lagrange插值C++程序的更多相关文章
- Python实现Newton和lagrange插值
一.介绍Newton和lagrange插值:给出一组数据进行Newton和lagrange插值,同时将结果用plot呈现出来1.首先是Lagrange插值:根据插值的方法,先对每次的结果求积,在对结果 ...
- 【数值分析】Python实现Lagrange插值
一直想把这几个插值公式用代码实现一下,今天闲着没事,尝试尝试. 先从最简单的拉格朗日插值开始!关于拉格朗日插值公式的基础知识就不赘述,百度上一搜一大堆. 基本思路是首先从文件读入给出的样本点,根据输入 ...
- Note -「Lagrange 插值」学习笔记
目录 问题引入 思考 Lagrange 插值法 插值过程 代码实现 实际应用 「洛谷 P4781」「模板」拉格朗日插值 「洛谷 P4463」calc 题意简述 数据规模 Solution Step 1 ...
- 数值计算方法实验之Lagrange 多项式插值 (Python 代码)
一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...
- 拉格朗日插值和牛顿插值 matlab
1. 已知函数在下列各点的值为 0.2 0.4 0.6 0.8 1.0 0.98 0.92 0.81 0.64 0.38 用插值法对数据进行拟合,要求给出Lagrange插值多项式和Newto ...
- OpenCASCADE Interpolation - Lagrange
OpenCASCADE Interpolation - Lagrange eryar@163.com Abstract. Power basis polynomial is the most simp ...
- scipy插值与拟合
原文链接:https://zhuanlan.zhihu.com/p/28149195 1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot ...
- 转Python SciPy库——拟合与插值
1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot as plt from scipy.optimize import leastsq p ...
- 多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]
全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见“计算基本理论”. 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值使用的Horner嵌 ...
随机推荐
- plt.imshow()显示图片色差问题
转载:https://www.cnblogs.com/darkknightzh/p/6039667.html 由于系统缺少某些库,导致cv2.imshow()无法使用,于是使用matplotlib.p ...
- #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
转载:https://www.cnblogs.com/cvwyh/p/10570920.html 错误 在使用VS编译文件时出现了如下错误: #error: Building MFC applicat ...
- 【题解】[SCOI]windy数
Link 题目大意:求给定一个区间内满足每一位的数相差大于\(2\)且没有前导零的数的个数. \(\text{Solution:}\) 我们可以按照数位\(dp\).设状态为当前要\(dp\)第\(p ...
- 这次一定让你记住 TCP 三次握手、四手挥手!
TCP协议全称为:Transmission Control Protocol,是一种面向链接.保证数据传输安全.可靠的数据传输协议.为了确保数据的可靠传输,不仅需要对发出的每个字节进行编号确认,还需要 ...
- golang的http库使用代理
1.先上代码 package main import ( "crypto/tls" "flag" "fmt" "io/ioutil ...
- PO模式学习笔记
框架: 1.PO模式应用(测试对象和测试用例分离)(写到简历中) 2.引入ddt 3.深入分层:测试数据分离 4.遵循原则:测试用例的独立性 5.深入分层:元素定位分离 6.框架优化:提取basepa ...
- hugo主题文档-manpassant
+++ date="2020-10-17T10:32:00+08:00" title="hugo主题文档manpassant" tags=["hugo ...
- spring boot:用itextpdf处理pdf表格文件(spring boot 2.3.2)
一,什么是itextpdf? 1,itextpdf的用途 itextpdf是用来生成PDF文档的一个java类库, 通过iText可以生成PDF文档, 还可以把XML/Html文件转化为PDF文件 2 ...
- C# 判断当前目录是否存在不存在则创建
/// <summary> /// 判断目录是否存在不存在则创建 /// </summary> /// <param name="Path">& ...
- Pytest配置文件声明自定义用例标识
使用pytest.ini添加自定义用例标识: [pytest] # 1.使用没有注册过的标记抛出错误 addopts = --strict-markers # 2.自定义标记 markers = sm ...