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样条插值的具体实现代码,供大家参考,具体内容如下 import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #导入数据 data1=pd.read_csv('data1.c
-
python计算对角线有理函数插值的方法
本文实例讲述了python计算对角线有理函数插值的方法.分享给大家供大家参考.具体实现方法如下: ''' p = rational(xData,yData,x) Evaluates the diagonal rational function interpolant p(x) that passes through he data points ''' from numpy import zeros def rational(xData,yData,x): m = len(xData) r =
-
python用插值法绘制平滑曲线
本文实例为大家分享了python用插值法绘制平滑曲线的具体代码,供大家参考,具体内容如下 原图: 平滑处理后: 代码实现如下: # 1. 随机构造数据 import numpy as np x = range(10) y = np.random.randint(10,size=10) # 2. 绘制原图 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline # jupyter notebook显示绘
-
python实现三次样条插值
本文实例为大家分享了python实现三次样条插值的具体代码,供大家参考,具体内容如下 函数: 算法分析 三次样条插值.就是在分段插值的一种情况. 要求: 在每个分段区间上是三次多项式(这就是三次样条中的三次的来源) 在整个区间(开区间)上二阶导数连续(当然啦,这里主要是强调在节点上的连续) 加上边界条件.边界条件只需要给出两个方程.构建一个方程组,就可以解出所有的参数. 这里话,根据第一类样条作为边界.(就是知道两端节点的导数数值,然后来做三次样条插值) 但是这里也分为两种情况,分别是这个数值是
-
python使用插值法画出平滑曲线
本文实例为大家分享了python使用插值法画出平滑曲线的具体代码,供大家参考,具体内容如下 实现所需的库 numpy.scipy.matplotlib 实现所需的方法 插值 nearest:最邻近插值法 zero:阶梯插值 slinear:线性插值 quadratic.cubic:2.3阶B样条曲线插值 拟合和插值的区别 简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点. 拟合是通过原有数据,调整曲线系数,使得曲线与已知点集的差别(最小二乘)最小,最后生成的曲线不一定经过原有点
-
python中的插值 scipy-interp的实现代码
具体代码如下所示: import numpy as np from matplotlib import pyplot as plt from scipy.interpolate import interp1d x=np.linspace(0,10*np.pi,num=20) y=np.sin(x) f1=interp1d(x,y,kind='linear')#线性插值 f2=interp1d(x,y,kind='cubic')#三次样条插值 x_pred=np.linspace(0,10*np.
-
Python对数据进行插值和下采样的方法
使用Python进行插值非常方便,可以直接使用scipy中的interpolate import numpy as np x1 = np.linspace(1, 4096, 1024) x_new = np.linspace(1, 4096, 4096) from scipy import interpolate tck = interpolate.splrep(x1, data) y_bspline = interpolate.splev(x_new, tck) 其中y_bspline就是从1
-
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 =
-
python计算分段函数值的方法
本博文源于python科学计算,旨在解析如何使用python进行计算分段函数值.下面就以复杂的二元函数进行演示. 题目再现 求解思路 首先先生成x1,x2,然后我们将其映射到网格里,最后写出表达式,进行求解.题目效果,再来张图片,就更加好了! 代码再现 # -*- coding:UTF-8 -*- # 开发时间:2021/9/1 13:27 import numpy as np import matplotlib.pyplot as plt x = np.arange(-2,2,0.04) y
-
用Python实现插值算法
数模比赛中,常常需要对数据进行处理和分析,但有时候数据不多,就需要一些方法“模拟产生”一些靠谱的值来满足需求,这就是插值的作用.本文不再具体介绍每个插值算法的内在原理,将直接通过调包实现. 下面,先上三件套,看一下原始数据的大致情况: import numpy as np import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel('data.xlsx') 拉格朗日插值算法 原始数据我们采用sin(x)的形式,
-
Python最基本的数据类型以及对元组的介绍
简单类型 内置到 Python 编程语言中的简单数据类型包括: bool int float complex 支持简单数据类型不是 Python 独有的功能,因为多数现代编程语言都具有完整类型补充.例如 Java? 语言甚至有一组更丰富的原始数据类型: byte short int long float double char boolean 但是,在 Python 中,简单数据类型并不是原始数据类型,而是完善的对象
-
Numpy一维线性插值函数的用法
直接列出函数: numpy.interp(x, xp, fp, left=None, right=None, period=None) x - 表示将要计算的插值点x坐标 xp - 表示已有的xp数组 fp - 表示对应于已有的xp数组的值 left - 表示当x值在xp中最小值左边时,x对应y的值为left right - 表示当x值在xp中最大值右边时,x对应y的值为right (left和right表示x在xp的域外时,y的取值) example: 1. import numpy as n
-
MATLAB 如何求取离散点的曲率最大值
我就废话不多说了,大家还是直接看代码吧~ x0 = linspace(0.1,2,100);%x0,y0验证函数离散点,可以非等间隔 y0 = 1./x0; h1 = abs(diff(x0)) ; h = [h1 h1(end)]; ht = h; yapp1 = gradient(y0)./ht; %matlab数值近似 yapp2 = del2(y0)./ht; %matlab数值近似 k2 = abs(yapp2)./(1+yapp1.^2).^(3/2); figure plot(k2
-
在python中将list分段并保存为array类型的方法
如下所示: list=[1,2,3,4,5,6,7,8,9,0,11,0,13,14,15,16,17,18,19,20] #把list分为长度为5的4段 for j in range(0,len(list),5): matrix.append(list[j:j+5]) matrix=np.array(matrix)#转array型 print matrix[0]#输出第一段 结果: [[ 1 2 3 4 0] [ 6 7 8 0 0] [11 0 13 14 15] [16 0 18 19 2
-
python使用Matplotlib绘制分段函数
本文实例为大家分享了python使用Matplotlib绘制分段函数的具体代码,供大家参考,具体内容如下 环境 Python3 Mac OS 代码 # coding:utf-8 """ Author: roguesir Date: 2017/8/30 GitHub: https://roguesir.github.com Blog: http://blog.csdn.net/roguesir """ import numpy as np impo
-
Python坐标线性插值应用实现
一.背景 在野外布设700米的测线,点距为10米,用GPS每隔50米测量一个坐标,再把测线的头和为测量一个坐标.现在需使用线性插值的方法求取每两个坐标之间的其他4个点的值. 二.插值原理 使用等比插值的方法 起始值为 a 终止值为 b 步长值为 (a-b)/5 后面的数分别为 a+n, a+2n, a+3n, a+4n 三.代码实习对 x 插值 interx.py import numpy as np f = np.loadtxt('datax.txt') a = f[:, 0] b = f[:
-
python 实现list或string按指定分段
我就废话不多说了,直接上代码吧! #方法一 def list_cut(mylist,count): length=len(mylist) merchant=length//count re_merchant=merchant+1*(0 if length%count==0 else 1) begin=0 result_list = [] while (count>0): result_list.append(mylist[begin:begin+re_merchant]) begin=begin
随机推荐
- Python实现栈的方法
- json的前台操作和后台操作实现代码
- JS动态的把左边列表添加到右边的实现代码(可上下移动)
- python虚拟环境virualenv的安装与使用
- 详解nodejs模板引擎制作
- Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
- Android日期时间格式国际化的实现代码
- 十天学会php之第四天
- Python有序字典简单实现方法示例
- C语言与JAVA的区别是什么(推荐)
- 在centOS 7安装mysql 5.7的详细教程
- Android实现美团、大众点评的购买悬浮效果(ScrollView滚动监听)
- 零基础学习AJAX之AJAX的简介和基础
- 理解JavaScript中Promise的使用
- 解析Javascript单例模式概念与实例
- Apache 文件根目录设置修改方法 (Document Root)
- 成功的背后!(给所有IT人)第1/3页
- django 按时间范围查询数据库实例代码
- JavaScript轮播停留效果的实现思路
- C语言统计一串字符中空格键、Tab键、回车键、字母、数字及其他字符的个数(Ctrl+Z终止输入)