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

news/2024/9/22 7:35:35

写这篇博客源于博友的提问,将介绍如何使用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 += 1plt.title('y = -1-x-np.sin(x) & y=0')
plt.show()

参考

  • https://blog.csdn.net/weixin_39907596/article/details/111634547
  • https://stackoverflow.com/questions/37576527/finding-the-point-of-intersection-of-two-line-graphs-drawn-in-matplotlib

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

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

相关文章

Java 根据Cron表达式获取近几次任务执行时间

这篇博客将介绍Java 如何根据Cron表达式获取近几次任务执行时间。实际上使用 quartz 包 CronSequenceGenerator 以及TriggerUtils.computeFireTimes 俩种方法进行时间获取&#xff1b; 1. 效果图 2. 源码 <dependency><groupId>org.quartz-scheduler</groupId…

使用Python,OpenCV对图像进行亚像素点检测,并拟合椭圆进行绘制

这篇博客将介绍如何使用Python&#xff0c;OpenCV对图像进行亚像素检测&#xff0c;并对亚像素点进行椭圆拟合绘制。 1. 效果图 原始图上绘制拟合椭圆 VS 原始图上绘制拟合椭圆及亚像素点绘制随机半径及颜色的圆 VS 灰度图上绘制亚像素点效果图如下&#xff1a; 我喜欢的颖宝…

Android控件之ImageView探究

ImageView控件是一个图片控件&#xff0c;负责显示图片。 以下模拟手机图片查看器 目录结构 main.xml布局文件 <?xml version"1.0"encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"androi…

使用make_blob,KNeighborsClassifier-K近邻算法进行分类

写这篇博客源于博友的提问&#xff1a; 1. 效果图 输入 100 5 3 7 得到结果 [2] 可视化效果图如下&#xff1a;待预测点红色x展示&#xff0c; 输入 88 2 1 9 得到结果&#xff1a; [1] 可视化效果图如下&#xff1a;待预测点红色x展示&#xff0c; 2. 源码 # KNeighbo…

一生受益的三个小故事

转载于:https://www.cnblogs.com/88223100/archive/2011/02/22/three_stories.html

使用matplotlib绘制定制化饼图(图例比例标签支持中文等)

写这篇博客源于博友的提问 1. 效果图 效果图如下&#xff1a; 2. 原理 autopct‘%0.1f%%’ 自动添加百分比显示&#xff0c;格式化保留1位小数labeldistance 设置各扇形标签&#xff08;图例&#xff09;与圆心的距离&#xff08;labeldistance&#xff09;为1.1shadowTrue…

Python字母数字下划线生成田字格随机密码

写这篇博客源于博友的提问1&#xff0c;提问2 1. 效果图 10行随机密码&#xff0c;首字母不同&#xff0c;效果图如下&#xff1a; 田字格随机字符串如下&#xff1a; 2. 源码 # 生成随机密码 import randomimport numpy as np# 1. 生成随机密码,密码首字母不同 np.rando…

NHibernate从入门到精通系列(7)——多对一关联映射

内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一、多对一关联映射概括 关联关系是实体类与实体类之间的结构关系&#xff0c;分别为“多对一”、“一对一”、“多对多”。然而“多对一”是怎样描述的呢&#xff1f;让我们参考图1.1所示&#xf…