python求两条曲线的边界线

问题描述:

已知两个平面曲线点集,一个取自y=x**2-2,x的区间为[-4,4],此点集存在列表X1,Y1中,另外一个取自y=-2*x,x的区间为[-5,5],此点集存在列表X2,Y2中,两条曲线将平面分成几个部分,现在要求两条曲线下面空间的边界线(包络线)。

方法:

为了找到两条离散曲线下的边界线,我们可以使用一种贪心算法,从左到右扫描,对于每个x值,我们检查两条曲线上的y值,选择较低的那个作为边界线上的点。由于两条曲线是离散的,同一个x值可能不对应两条曲线上的点,所以我们需要对曲线进行插值,以确保我们可以在任意x值上找到边界线上的点。

代码实现:

import numpy as npimport matplotlib.pyplot as pltfrom scipy.interpolate import interp1d# 定义x的区间和对应的y值x1 = np.linspace(-4, 4, 400)y1 = x1**2 - 2x2 = np.linspace(-5, 5, 400)y2 = -2 * x2# 创建插值函数interp_y1 = interp1d(x1, y1, kind='cubic', fill_value='extrapolate')interp_y2 = interp1d(x2, y2, kind='cubic', fill_value='extrapolate')# 定义一个较大的x区间用于扫描x_scan = np.linspace(min(min(x1), min(x2)), max(max(x1), max(x2)), 1000)# 找到边界线上的点y_boundary = np.zeros_like(x_scan)for i, x in enumerate(x_scan):    y_boundary[i] = min(interp_y1(x), interp_y2(x))# 绘制曲线和边界线plt.figure(figsize=(8, 6))plt.plot(x1, y1, label='y = x**2 - 2')plt.plot(x2, y2, label='y = -2*x')plt.plot(x_scan, y_boundary, label='Boundary Line', color='red')# 标记出边界线上的点plt.plot(x_scan, y_boundary, 'ro')plt.legend()plt.xlabel('x')plt.ylabel('y')plt.title('Boundary Line between Two Curves')plt.grid(True)plt.show()

优化后:

在下面优化后的代码中,我们使用 np.minimum 函数一次性比较了 interp_y1(x_scan) 和 interp_y2(x_scan) 的结果,从而避免了循环。这种方法利用了NumPy的向量化操作,可以显著提高性能,因为它减少了Python层面的循环,并利用了底层的优化。

此外,我们移除了 np.zeros_like 的使用,因为 np.minimum 函数直接返回了一个包含所需结果的数组。

import numpy as npimport matplotlib.pyplot as pltfrom scipy.interpolate import interp1d# 定义x的区间和对应的y值x1 = np.linspace(-4, 4, 400)y1 = x1**2 - 2x2 = np.linspace(-5, 5, 400)y2 = -2 * x2# 创建插值函数interp_y1 = interp1d(x1, y1, kind='cubic', fill_value='extrapolate')interp_y2 = interp1d(x2, y2, kind='cubic', fill_value='extrapolate')# 定义一个较大的x区间用于扫描x_scan = np.linspace(min(min(x1), min(x2)), max(max(x1), max(x2)), 1000)# 向量化地找到边界线上的点y_boundary = np.minimum(interp_y1(x_scan), interp_y2(x_scan))# 绘制曲线和边界线plt.figure(figsize=(8, 6))plt.plot(x1, y1, label='y = x**2 - 2')plt.plot(x2, y2, label='y = -2*x')plt.plot(x_scan, y_boundary, label='Boundary Line', color='red')# 标记出边界线上的点plt.plot(x_scan, y_boundary, 'ro')plt.legend()plt.xlabel('x')plt.ylabel('y')plt.title('Boundary Line between Two Curves')plt.grid(True)plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

若依框架登录鉴权详解(动态路由)

