python 求两条曲线的交点_使用python matplotlib绘制复杂曲线的交点

今天教大家搞事情。效果如下:我们的目的是求得matplotlib中多个线条的交点位置以及坐标最直白的想法是求得两条线的交点值,但是这个线是多个点的连线,所以每条线的function是非常难得到的,就算得到了也非常难联立求解。于是我们选择通过渐进的方式逐渐逼近交点。具体代码如下:简单版本先来个简单的函数:import numpy as npimport matplotlib.pyplot ...
摘要由CSDN通过智能技术生成

今天教大家搞事情。

效果如下:

833b486e354c43733c4453d67cdb800d.png

我们的目的是求得matplotlib中多个线条的交点位置以及坐标

最直白的想法是求得两条线的交点值,但是这个线是多个点的连线,所以每条线的function是非常难得到的,就算得到了也非常难联立求解。

于是我们选择通过渐进的方式逐渐逼近交点。

具体代码如下:

简单版本

先来个简单的函数:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

x1 = [1,2,3,4,5,6,7,8]
y1 = [20,100,50,120,55,240,50,25]
x2 = [3,4,5,6,7,8,9]
y2 = [25,35,14,67,88,44,120]

ax.plot(x1, y1, color='lightblue',linewidth=3)
ax.plot(x2, y2, color='darkgreen', marker='^')


#
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要找到两条曲线交点,你需要先定义这两条曲线的方程。假设这两条曲线分别为 $y_1=f_1(x)$ 和 $y_2=f_2(x)$,那么它们的交点满足以下条件: $$ f_1(x)=f_2(x) $$ 因此,你可以通过下面的步骤来找到这两个曲线交点: 1. 首先,定义函数 $f_1(x)$ 和 $f_2(x)$,并且在你的代码中导入必要的库,如 `numpy` 和 `matplotlib`。 2. 然后,使用 `numpy` 库中的 `linspace` 函数创建一个 $x$ 的范围,例如 `x = np.linspace(-5, 5, 100)`。 3. 使用定义的函数 $f_1(x)$ 和 $f_2(x)$ 计算出 $y_1$ 和 $y_2$,并且在同一个图形中使用 `matplotlib` 库中的 `plot` 函数绘制出这两条曲线。 4. 找到这两条曲线交点,可以通过使用 `numpy` 库中的 `intersect1d` 函数,如下所示: ```python intersection = np.intersect1d(y1, y2) ``` 这将返回两条曲线交点的 $y$ 坐标。然后,你可以使用 `numpy` 库中的 `where` 函数找到对应的 $x$ 坐标: ```python x_intersection = x[np.where(y1 == intersection)] ``` 这将返回两条曲线交点的 $x$ 坐标。 5. 最后,你可以使用 `matplotlib` 库中的 `scatter` 函数在图形中标记出这两个交点。 下面是一个完整的示例代码: ```python import numpy as np import matplotlib.pyplot as plt def f1(x): return x**2 - 3 def f2(x): return np.sin(x) x = np.linspace(-5, 5, 1000) y1 = f1(x) y2 = f2(x) intersection = np.intersect1d(y1, y2) x_intersection = x[np.where(y1 == intersection)] plt.plot(x, y1, label='y1') plt.plot(x, y2, label='y2') plt.scatter(x_intersection, intersection, color='r') plt.legend() plt.show() ``` 这个示例代码将绘制出两个函数 $y_1=x^2-3$ 和 $y_2=\sin(x)$ 的图形,并且标记出它们的交点。你可以根据实际情况修改这个示例代码,以适应你需要解决的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值