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嵌 ...
随机推荐
- matlab中sum
来源:https://ww2.mathworks.cn/help/matlab/ref/sum.html?searchHighlight=sum&s_tid=doc_srchtitle#btv ...
- JavaFX ImageView
例子1:显示4个狗头.正常显示左上角.右下角的狗头:右上角的狗头旋转180°,并设置了透明度:左下角的狗头旋转90°,也设置了透明度. 1 import javafx.application.Appl ...
- P5911 [POI2004]PRZ (状态压缩dp+枚举子集)
题目背景 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 题目描述 桥已经很旧了, 所以它不能承受太重的东西.任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时 ...
- 达梦数据库_DM8配置MPP主备
为了提高MPP系统可靠性,克服由于单节点故障导致整个系统不能继续正常工作,DM 在普通的MPP系统基础上,引入主备守护机制,将MPP节点作为主库节点,增加备库作为备份节点,必要时可切换为主库代替故障节 ...
- spring redis 配置
- shell-脚本开发基本规范及习惯
1.shell-脚本开发基本规范及习惯 1.开头指定脚本解析器 #!/bin/sh 或#!/bin/bash 2.开头加版本版权等信息 #Date: 2018/3/26 #Author: zhangs ...
- 为什么在M3架构中 PC总是返回加4
由于CPU是3级流水线的方式运行.在执行第一条指令时候,已经对第二条指令译码,对第三条指令取值. PC总是指向正在取值的指令.由于在M3架构中,采用Thumb-2指令,每个指令占据2个字节,所以PC总 ...
- 多测师讲解 ———python2和Python3区别
python3.x和python2.x的区别:1.Python3.X源码文件默认使用utf-8编码,而python2.x的编译最前端需要加上#coding=utf-82.python3.x里打印pri ...
- 从面试角度学完 Kafka
Kafka 是一个优秀的分布式消息中间件,许多系统中都会使用到 Kafka 来做消息通信.对分布式消息系统的了解和使用几乎成为一个后台开发人员必备的技能.今天码哥字节就从常见的 Kafka 面试题入手 ...
- sql ROW_NUMBER() 排序函数
1.使用row_number()函数进行编号:如 1 select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_ ...