Python与数值计算方法

3 插值与曲线拟合

Interpolation and Curve Fitting
给定n+1个数据点(xi,yi), i = 0,1,2,…,n,评估y(x).

3.1 介绍(introduction)

离散数据集,或者形如下面的表格,常常在技术计算中用到,数据源可能来自于实验观察或者数值计算。

3.2 多项式插值(Polynomial Interpolation)
插值和曲线拟合存在差别。对于插值,我们通过数据拟合一条曲线,在拟合过程中,我们潜在假设数据是精确的和独特的;对于曲线拟合,使用的数据通常存在测量误差而引入了噪声,在某种程度上,我们想发现一条光滑的曲线近似数据点,进而,曲线不必穿过每个数据点。插值和曲线拟合的区别如下图:

Lagrange’s Method拉格朗如方法
插值最简单的形式是多项式,经过n+1个明确的数据点,构建一个自由度为n的特定多项式总是可以实现的。包含这个多项式的方法就是朗格朗日方程:

其中基函数(cardinal function)li(x)如下:

  • 例子1:n=1,p1(x)=y0l0(x)+y1l1(x)
  • 例子2:n=2,

通过观察,基函数具有如下性质

  • 是一个自由度为n的多项式

  • 注:Kronecker delta (δij),当n=2,x0=0,x1=2,x2=3时,性质如下图

多项式插值误差如下:

ξ位于区间(x0,xn)

牛顿方法Newton’s Method
牛顿方法的插值多项式如下:

对于有四个数据点n=3,多项式如下:

n=3,利于编程,定义如下形式:

n,定义如下:

Denoting the x-coordinate array of the data points by xData and the degree of the polynomial by n, we have the following algorithm for computing Pn(x):

p = a[n]
for k in range(1, n+1):
    p = a[n-k] + (x - xData[n-k])*p

系数Pn迫使多项式通过每一个数据点:yi=Pn(xi), i=0,1,...,n。则下面的方程同时发生:

引入均差概念(divided differences)

则有:

对于n=4,手工计算系数,可以通过如下表格快速解决:

正好是多项式的系数。

Machine computations can be carried out within a one-dimensional array a employing the following algorithm (we use the notation m = n + 1 = number of data points):
Python 计算流程如下:

a = yData.copy()
for k in range(1,m):
    for i in range(k, m):
        a[i] = (a[i] - a[k-1])/(xData[i] - xData[k-1])

最初,a包含数据的y坐标,因此它与上表中的第二列相同。 每次通过外部循环时,都会在下一列中生成条目,这会覆盖a的相应元素。 因此,结束包含上表中的对角项(即多项式的系数)。

牛顿多项式插值方法的Python代码
Newton’s method. Given the data point arrays xData and yData, the function coeffts returns the coefficient array a. After the coefficients are found, the interpolant Pn(x) can be evaluated at any value of x with the function evalPoly.

def evalPoly(a, xData, x):
    n = len(xData) - 1
    p = a[n]
    for k in range(1, n+1):
        p = a[n-k]  + (x - xData[n-k])*p
    return p

def coeffts(xData, yData):
    m = len(xData)
    a = yData.copy()
    for k in range(1,m):
        a[k:m] = (a[k:m] - a[k-1]) / (xData[k:m] - xData[k-1])
    return a

参考翻译《Numerical Methods in Engineering with Python 3》

原文地址:https://www.cnblogs.com/brightyuxl/p/9058353.html

时间: 2024-10-20 01:04:40

Python与数值计算方法的相关文章

Python的数值类型

问题: 1. Python数值有哪些? 2. 各类型的精度是多少? 3. 类型的转换是如何实现的? 5. 如何使用这些数据类型?需要注意什么? 6. 什么是不可变类型? 数值类型:     整型: (不可变类型)         标准整型:取值范围[-sys.maxint-1, sys.maxint]         长整型:可表示无限大的整数,其值仅与你机器支持的(虚拟)内存大小有关         数值超出标准整型范围将会转换为长整型.         例如:             1.定

Python的数值和字符串

Python数据类型 1.数值 --类型:  1/整型 2/长整型   3/浮点型 -- 0.0, 12.0, -18.8, 3e+7等 4/复数型 -- complex  In [1]: 0x34al Out[1]: 842L --0x34a --表示16进制 --l --表示长整型 In [2]: 4e+7 Out[2]: 40000000.0 In [3]: type(4e+7) Out[3]: float --科学计数法 In [4]: b = "hello\nlulu" In

Python的数值类型与序列类型

先说一下基本学习要用的一些基本软件: 1.vmware,和virtualbox,:是两款虚拟软件,用于创建虚拟机供使用. 2.ubuntu:一款基于Linux开发的操作系统. 3.Python:Python里面包含的Python解释器. 4.xshell:远程连接控制软件. 5.pycharm:专门为Python开发的一款IDLE. 这个几个软件或者说工具,需要进行配合才能使程序运行起来,配合需要相互配置,相互协调,这个是个难点,需要多加练习. 程序就是需要多加练习,多加学习才能完全去了解他们,

[ SHELL编程 ] shell编程中数值计算方法实例

SHELL编程中经常会涉及到数值的相关计算,有时候对于这些计算命令的时候场景容易忘记或者混淆,这里针对常用的计算做一个总结.主要包括let.bc.expr.(())等. 1.let 使用格式:let 表达式,表达式必须是完整的表达式,即等号两边.只能赋值,不支持浮点数运算,不支持直接输出 $ var=10 $ let var+=2 #var=12,中间不能有空格 $ let var=var+2 #var=14 $ let var*=2 #var=28 $ let var/=2 # var=14

python练习-数值比较

num1=float(raw_input("enter the number1:"))       num2=float(raw_input("enter the number2:"))  if num1 < num2:     print num1,"is less than",num2 if num1 > num2:     print num1,"is greater than",num2      if n

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

Python数值和字符串

Python数据类型 数值 字符串 列表 元组 字典 1.1    数值的类型 整形 长整型 浮点数 复数类 字符串类型,有3种方法可以定义: 在python中 单引号 和双引号没有任何区别,在shell中单引号是完全引用,双引号表示部分引用. str = 'this is a string' str = "this is a string" str = '''this is a string''' a = "hello\nworld" 三重引号既可以表示注释,也可

Python代码样例列表

├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│      NFA引擎,Python正则测试工具应用示例.py│      Python datetime计时程序的实现方法.py│      python du熊学斐波那契实现.py│      python lambda实现求素数的简短代码.py│      Python localtime()方法计算今天是一年中第几周.py│      Python math方法算24点代码详解.py│      Pyth

python源代码解读

所有Python源代码文件都使用扩展名 .py.当运行.py文件时,Python会自动创建相应的.pyc文件..pyc文件包含目标代码. 看下面一个简单程序: #name.py name=input('what is your first name?') print('hello '+name.capitalize()+'!') 第一行是源代码注释,python注释总是以符号#打头,并延续到行尾. 第二行调用函数input,这是用于从键盘读取字符串的标准内置函数.这行代码执行时,将在输出窗口中显