Python实现Newton和lagrange插值
一、介绍
Newton和lagrange插值:给出一组数据进行Newton和lagrange插值,同时将结果用plot呈现出来
1、首先是Lagrange插值:
根据插值的方法,先对每次的结果求积,在对结果求和,完成插值。
2、newton插值:
先要建立差商表,差商表的建立的时候,每次减去的x[0]都是对角的元素,因此需要注意。
二、实现
import matplotlib.pyplot as plt
import math # =================================================== lagrange插值 =================================================================
def lagrange(x_, y, a):
"""
获取拉格朗日插值
:param x_: x的列表值
:param y: y的列表值
:param a: 需要插值的数
:return: 返回插值结果
"""
ans = 0.0
for i in range(len(y)):
t_ = y[i]
for j in range(len(y)):
if i != j:
t_ *= (a - x_[j]) / (x_[i] - x_[j])
ans += t_
return ans # =================================================== newton插值 =================================================================
def table(x_, y):
"""
获取牛顿插值表
:param x_: x列表的值
:param y: y列表的值
:return: 返回插值表
"""
quotient = [[0] * len(x_) for _ in range(len(x_))]
for n_ in range(len(x_)):
quotient[n_][0] = y[n_]
for i in range(1, len(x_)):
for j in range(i, len(x_)):
# j - i 确定了对角线的元素
quotient[j][i] = (quotient[j][i - 1] - quotient[j - 1][i - 1]) / (x_[j] - x_[j - i])
return quotient def get_corner(result):
"""
通过插值表获取对角线元素
:param result: 插值表的结果
:return: 对角线元素
"""
link = []
for i in range(len(result)):
link.append(result[i][i])
return link def newton(data_set, x_p, x_7):
"""
牛顿插值结果
:param data_set: 求解的问题的对角线
:param x_p: 输入的值
:param x_7: 原始的x的列表值
:return: 牛顿插值结果
"""
result = data_set[0]
for i in range(1, len(data_set)):
p = data_set[i]
for j in range(i):
p *= (x_p - x_7[j])
result += p
return result # ============================================================== 画图 =====================================================
def draw_picture(x_list, y_list, node):
plt.title("newton")
plt.xlabel("x")
plt.ylabel("y")
# plt.plot(x_list, y_list, color="red")
for i in range(len(x_list)):
plt.scatter(x_list[i], y_list[i], color="purple", linewidths=2)
plt.scatter(node[0], node[1], color="blue", linewidth=2)
plt.show() if __name__ == '__main__':
x = 0.54
x_1 = [0.4, 0.5, 0.6, 0.7, 0.8]
y_1 = [-0.9163, -0.6931, -0.5108, -0.3567, -0.2231]
middle = table(x_1, y_1)
n = get_corner(middle)
newton = newton(n, x, x_1)
lagrange = lagrange(x_1, y_1, 0.54)
print("真值:{}".format(math.log(0.54, math.e)))
print("拉格朗日插值:{}".format(lagrange))
print("牛顿插值:{}".format(newton))
# 画图
draw_picture(x_1, y_1, (x, newton))
三、结果
1、插值结果
2、画图结果
四、总结
Newton和lagrange可以参考一下数值分析的课本,根据课本的公式来进行插值分析。具体过程也在代码中给出。
Python实现Newton和lagrange插值的更多相关文章
- 转Python SciPy库——拟合与插值
1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot as plt from scipy.optimize import leastsq p ...
- 【数值分析】Python实现Lagrange插值
一直想把这几个插值公式用代码实现一下,今天闲着没事,尝试尝试. 先从最简单的拉格朗日插值开始!关于拉格朗日插值公式的基础知识就不赘述,百度上一搜一大堆. 基本思路是首先从文件读入给出的样本点,根据输入 ...
- Lagrange插值C++程序
输入:插值节点数组.插值节点处的函数值数组,待求点 输出:函数值 代码如下:把printf的注释取消掉,能打印出中间计算过程,包括Lagrange多项式的求解,多项式每一项等等(代码多次修改,这些pr ...
- 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)求出简单 ...
- Python数值计算之插值曲线拟合-01
3 插值与曲线拟合 Interpolation and Curve Fitting 给定n+1个数据点(xi,yi), i = 0,1,2,…,n,评估y(x). 3.1 介绍(introdu ...
- 数值分析案例:Newton插值预测2019城市(Asian)温度、Crout求解城市等温性的因素系数
数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温性的因素系数 文章目录 数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温 ...
- Newton插值的C++实现
Newton(牛顿)插值法具有递推性,这决定其性能要好于Lagrange(拉格朗日)插值法.其重点在于差商(Divided Difference)表的求解. 步骤1. 求解差商表,这里采用非递归法(看 ...
- 插值方法 - Newton向前向后等距插值
通常我们在求插值节点的开头部分插值点附近函数值时,使用Newton前插公式:求插值节点的末尾部分插值点附近函数值时,使用Newton后插公式. 代码: 1 # -*- coding: utf-8 -* ...
随机推荐
- day 69作业
""" 1.按照上方 知识点总结 模块,总结今天所学知识点: 2.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/t ...
- [转]【jsp】
建立时间:6.30 &7.12& 7.24& 7.27 7月心比较浮躁,几乎没怎么学习编程 一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%&g ...
- Rxjava学习笔记
1.使用Observable.range(int start, int count)创建一个发射特定整数序列的Observable,第一个参数为起始值,第二个为发送的个数,如果为0则不发送,负数则抛异 ...
- IDEA控制台输出中文乱码问题
IntelliJ IDEA 真的是一款很方便的Java开发工具,但是关于中文乱码这个问题我不得不吐槽,这个编码也弄得这么麻烦干嘛,真想找idea开发者干架,我敢打包票我能在一分钟之内一拳飞过去让他跪下 ...
- RHCE试题解析
环境准备 yum-config-manager --add-repo=ADDREPO vim /etc/yum.conf gpgcheck=0(1=on,0=off) 增加指定repo源,关闭签名 ...
- 【Linux】查看程序是否正常运行
ps aux|grep redis-server ps -ef |grep redis netstat -tunple|grep 6379 netstat -lntp | grep 6379
- HBase快照迁移数据失败原因及解决办法
目录 目录 1 1. 背景 1 2. 环境 1 3. 执行语句 1 4. 问题描述 1 5. 错误信息 2 6. 问题原因 3 7. 解决办法 4 1. 背景 机房裁撤,需将源HBase集群的数据迁移 ...
- 请写出jQuery绑定事件的方法,不少于两种
bind on live one 简写事件:click.hover.mousemove.mouseup.mousedown……
- PATB1031查验身份证
这一题遇见的错误有很多,学会了一些知识点 使用了strcpy函数,前是需要复制的数组,后面是被复制的数组 关于字符,如果是非数字可以使用 <='9' && >='0'来判断 ...
- spark基础知识一
1. spark是什么 Apache Spark™ is a unified analytics engine for large-scale data processing. spark是针对于大规 ...