一、介绍
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插值的更多相关文章

  1. 转Python SciPy库——拟合与插值

    1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot as plt from scipy.optimize import leastsq p ...

  2. 【数值分析】Python实现Lagrange插值

    一直想把这几个插值公式用代码实现一下,今天闲着没事,尝试尝试. 先从最简单的拉格朗日插值开始!关于拉格朗日插值公式的基础知识就不赘述,百度上一搜一大堆. 基本思路是首先从文件读入给出的样本点,根据输入 ...

  3. Lagrange插值C++程序

    输入:插值节点数组.插值节点处的函数值数组,待求点 输出:函数值 代码如下:把printf的注释取消掉,能打印出中间计算过程,包括Lagrange多项式的求解,多项式每一项等等(代码多次修改,这些pr ...

  4. Note -「Lagrange 插值」学习笔记

    目录 问题引入 思考 Lagrange 插值法 插值过程 代码实现 实际应用 「洛谷 P4781」「模板」拉格朗日插值 「洛谷 P4463」calc 题意简述 数据规模 Solution Step 1 ...

  5. 数值计算方法实验之Lagrange 多项式插值 (Python 代码)

    一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...

  6. Python数值计算之插值曲线拟合-01

        3 插值与曲线拟合 Interpolation and Curve Fitting 给定n+1个数据点(xi,yi), i = 0,1,2,…,n,评估y(x). 3.1 介绍(introdu ...

  7. 数值分析案例:Newton插值预测2019城市(Asian)温度、Crout求解城市等温性的因素系数

    数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温性的因素系数 文章目录 数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温 ...

  8. Newton插值的C++实现

    Newton(牛顿)插值法具有递推性,这决定其性能要好于Lagrange(拉格朗日)插值法.其重点在于差商(Divided Difference)表的求解. 步骤1. 求解差商表,这里采用非递归法(看 ...

  9. 插值方法 - Newton向前向后等距插值

    通常我们在求插值节点的开头部分插值点附近函数值时,使用Newton前插公式:求插值节点的末尾部分插值点附近函数值时,使用Newton后插公式. 代码: 1 # -*- coding: utf-8 -* ...

随机推荐

  1. angular6 监听url查询参数变化刷新页面

    快照snapshot取到的参数是组件第一次渲染时候的参数,当我们在页面中需要根据不同的url查询参数显示不同的内容时,快照就不能满足我们的需要了,这时候就要用ActivatedRoute服务的quer ...

  2. Python从零开始——基本数据类型

  3. 一文教你如何使用miniconda

    安装python 之前安装python包,导致了python里面的包不兼容,用管理工具卸载也下载不掉,重新安装也安装不上,没有办法只能卸掉python重装. 安装Anaconda Anaconda指的 ...

  4. 【Tomcat】Web应用的目录结构

    创建时间:6.14 Web应用的目录结构 .xml文件不用自己写,抄头抄尾就可以 (别人的) (抄头抄尾) *注意:WEB-INF目录是受保护的,外界不能直接访问 如果访问WEB-INF目录下的htm ...

  5. [windows]c盘瘦身、系统盘清理临时文件、缓存等垃圾文件

    前言 虽然现在已经9102年了硬盘空间越来越大越便宜,但win系统用久了系统盘还是会渐渐变小的,公司的电脑系统盘就已经不够用了经常爆红,这个时候两个简单快速高效的办法 1.扩大系统盘空间,可以使用 w ...

  6. webuploader大文件分片,多线程总结

    项目的新需求是用webuploader来做一个多文件,多线程,并且可以进行分块上传的要求,这些在前面的一篇文章当中足够使用了,但是现在又来一个新的需求,要求上传失败的文件进行重新的上传……心里默默说句 ...

  7. 谷歌学术出现We're sorry解决办法

    出现这个的原因应该是同ip段的或者就是这个ip曾经是个google的黑名单ip,因为恶意爬取谷歌学术了.解决办法就是申请Hurricane Electric Free IPv6 Tunnel Brok ...

  8. java.time.format.DateTimeParseException: Text '2019-10-11 12:30:30' could not be parsed at index 10

    java.time.format.DateTimeParseException: Text '2019-10-11 12:30:30' could not be parsed at index 10 ...

  9. 小人大作战v0.02原型(单机)发布

    运行环境,pc,windows 链接:https://pan.baidu.com/s/1X5XR0flRAVuinnydNyRNng 提取码:cp9q 复制这段内容后打开百度网盘手机App,操作更方便 ...

  10. pointnet++论文的翻译

    参考: https://blog.csdn.net/weixin_40664094/article/details/83902950 https://blog.csdn.net/pikachu_777 ...