基于python的三样条插值程序

这篇博客介绍了在学习《数值计算方法》时完成的一项大作业,即使用Python编写了一个三样条插值函数。该函数能根据Excel数据样本和边界条件拟合出相应函数,代码包括主程序、三样条插值计算以及辅助功能模块。
摘要由CSDN通过智能技术生成

在修《数值计算方法》的时候写的大作业,用python实现的一个三样条插值函数。可以根据给定的点拟合出相应函数,代码如下

1.main.py

数据样本通过excel读入,格式如下。然后输入相应的边界条件,数学原理参考《数值计算方法》

 

import Spline
import other_function
def main():

    filename=input("输入excel的名字(如sinx.xls):")
    x,y=other_function.read_from_xls(filename)
    # 创建一个三样条类
    a=Spline.spline(x,y)
    limit=eval(input("选择边界条件,1代表一型,2代表二型(如输入1):"))
    # 输入三样一型边界
    if limit==1:
        n=eval(input("输入首端点一阶导(如1):"))
        m=eval(input("输入末端点一阶导(如1):"))
        a.first_limit(n,m)
    # 三样条二型边界 ,这里只能调用一个,不要重复调用
    if limit==2:
        n = eval(input("输入首端点二阶导(如1):"))
        m = eval(input("输入末端点二阶导(如1):"))
        a.second_limit(n,m)
    # 绘制三样条函数
    a.draw_function()
    #返回所有的三次函数
    list=a.stander_cubic_fuction()
    #以txt的格式写入所有结果
    out_filename=input("输入输出文件名(如sinx):")
    other_function.write_cubic_function(list,out_filename)
    #寻找转折点


    turn_point=a.find_turing()
    turn_point_file = open(out_filename + "_turn", 'w')
    turn_point_file.write('x:  '+str(turn_point[1]))
    turn_point_file.write('\n')
    turn_point_file.write('y:   '+str(turn_point[0]))
    turn_point_file.close()




main()
Spline.random_test(10)

2.spline.py

实现三样条插值计算,其中包括

 2.1追赶法解三对对角矩阵,参考:https://en.wikibooks.org/wiki/Algorithm_Implementation/Linear_Algebra/Tridiagonal_matrix_algorithm

 2.2随机生成点的测试函数

 2.3三样条插值参考西北工业大学出版社《数值计算方法》

 

#追赶法解三对角矩阵
import numpy as np
import matplotlib.pyplot as plt
import random
import other_function
def TDMAsolver(a, b, c, d):

    nf = len(d)  # number of equations
    ac, bc, cc, dc = map(np.array, (a, b, c, d))  # copy arrays
    for it in range(1, nf):
        mc = ac[it - 1] / bc[it - 1]
        bc[it] = bc[it] - mc * cc[it - 1]
        dc[it] = dc[it] - mc * dc[it - 1]

    xc =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值