Python数值计算(12)

本篇说说Neville方法。Neville方法的基础是,插值多项式可以递归的生成,有时进行插值的目的是为了计算某个点的值,这个时候并不需要将拟合曲线完全求出,而是可以通过递归的方式进行计算,具体操作如下:

例如有多个点,为了表达方便,这里取五个点x_0,x_2,...x_4,与之对应的值为P_0,P_1,...P_4,则可以构造列表:

其中

P_{0,1}=\frac{(x-x_0)P_1+(x-x_1)P_0}{x_1-x_0}

P_{1,2}=\frac{(x-x_1)P_2+(x-x_2)P_1}{x_2-x_1}

等等,随后P_{0,1,2}计算方式为:

P_{0,1,2}=\frac{(x-x_0)P_{1,2}+(x-x_2)P_{0,1}}{x_2-x_0}

最后递归地计算到P_{0,1,2,3,4},该值就是在对应值为x时的拟合值。

实现代码为:

import numpy as np
import matplotlib.pyplot as plt
from numpy.polynomial import Polynomial as P
np.polynomial.set_default_printstyle("unicode")def neville(x:np.ndarray,y:np.ndarray,p:float):n=len(x)Q=np.array([0.0]*n*n).reshape(n,n)Q[:,0]=y.copy()for c in range(1,n):for r in range(c,n):Q[r,c]=((p-x[r-c])*Q[r,c-1]-(p-x[r])*Q[r-1,c-1])/(x[r]-x[r-c])return Q

注意返回的是一个ndarray对象。

如何验证其拟合值呢?

第一组,用原来的函数f(x)=1-2x+3x^3,数据为:

XY
-2-19
-10
01
12
221

现在要计算在0.7处的拟合值。测试代码如下:

x=[-2,-1,0,1,2]
y=[-19,0,1,2,21]
print(x)
print(y)
ret=neville(x,y,0.7)
print(ret)

运行结果为:

[[-19.      0.      0.      0.      0.   ][  0.     32.3     0.      0.      0.   ][  1.      1.7    -9.01    0.      0.   ][  2.      1.7     1.7     0.629   0.   ][ 21.     -3.7    -0.19    0.629   0.629]]

函数值应该为:

print(ret[4,4]) # 0.6289999999999998
a=P([1,-2,0,3])
print(a(0.7)) # 0.6289999999999998

可见结果堪称完美。

测试另外一组数据:

XY
01
0.251.58033897
0.52.19829503
0.752.60553848
12.71828183

需要估算其在0.6处的值:函数调用如下:

x=np.array([0,0.25,0.5,0.75,1])
y=np.array([1,1.58033897,2.19829503,2.19829503,2.71828183] )
a=neville(x,y,0.6)
print(a)
print(a[4,4]) # 2.2488997156640003

运行结果是:

[[1.         0.         0.         0.         0.        ][1.58033897 2.39281353 0.         0.         0.        ][2.19829503 2.44547745 2.45601024 0.         0.        ][2.19829503 2.19829503 2.27244976 2.30916185 0.        ][2.71828183 1.88630295 2.13589661 2.20872496 2.24889972]]

因此,可知在0.6处的拟合值,其结果为2.2488997156640003。

然后再看看使用fit函数的结果:

F=P.fit(x,y,deg=4)
print(F)
# 2.19829503 + 0.53756111·x - 1.53483146·x² + 0.32157981·x³ + 1.19567734·x⁴
print(F(0.6)) # 2.2488997156639994

这种方式得到的在0.6处的拟合值结果为2.2488997156639994,两者几乎具有完全相同的结果。

事实上,这组数据是通过如下函数生成的(当然在拟合时,我们并不知道):

f(x)=\frac{e^x}{x^2-x+1}

该函数在该点处的结果为:f(0.6)=2.3975247373559325

上图汇总,红色是原函数的曲线,而绿色是通过fit得到的多项式函数,而蓝色点则是使用neville方法计算的0.6处的值。虽然比较两种拟合方式比较接近,但是由于我们的数据不太符合多项式的特性,因此拟合还是出现了较大的偏差,因此,再次说明,多项式拟合并不一定能够构造出客观反映数据规律的多项式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL学习 1

一些唠叨: 很多时候,都被Live2d吸引,去年想给网页加个live2d看板娘,结果看不懂live2d官方给的SDK,放弃了。今天又想弄个live2d桌宠,都已经在网上找到Python 的 Live2D 拓展库了,并提供了用QT实现…

昇思25天学习打卡营第19天|ResNet50 图像分类案例:数据集、训练与预测可视化

目录 环境配置 数据集加载 数据集可视化 Building Block Bottleneck 构建ResNet50网络 模型训练与评估 可视化模型预测 环境配置 首先指出实验环境预装的 mindspore 版本以及更换版本的方法。然后,它卸载了已安装的 mindspore 并重新安装指定的 2.3.0rc1 版本…

值得买科技与MiniMax达成官方合作伙伴关系,共建融合生态

7月29日,值得买科技与大模型公司MiniMax宣布达成官方合作伙伴关系。 MiniMax旗下大模型产品海螺AI现已接入值得买“消费大模型增强工具集”,基于海螺AI比价策略,用户可通过海螺AI“悬浮球”功能实现快速比价及跳转购买。 此次合作也标志着值…

操作系统重点总结