若依框架登录鉴权:1.获取token(过期在响应拦截器中实现),2.基于RBAC模型获取用户、角色和权限信息(在路由前置守卫),3.根据用户权限动态生成(从字符串->组件,根据permission添加动…

NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现

0x01 产品简介 NUUO网络视频录像机(Network Video Recorder,简称NVR)是NUUO Inc.生产的一种专业视频监控设备,它广泛应用于零售、交通、教育、政府和银行等多个领域。能够同时管理多个IP摄像头,实现视频录制、存储、回放及远程监控等功能。它采用先进的视频处理技术,提供…

【笔记】408刷题笔记

文章目录 三对角三叉树求最小带权路径UDP报文首部和TCP报文首部IP报文首部TCP报文首部UDP报文首部 刷新和再生的区别地址译码 为了区分队空队满,可以使用三种处理方式 1)牺牲一个单元 队头指针在队尾指针的下一位置作为队满的标志 队满条件:(…

会声会影2024发布了没有? 会声会影2024更新哪些内容?

嘿,亲爱的的朋友们,今天我要跟大家安利一款让我彻底沉迷、不能自拔的神器 —— 会声会影2024!如果你还在为视频编辑头疼,那么准备好迎接你的救星吧! 会声会影2024是一款功能全面的视频编辑软件,它不仅能帮你…

ThreadLocal常见面试题

1.请介绍一下ThreadLocal底层是怎么实现的? 一个线程开始运行的时候,通过set方法会把值放入threadLocals这个变成中,他的类型是ThreadLocalMap对象,里面是Entry数组,每一个Entry是键值对形式,key就是Thread…

Vue 3 + Element Plus 封装单列控制编辑的可编辑表格组件

在Web应用开发中,经常需要提供表格数据的编辑功能。本文将介绍如何使用Vue 3结合Element Plus库来实现一个支持单列控制编辑功能的表格,并通过封装组件的形式提高代码的复用性。通过本教程,你将学会如何构建一个具备单列控制编辑功能的表格组…

NISP 一级 | 3.3 网络安全防护与实践

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 0x01:虚拟专用网络 VPN 概述 虚拟专用网络(Virtual Private Network,VPN)是在公用网络上建立专用网络的技术。整个 VPN 网络的任意两个节点之间的连…

基于Java+SpringBoot+Vue+MySQL的美容美发管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的美容美发管理系统【附源码文档】、前后…

HAProxy--高性能反向代理

文章目录 Web架构负载均衡介绍为什么使用负载均衡负载均衡类型 HAProxy简介应用场景HAProxy是什么HAProxy功能 脚本安装HAProxy基础配置global多进程和线程HAProxy日志配置项 Proxies配置-listen-frontend-backendserver配置 frontendbackend配置实例子配置文件 HAProxy调度算法…

OpenCV findTours函数及其用法

OpenCV的findTours函数的原型如下: 函数参数: Image 输入图像,需8位单通道图像。非零像素被视为1。零像素保持为0,因 此图 像被视为二进制。您可以使用compare、inRange、threshold、adaptiveThreshold、Canny等从灰度或彩色图像…

注册网站怎么注册

网站注册成为我们日常生活中不可或缺的一部分。无论是社交媒体、电子商务平台还是各种在线服务,注册都是参与这些平台的第一步。下面将为您详细介绍一般网站注册的步骤,帮助您轻松完成注册过程。 1. 选择合适的网站 在注册之前,首先要确定您…

MeterSphere的一次越权审计

1 MeterSphere简介 MeterSphere是一个一站式开源持续测试平台,它提供了测试跟踪、接口测试、UI测试和性能测试等功能。它全面兼容JMeter、Selenium等主流开源标准,助力开发和测试团队实现自动化测试,加速软件的高质量交付。MeterSphere 的特点…

python爬虫基础:了解html

编辑器vscode <!DOCTYPE html> <html><head><title>第一个网页</title></head><body><h1>字体</h1><h2>字体</h2><h3>字体</h3><p>Lorem, ipsum dolor sit amet consectetur adipisicing…

网络学习-eNSP配置NAT

NAT实现内网和外网互通 #给路由器接口设置IP地址模拟实验环境 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-Gigabi…

ETL数据集成丨MySQL到MySQL的数据迁移实践

前言 MySQL数据迁移至另一MySQL数据库的过程&#xff0c;不仅是数据复制或移动的操作那么简单&#xff0c;它还涉及到一系列策略性考量和技术优化&#xff0c;旨在实现数据的高效、安全传输&#xff0c;以及确保目标系统的高性能运行。其深远意义在于为企业的数字化转型提供强…

vscode 中使用 yarn 出错

问题 vscode 中使用 yarn 爆红&#xff0c;类似下图的错误&#xff1a; 原因 由于vscode中的集成终端使用的是powershell&#xff0c;所以需要设置下该权限才能正常使用yarn 解决 找到 powershell&#xff0c;以管理身份运行 输入&#xff1a;set-ExecutionPolicy Remot…

【目标检测数据集】铁轨表面缺损检测数据集4789张VOC+YOLO格式

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4789 标注数量(xml文件个数)&#xff1a;4789 标注数量(txt文件个数)&#xff1a;4789 标注…

前端---对MVC MVP MVVM的理解

就需要从前端这些年的从无到有、从有到优的变迁过程讲一下。 1. Web1.0时代 在web1.0时代并没有前端的概念&#xff0c;开发一个web应用多数采用ASP.NET/Java/PHP编写&#xff0c;项目通常用多个aspx/jsp/php文件构成&#xff0c;每个文件中同时包含了HTML、CSS、JavaScript、…

安科瑞Acrelcloud-6000银行安全用电管理平台在湖南新盛业的应用

摘要 安科瑞Acrelcloud-6000安全用电管理平台是针对我国当前电气火灾事故频发而创新的一套电气火灾预警和预防管理系统&#xff0c;该系统是基于移动互联网、云计算技术、通过物联网传感终端&#xff08;现场监控模块、传输模块&#xff09;&#xff0c;将供电侧、用电侧电气安…

jupyter出错ImportError: cannot import name ‘np_utils‘ from ‘keras.utils‘ ,怎么解决?

文章前言 此篇文章主要是记录一下我遇到的问题以及我是如何解决的&#xff0c;希望下次遇到类似问题可以很快解决。此外&#xff0c;也希望能帮助到大家。 遇到的问题 出错&#xff1a;ImportError: cannot import name np_utils from keras.utils &#xff0c;如图&#xf…