使用Python,matplotlib绘制复杂曲线,并求其交点,y=-sin(x)-x-1并求解函数的值

2023-11-13

写这篇博客源于博友的提问,将介绍如何使用Python,matplotlib绘制复杂曲线,并求其交点,y=-sin(x)-x-1并求解函数的值。
在这里插入图片描述

1. 效果图

y=sin(x)效果图如下:
在这里插入图片描述

y = -x - ln(x)效果图如下:
在这里插入图片描述

y=-sin(x)-x-1 & y=0 效果图如下:
求解:函数 sin(x)+x+1=0的值
可以理解为 求y=-sin(x)-x-1 与 y=0这俩条线的交点的值
求解值,可以先缩小俩条曲线x与y的范围,然后计算相邻点的值 < 某个值0.1等,则认为相交。

在这里插入图片描述

2. 源码

import numpy as np
from matplotlib import pyplot as plt

# 1. 绘制y=sin(x)
# 定义 x 变量的范围 (-15,15) 数量 100
x = np.linspace(-15, 15, 100)
y = np.sin(x)

# 开始绘图
# 绘制 y=-x-exp(x) 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x, y, color='red', linewidth=1.0, linestyle='--')
plt.title('y=sin(x)')
plt.show()

# 3. 绘制y = -x - ln(x),要求x范围[0,2]
# 定义 x 变量的范围 (0,2) 数量 500
x = np.linspace(0, 2, 500)
y = -x - np.exp(x)

# Figure 并指定大小
plt.figure(num=3, figsize=(8, 5))
# 绘制 y=-x-exp(x) 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x, y, color='red', linewidth=1.0, linestyle='--')
plt.title('y = -x - np.exp(x)')
plt.show()

# 2. y=1+x+sin(x) 其中x范围为[-Π/2,Π/2]
# 绘制y=-1-x-np.sin(x)  与另一条线y=0相交以查看是否有解
x1 = np.linspace(-np.pi / 2, np.pi / 2, 100)
y1 = -1 - x - np.sin(x)
plt.plot(x1, y1, color='red', linewidth=1.0, linestyle='dashdot')
x2 = x1
y2 = np.zeros(len(x2))
plt.plot(x2, y2, color='green', linewidth=1.0, linestyle='solid')
plt.title('y = -1-x-np.sin(x) & y=0')
plt.show()

# 从上图可以看到俩条线有交点,交点就是其解
# 下边用算法计算俩条线的交点值
x1 = x1.tolist()
x2 = x2.tolist()
y1 = y1.tolist()
y2 = y2.tolist()
x_begin = max(x1[0], x2[0])
x_end = min(x1[-1], x2[-1])

points1 = [t for t in zip(x1, y1) if x_begin <= t[0] <= x_end]
points2 = [t for t in zip(x2, y2) if x_begin <= t[0] <= x_end]

idx = 0
nrof_points = len(points1)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x1, y1, color='red', linewidth=1.0, linestyle='dashdot')
ax.plot(x2, y2, color='green', linewidth=1.0, linestyle='solid')
while idx < nrof_points - 1:
    # 迭代逼近俩条线的交点
    y_min = min(points1[idx][1], points1[idx + 1][1])
    y_max = max(points1[idx + 1][1], points2[idx + 1][1])

    x3 = np.linspace(points1[idx][0], points1[idx + 1][0], 1000)
    y1_new = np.linspace(points1[idx][1], points1[idx + 1][1], 1000)
    y2_new = np.linspace(points2[idx][1], points2[idx + 1][1], 1000)

    # 近似距离小于0.001认为相交
    tmp_idx = np.argwhere(np.isclose(y1_new, y2_new, atol=0.001)).reshape(-1)
    if len(tmp_idx) > 0:
        for i in tmp_idx:
            print("sin(x)+x+1=0 val: ", x3[i])
            ax.plot(x3[i], y2_new[i], 'ro')  # 绘制逼近求解值的点

    idx += 1

plt.title('y = -1-x-np.sin(x) & y=0')
plt.show()

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python,matplotlib绘制复杂曲线,并求其交点,y=-sin(x)-x-1并求解函数的值 的相关文章

