Python实现分段线性插值


Posted in Python onDecember 17, 2018

本文实例为大家分享了Python实现分段线性插值的具体代码,供大家参考,具体内容如下

函数:

Python实现分段线性插值

算法

这个算法不算难。甚至可以说是非常简陋。但是在代码实现上却比之前的稍微麻烦点。主要体现在分段上。

图像效果

Python实现分段线性插值

代码

import numpy as np
from sympy import *
import matplotlib.pyplot as plt


def f(x):
 return 1 / (1 + x ** 2)


def cal(begin, end):
 by = f(begin)
 ey = f(end)
 I = (n - end) / (begin - end) * by + (n - begin) / (end - begin) * ey
 return I


def calnf(x):
 nf = []
 for i in range(len(x) - 1):
  nf.append(cal(x[i], x[i + 1]))
 return nf


def calf(f, x):
 y = []
 for i in x:
  y.append(f.subs(n, i))
 return y


def nfSub(x, nf):
 tempx = np.array(range(11)) - 5
 dx = []
 for i in range(10):
  labelx = []
  for j in range(len(x)):
   if x[j] >= tempx[i] and x[j] < tempx[i + 1]:
    labelx.append(x[j])
   elif i == 9 and x[j] >= tempx[i] and x[j] <= tempx[i + 1]:
    labelx.append(x[j])
  dx = dx + calf(nf[i], labelx)
 return np.array(dx)


def draw(nf):
 plt.rcParams['font.sans-serif'] = ['SimHei']
 plt.rcParams['axes.unicode_minus'] = False
 x = np.linspace(-5, 5, 101)
 y = f(x)
 Ly = nfSub(x, nf)
 plt.plot(x, y, label='原函数')
 plt.plot(x, Ly, label='分段线性插值函数')
 plt.xlabel('x')
 plt.ylabel('y')
 plt.legend()

 plt.savefig('1.png')
 plt.show()


def lossCal(nf):
 x = np.linspace(-5, 5, 101)
 y = f(x)
 Ly = nfSub(x, nf)
 Ly = np.array(Ly)
 temp = Ly - y
 temp = abs(temp)
 print(temp.mean())


if __name__ == '__main__':
 x = np.array(range(11)) - 5
 y = f(x)

 n, m = symbols('n m')
 init_printing(use_unicode=True)

 nf = calnf(x)
 draw(nf)
 lossCal(nf)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python进阶教程之模块(module)介绍
Aug 30 Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
Numpy之将矩阵拉成向量的实例
Nov 30 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
Python 获取主机ip与hostname的方法
Dec 17 #Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 #Python
python样条插值的实现代码
Dec 17 #Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 #Python
python3爬虫获取html内容及各属性值的方法
Dec 17 #Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 #Python
python实现三次样条插值
Dec 17 #Python
You might like
合作指挥官:孟斯克
2020/03/16 星际争霸
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
Python生成随机MAC地址
2015/03/10 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python中url标签使用知识点总结
2020/01/16 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
python openCV自制绘画板
2020/10/27 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
计算机本科生自荐信
2013/10/15 职场文书
成品仓管员工作职责
2013/12/29 职场文书
实习单位接收函
2014/01/11 职场文书
体育之星事迹材料
2014/05/11 职场文书
工作年限证明模板
2015/06/15 职场文书
工伤调解协议书
2016/03/21 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python