三次样条插值实现函数拟合

该博客介绍了如何使用Python进行三次样条插值,包括给定函数和点集的拟合,提供不同边界条件的选择,并展示了部分运行结果。程序具有良好的鲁棒性和独立性,适用于数值分析实验。
摘要由CSDN通过智能技术生成

数值分析实验——三次样条插值

GoatWu

一、程序摘要

此程序使用 python3.7 语言编写。引入了外部库函数 numpy 作为数学工具解方程,matplotlib 作为画图工具。由于需要多步运行,对不同的参数进行绘图,因此使用了 jupyter-notebook 作为编写工具。

由于用到的函数较多,为了安全起见,此程序将内部函数封装在了 Functions.py 模块中,将接口函数封装在了 spline.py 模块中。在 spline.py 中,我们引用了 Functions.py 的内部函数;在主程序中,我们只需要引入 spline 模块即可:import spline as sp

程序有两个接口。第一个接口函数的功能是,对于给定的函数,在给定的范围中均匀选点,然后进行三次样条插值进行拟合;第二个接口函数的功能是,对于给定的点集与边界条件,将这些点利用三次样条插值进行拟合。下面我们将逐一呈现。

二、程序功能

1. 给定函数的拟合

接口:sp.give_func(func = F.runge, beg = -5, end = 5, segments = 10)

参数意义:

  • func:需要拟合的函数。默认值为 Functions 中的龙格函数
  • beg:拟合范围的左端点
  • end:拟合范围的右端点
  • segments:拟合的区间个数,也即点的个数减 1 1 1

使用示例:

  • sp.give_func()

[ − 5 , 5 ] [-5,5] [5,5] 的范围内用 10 10 10 段拟合龙格函数
在这里插入图片描述

  • sp.give_func(beg = -5, end = 5, segments = 6)

[ − 5 , 5 ] [-5,5] [5,5] 的范围内用 6 6 6 段拟合龙格函数。
在这里插入图片描述

  • def f(x):
        return (x * x * x + 6 * x * x + 7 * x + 1) / (x * x + 1);
    sp.give_func(f, -4, 4, 8)
    

对自定义的函数 f ( x ) = x 3 + 6 x 2 + 7 x + 1 x 2 + 1 f(x)=\frac{x^3+6x^2+7x+1}{x^2+1} f(x)=x2+1x3+6x2+7x+1 ,分 8 8 8 段 在区间 [ − 4 , 4 ] [-4,4] [4,4] 来拟合函数。
在这里插入图片描述

2. 给定点集的拟合

接口:sp.give_nodes(x, y, opt = 0, lval = 0, rval = 0)

参数意义:

  • x:给定点集的 x x x 坐标数组
  • y:给定点集的 y y y 坐标数组
  • opt:插值的边界条件
    • opt = 0:默认边界条件,左右两端点处的三阶导与前一端点处三阶导相等
    • opt = 1:给定左右两端点的一阶导,分别为lvalrval
    • opt = 2:给定左右两端点的二阶导,分别为lvalrval

使用示例:

x = x = [27.7, 28, 29, 30]
y = [4.1, 4.3, 4.1, 3.0]
  • sp.give_nodes(x, y)

对给定的点集用默认边界条件来拟合。
在这里插入图片描述

  • sp.give_nodes(x, y, opt = 1, lval = 3.0, rval = -4.0)

给定左右边界端点的一阶导来拟合。
在这里插入图片描述

  • sp.give_nodes(x, y, opt = 2, lval = 27.0, rval = -34.0)

给定左右边界端点的二阶导来拟合。
在这里插入图片描述

3. 给出各分段的三次函数表达式

在这里插入图片描述

三、程序的鲁棒性

1. 无给定函数的提示

对于给定函数的拟合,在无输入函数的情况下,默认使用龙格函数,并弹出提示:
在这里插入图片描述

2. 错误的 opt 参数

对于给定点集的拟合,如果 opt 参数不为有意义的值,返回错误:
在这里插入图片描述

3. 额外的 lvalrval

对于给定点集的拟合,如果 opt = 0 下,仍给出lvalrval 值,返回错误:
在这里插入图片描述

4. 给定点集的 xy 长度不等

对于给定点集的拟合,如果 x 数组和 y 数组长度不等,返回错误:
在这里插入图片描述

四、部分程序运行结果

1. 给定函数的拟合

1.1. 龙格函数

在这里插入图片描述
在这里插入图片描述

1.2. 给定其他函数

在这里插入图片描述

2. 给定点集的拟合

2.1. 默认情况

在这里插入图片描述

2.2. 给定一阶导的边界条件

在这里插入图片描述

2.3. 给定二阶导的边界条件

在这里插入图片描述

五、程序源代码

1. Functions.py

import math
import numpy as np
import matplotlib.pyplot as plt


def runge(y):
    y = np.float32(y)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值