随机推荐

  • jdbc手动控制事务

    在JavaBean数据库操作中 一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元 只有当事务中的所有操作都正常完成了 整个事务才能被提交到数据库 如果有一项操作没有完成 就必须撤消整个事务 我们通过提交comm
  • 【MySQL】不就是多表查询综合练习

    前言 嗨咯大家好 我们学习完毕了多表查询 今天我们就要对我们所学的成果进行测验 本期主要是对多表查询相关内容的练习课程 可以先试着自己敲 遇到不会可以查看查考代码 目录 前言 目录 练习题 1 查询员工的姓名 年龄 职位 部门信息 隐式内连
  • 自学笔记-Python基础09--第三方库的概念及操作

    库 具有相关功能模块的集合 python的一大特色就是拥有强大的库 库可以分为三种 1 标准库 python自带的 无需安装直接使用 2 第三方库 由他人提供的 使用时需要先安装 3 自定义库 自己写的模块 自己用 标准库 想看python
  • react hooks 和 react-redux hooks 应用场景

    目前 Hooks 应该是 React 中最火的概念了 在阅读这篇文章之前 希望你已经了解了基本的 Hooks 是什么 下面就介绍一下简单的使用场景 react hooks useState useState是react自带的一个hook函数
  • 关于Spring的bean的相关注解以及其简单使用方法

    一 前置工作 第一步 创建一个maven项目 第二步 在resource中创建一个名字叫做spring config xml的文件 并把以下代码复制粘贴
  • 06——qt opengl 立方体 ebo 贴图

    qmyopenglwidget h ifndef QMYOPENGLWIDGET H define QMYOPENGLWIDGET H include
  • java中的泛型

    泛型 分为三种分别是泛型类 泛型方法 泛型接口 一 泛型类 直接在类名后面加上
  • 用C++流的方式读写文件

    一 代码 include
  • 【XSS漏洞-03】XSS漏洞语句构造和绕过方法实例

    目录 1 XSS语句构造方式 1 1 第一种 利用 lt gt 构造HTML JS语句 1 2 第二种 利用javascript 伪协议 1 3 第三种 事件驱动 1 4 第四种 利用CSS 层叠样式脚本 1 5 其他标签及手法 2 XSS
  • NFC模块方案,轻松实现NFC通讯

    一 主要特点 用户只需通过Uart串口控制就能实现NFC设备间数据传输 不需要了解NFC底层协议 迅速完成产品开发 二 支持平台 WinXP Win7 Win8 Win10 Linux Android 等等 三 NFC通讯控制模式 1 手机
  • decimal返回给前端是数字类型而不是字符串

    bigDecimal长度太长 返回给前端 精度会丢失 即后几位都会变成0 解决办法 给前端返回字符串类型 加注解 JsonSerialize using ToStringSerializer class 如果有些字段不要返回给前端呢 比如删
  • 循环神经网络学习笔记(基础篇)

    循环神经网络 RNN 基础篇学习笔记 一 权重共享 在CNN全连接层权重占比较多 在图像任务中 由于整个图像共享卷积核 所以实际参数量远远小于全连接层 在实际任务中 由于全连接层参数过多 我们需要使用RNN解决带有序列模式的数据 同时利用权
  • 各种排序方法的比较

    各种排序方法的比较 排序方法有很多 它们各有优缺点 没有绝对最好的和最坏的排序方法 只有最符合某个使用场景的方法 在选用排序方法的时候 我们应该综合考虑以下方面 1 时间复杂度 2 空间复杂度 3 稳定性 4 算法简单性 5 待排序记录个数
  • vscode 缩略图

    vscode 缩略图 缩略图的打开与关闭 快捷键 Ctrl Shift P 输入 minimap回车 每次为开启关闭交替 大段代码缩略图可以快速移动 分屏时关闭缩略图更好看
  • mysql复制数据表

    CREATE TABLE newtable LIKE oldtable INSERT newtable SELECT FROM oldtable
  • 解决问题记录4:kettle数据库连接报错时区问题

    问题 Connection failed Verify all connection parameters and confirm that the appropriate driver is installed The server ti
  • FastCGI介绍

    CGI Common Gateway Interface 公共网关接口 是HTTP服务器与其他程序通信的工具 FastCGI是一个long live型的CGI 支持分布式计算 它将CGI解释器进程保持在内存中并因此获得较高的性能 FastC
  • 多模态深度学习

    我们对世界的体验是多模态的 我们看到物体 听到声音 感受质地 闻到气味 然后做出决定 多模态学习表明 当我们的许多感官 视觉 听觉 动觉 参与信息处理时 我们理解和记忆更多 通过组合这些模态 学习者可以组合来自不同来源的信息 多模态深度学习
  • Yoga 14s电脑亮度不能调节?教你一招一下搞定。

    说一下背景 本人电脑联想yoga 14s 不知道最近那一天突然发现电脑亮度没法调节 写小论文时眼睛都要被刺瞎了 试了重装驱动 无果 升级系统 无果 最后河海大学的好朋友问了客服 客服一针见血问出 是否装过向日葵等远程软件 果然 我装了向日葵
  • 使用Python,matplotlib绘制复杂曲线,并求其交点,y=-sin(x)-x-1并求解函数的值

    写这篇博客源于博友的提问 将介绍如何使用Python matplotlib绘制复杂曲线 并求其交点 y sin x x 1并求解函数的值 1 效果图 y sin x 效果图如下 y x ln x 效果图如下 y sin x x 1 y 0