gpt4 book ai didi

python - 以特定的 y 间隔绘制函数

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:01 25 4
gpt4 key购买 nike

我需要在同一个图上绘制几条指数曲线 - 约束条件是图在 y=1 处结束。

供引用,这里是代码:

from numpy import arange
from matplotlib import pyplot as plt

T = arange(60,89)
curve1 = 2**(T - 74)
curve2 = 2**(T - 60)
plt.plot(T,curve1 )
plt.plot(T,curve2 )
plt.show()

结果如下: curves 1 and 2第二条曲线几乎不可见,因为值相对较低。

我遇到的问题是所有这些曲线都相当快地膨胀到 700000+,但我只对范围 (0,1) 感兴趣。我如何只绘制这些位,但要绘制出平滑的曲线(这样一条曲线就不会在中途停止)?

最佳答案

如您所见,如果您为添加的每个函数调整范围 (T),这很容易做到。但是,如果您需要更改功能,则需要重新检查。

一般来说,您要处理的问题是在给定 y 范围的情况下计算某些函数的 x 范围 - 或者,如数学家所说,确定 domain对应于其图像范围的函数。虽然对于任意函数来说,这是不可能的,但如果您的函数是 injective 则有可能,就是这样。

假设我们有一个函数 y=f(x),yrange 是 [y1,y2]。 x 范围将为 [f^(-1)(y1), f^(-1)(y2](f^-1inverse function f)

由于我们有多个需要绘制的函数,x_range 就是最大的范围 - 所有范围中的 - 最终范围的下部是所有范围下部的最小值,上部是上部的最大值。

下面是一些代码,通过将步数作为参数,并在 x 范围内计算适当的 T 来举例说明所有这一切:

from numpy import arange
from matplotlib import pyplot as plt
from sympy import sympify, solve

f1= '2**(T - 74)' #note these are strings
f2= '2**(T - 60)'

y_bounds= (0.001, 1) #exponential functions never take 0 value, so we use 0.001
mm= (min, max)
x_bounds= [m(solve(sympify(f+"-"+str(y)))[0] for f in (f1,f2)) for y,m in zip(y_bounds, mm)]
print x_bounds

N_STEPS=100 #distributed over x_bounds
T = arange(x_bounds[0], x_bounds[1]+0.001, (x_bounds[1]-x_bounds[0])/N_STEPS)

curve1 = eval(f1) #this evaluates the function over the range, by evaluating the string as a python expression
curve2 = eval(f2)
plt.plot(T,curve1)
plt.plot(T,curve2)
plt.ylim([0,1])
plt.show()

代码输出 x 范围 (50.03, 74) 和此图: final plot of two curves

关于python - 以特定的 y 间隔绘制函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com