文章目录 1. 操作系统重点总结1.1 操作系统简介1.1.1 操作系统的概念和功能1.1.2 操作系统的特征1.1.2.1 并发1.1.2.2 共享1.1.2.3 虚拟1.1.2.4 异步 1.1.3 操作系统的发展与分类1.1.4 中断和异常1.1.5 系统调用1.1.6 操作系统的体系结构1.1.7 操作系统简介总结 1.2 进程1.2.1 …

使用YApi平台来管理接口

快速上手 进入YApi官网,进行注册登录https://yapi.pro/添加项目 3. 添加分类 4. 添加接口 5. 添加参数 添加返回数据 可以添加期望 验证 YAPI(Yet Another Practice Interface)是一个现代化的接口管理平台,由淘宝团队…

企业邮箱如何进行邮件监控

企业邮箱监控保障资产安全、合规性,防范网络攻击,提升员工行为。核心要素包括内容扫描、行为分析、合规性检查等。实施策略涉及技术选择、政策制定、员工培训。企业邮箱如何进行邮件监控呢?Zoho邮箱的eDiscovery功能可实现长期邮件保存和监控…

基于百度paddle检索系统的召回

所谓召回,无非就是用一段不规则文本模拟用户query查询,而要召回的是标准的titlekey,这些是要构建索引库的,所有相似文本对的第二个文本必须要在索引库里存在,不然就没法评估,因为标记都是0,还有召回1,召回5等,并不是什…

在Ubuntu 22 VPS服务器上更改phpMyadmin端口的方法

更改 Ubuntu 22 VPS服务器上的 phpMyAdmin 端口可以增强安全性和可管理性。但是具体应该怎么操作呢?接下来将带您了解在Ubuntu 22 VPS 服务器上更改phpMyadmin的端口全过程,一起来看看吧。 准备你的环境 在开始之前,让我们先确保你已做好一…

【前端逆向】最佳JS反编译利器,原来就是chrome!

有时候需要反编译别人的 min.js。 比如简单改库、看看别人的 min,js 干了什么,有没有重复加载?此时就需要去反编译Javascript。 Vscode 里面有一些反编译插件,某某Beautify等等。但这些插件看人品,运气不好搞的话,反…

实验2-3-8 计算火车运行时间

//实验2-3-8 计算火车运行时间 /* 输入格式:输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。 每个时间的格式为2位小时数(00-23)和2位分钟数(00-59)&#xff…

dockerfile部署镜像 ->push仓库 ->虚拟机安装建木 ->自动部署化 (详细步骤)

目录 创建私服仓库 vi /etc/docker/daemon.json vim deploy.sh判断脚本内容 创建 建木 后端部署 命名空间 设置密码用户名 创建git仓库 gitignore文件内容 图形项目操作 git maven docker镜像 点击流程日志 vim /etc/docker/daemon.json 执行部署脚本 ip 开发…

RuntimeError: No CUDA GPUs are available

RuntimeError: No CUDA GPUs are available 目录 RuntimeError: No CUDA GPUs are available 【常见模块错误】 【解决方案】 解决步骤如下: 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科…

Spring 高级解析 07

文章目录 1. Spring 概述(基本情况)1.1 Spring 的优势1.2 Spring 的核⼼结构 2. 核⼼思想 IoC 和 AOP2.1 什么是IoC?2.2 什么是AOP2.3 AOP在解决什么问题 3. Spring IoC ⾼级应⽤3.1 BeanFactory与ApplicationContext区别3.1.1 BeanFactory3.…

Android虚假定位的实现与防护

Android中常用的定位方式 一,GPS定位 定义:全球卫星定位系统,直接和卫星交互,获取设备经纬度 优点: 走卫星通信通道,无需打开Wifi或流量就能获得位置信息 精确度最高,几米到几十米 缺点&a…

Java面试八股之Spring AOP 和 AspectJ AOP 的区别

Spring AOP 和 AspectJ AOP 的区别 Spring AOP 和 AspectJ AOP 是两种不同的面向切面编程(Aspect-Oriented Programming, AOP)实现。它们各有特点,适用于不同的场景。下面是一些主要的区别: 1. 实现机制 Spring AOP: 基于代理…

为Mac配置Alfred

参考资料: Alfred神器使用手册 | louis blogMacOS神器之Alfred workflow概览GitHub - arpir/Alfred-Workflows-Collection: 一些好用的 Alfred Workflow 一、修改快捷键 Spotlight的默认快捷键是Command Space Alfred的默认快捷键是Option Space 可以将Alfred和…

Alternating Sum

Problem - 963A - Codeforces 处理式子 显然中间式子是等比数列 // Problem: A. Alternating Sum // Contest: Codeforces - Tinkoff Internship Warmup Round 2018 and Codeforces Round 475 (Div. 1) // URL: https://codeforces.com/problemset/problem/963/A // Memory Lim…

awk用法

文章目录 一、awk工具awk工作原理AWK程序的结构awk内置变量 二、案例1.基础案列2.BEGIN END 运算3.数值与字符串的比较4.awk高级用法5. awk if语句6.BEGIN END 流程7.AWK 数组8.awk 循环 一、awk工具 awk工作原理 当读到第一行时,匹配条件,然后执行指定…

【C++11】C++11新纪元:深入探索右值引用与移动语义

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:位图与布隆过滤器 🌹🌹期待您的关注 🌹🌹 ❀C11 📒1. C11简介…