关于拉格朗日和内维尔插值算法的python实现

先是逐步插值,主体十分简单,关键在于算法部分,我运用了矩阵的数据结构来存储每次迭代后的新值。角标的循环初看可能有些复杂,自己动手走一遍就会很清楚啦

 1 #coding=gbk
 2 ‘‘‘
 3 Created on 2014-8-31
 4
 5 @author: Administrator
 6 ‘‘‘
 7
 8 def Neville(xt,m,n,x):
 9     for i in range(1,n):
10         for j in range(1,n):
11             w[i-j][i]=(x-xt[i-j])/(xt[i]-xt[i-j])
12             m[i][j]=m[i-1][j-1]+w[i-j][i]*(m[i][j-1]-m[i-1][j-1])
13     for i in range(n):
14         for j in range(0,i+1):
15             if j%n==0:
16                 print("\n")
17             print(‘ %f‘ %m[i][j])
18
19 n = int(input(‘插入节点个数:‘))
20 x = float(input(‘输入x的值:‘))
21 m = [[0 for i in range(n)] for j in range(n)]    #创建n*n矩阵
22 w = [[0 for i in range(n)] for j in range(n)]
23 xt = [0]*n
24 for i in range(n):
25     m[i][0] = float(input(‘插入第%d个y值:‘ %(i+1)))
26 for i in range(n):
27     xt[i] = float(input(‘插入第%d个x值:‘ %(i+1)))
28 Neville(xt,m,n,x)

下面的是拉格朗日插值算法,十分简单,分享借鉴。

 1 #coding=gbk
 2 ‘‘‘
 3 Created on 2014-8-31
 4
 5 @author: Administrator
 6 ‘‘‘
 7 def lagrange(x,xt,yt):
 8     y = 0
 9     for i in range(3):
10         t = 1
11         for j in range(3):
12             if i!=j:
13                 t = t*(x-xt[j])/(xt[i]-xt[j])
14         y = y+t*yt[i]
15     print("结果为:%f" %y)
16
17 xt = []
18 yt = []
19 x = float(input("插值x;"))
20 n = int(input("节点数目;"))
21 for i in range(n):
22     xt.append(float(input("第%d个x的值" %(i+1))))
23 for i in range(n):
24     yt.append(float(input("第%d个x的值" %(i+1))))
25
26 lagrange(x,xt,yt)
时间: 2024-12-17 17:49:04

关于拉格朗日和内维尔插值算法的python实现的相关文章

双线性插值算法原理 python实现

码字不易,如果此文对你有所帮助,请帮忙点赞,感谢! 一. 双线性插值法原理: ① 何为线性插值? 插值就是在两个数之间插入一个数,线性插值原理图如下: 在位置 x 进行线性插值,插入的值为f(x) ↑  ② 各种插值法: 插值法的第一步都是相同的,计算目标图(dstImage)的坐标点对应原图(srcImage)中哪个坐标点来填充,计算公式为: srcX = dstX * (srcWidth/dstWidth) srcY = dstY * (srcHeight/dstHeight) (dstX,

数值分析Python实现系列—— 一、拉格朗日插值法

一.拉格朗日插值法 1.原理: 拉格朗日插值法:给定n个观测值(xk,yk)找到一组(n个)基函数 lk(x)  , 使得L(x) 为这组基函数的线性组合,并且使得L(x)是经过这些点的多项式 我们发现其中的一种找发是  :  满足这样线性组合的系数 是 观测值yk (n个) 满足这样线性组合的基函数形如: 2.Python实现: 思路: 1.观察发现基函数的分母与x无关,是观测值x的组合,可以先计算出来,留着以后用 2.每一个预测值先计算分子,再把每一个分子乘以每一个预测值,除以每一个分母,最

拉格朗日插值Python代码实现

1. 数学原理 对某个多项式函数有已知的k+1个点,假设任意两个不同的都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个lj(x)为拉格朗日基本多项式(或称插值基函数),其表达式为: 2. 轻量级实现 利用 直接编写程序,可以直接插值,并且得到对应的函数值.但是不能得到系数,也不能对其进行各项运算. def h(x,y,a): ans=0.0 for i in range(len(y)): t=y[i] for j in range(len(y)): if i !=j:

python拉格朗日插值

#拉格朗日插值代码 import pandas as pd #导入数据分析库Pandas from scipy.interpolate import lagrange #导入拉格朗日插值函数 inputfile = '../data/catering_sale.xls' #销量数据路径 outputfile = '../tmp/sales.xls' #输出数据路径 data = pd.read_excel(inputfile) #读入数据 data[u'销量'][(data[u'销量'] < 4

Python实现拉格朗日插值法

已知sinx的一组x,y对应关系,用拉格朗日插值法估计sin(0.3367)的值. x x0.32 0.34 0.36 y 0.314567 0.333487 0.352274 // class Interpolation: def __init__(self, x, y): self.x = x self.y = y def func(self, X): s = 0 for i in range(len(self.x)): W = 1 w = (X - self.x[i]) for j in

[零基础学python]眼花缭乱的运算符

在计算机高级中语言,运算符是比较多样化的.其实,也都源于我们日常的需要. 算术运算符 前面已经讲过了四则运算,其中涉及到一些运算符:加减乘除,对应的符号分别是:+ - * /,此外,还有求余数的:%.这些都是算术运算符.其实,算术运算符不止这些.根据中学数学的知识,看官也应该想到,还应该有乘方.开方之类的. 下面列出一个表格,将所有的运算符表现出来.不用记,但是要认真地看一看,知道有那些,如果以后用到,但是不自信能够记住,可以来查. 运算符 描述 实例 + 加 - 两个对象相加 10+20 输出

主成分分析法原理及其python实现

主成分分析法原理及其python实现 前言: 这片文章主要参考了Andrew Ng的Machine Learning课程讲义,我进行了翻译,并配上了一个python演示demo加深理解. 本文主要介绍一种降维算法,主成分分析法,Principal Components Analysis,简称PCA,这种方法的目标是找到一个数据近似集中的子空间,至于如何找到这个子空间,下文会给出详细的介绍,PCA比其他降维算法更加直接,只需要进行一次特征向量的计算即可.(在Matlab,python,R中这个可以

【数值分析】拉格朗日插值与牛顿插值

在工程应用和科学研究中,经常要研究变量之间的关系y=f(x).但对于函数f(x),常常得不到一个具体的解析表达式,它可能是通过观测或实验得到的一组数据(x,f(x)),x为一向量;或则是解析表达式非常复杂,不便于计算和使用.因此我们需要寻找一个计算比较简单的函数S(x)近似代替f(x),并使得S(x)=f(x),这种方法就称为插值法. 常用的插值法有: 一维插值法:拉格朗日插值.牛顿插值.分段低次插值.埃尔米特插值.样条插值. 二维插值法:双线性插值.双二次插值. 拉格朗日插值法 已知函数f(x

【机器学习算法-python实现】svm支持向量机(2)—简化版SMO算法

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识 通过上一节我们通过引入拉格朗日乗子得到支持向量机变形公式.详细变法可以参考这位大神的博客--地址 参照拉格朗日公式F(x1,x2,...λ)=f(x1,x2,...)-λg(x1,x2...).我们把上面的式子变型为: 约束条件就变成了: 下面就根据最小优化算法SMO(Sequential Minimal Optimization).找出距离分隔面最近的点,也就是支持向量集.如下图的蓝色点所示.