gpt4 book ai didi

python - 使用 matplotlib 和 numpy 绘制方程

转载 作者:行者123 更新时间:2023-11-30 22:42:47 25 4
gpt4 key购买 nike

我想绘制一个方程,其中 x 轴代表时间 ty 轴代表变量 n.现在,n 的公式为 n =((np.log(t)*10**6)/np.log(2)) + 1 以及最大时间我的图表上是自大爆炸理论以来的时间(以秒为单位),即 4.35 x 10**17 秒

我尝试过这个:

import matplotlib.pyplot as plt
import numpy as np

def graph(formula, x_range):
y = np.array(x_range)
x = eval(formula)
plt.plot(x,y)
plt.show()

graph(((np.log(x)*10**6)/np.log(2)) + 1, range(0, 4.35*10**17 ))

这似乎不起作用。关于如何实现这一目标有什么想法吗?

最佳答案

这里有几个问题:

  • 范围应该在整数上定义
  • 该范围将生成的项目数量太大,您必须采取巨大的步骤
  • 公式取 x作为变量,但您似乎定义了 np.array(x_range) y ;更重要的是
  • 您使用eval(..) ,但是eval(..) 通常是一个字符串或另一个可以解析的对象;
  • 你不给graph(..)将公式作为第一个元素:在 Python 调用 graph(..) 之前它首先评估操作数

在我看来,实现这一目标的最佳方法是使用 lambda 表达式:

import matplotlib.pyplot as plt
import numpy as np

def graph(formula, x_range):
<b>x = </b>np.array(x_range)
#^ use x as range variable
<b>y = </b>formula(<b>x</b>)
#^ ^call the lambda expression with x
#| use y as function result
plt.plot(x,y)
plt.show()

graph(<b>lambda x : </b>((np.log(x)*10**6)/np.log(2)) + 1, range(0, <b>435*10**15,10**12</b>))
# ^use a lambda expression ^range over integers
# take huge steps

这会生成以下图像:

enter image description here

编辑:

根据您的评论,您希望 y 轴上的时间和 x 轴上的函数,这可以简单地通过分配来实现强>到其他变量,例如:

import matplotlib.pyplot as plt
import numpy as np

def graph(formula, x_range):
<b>y = </b>np.array(x_range)
<b>x = </b>formula(<b>y</b>)
plt.plot(x,y)
plt.show()

graph(lambda x : ((np.log(x)*10**6)/np.log(2)) + 1, range(0,435*10**15,10**12))

请注意,您不需要更改 lambda 表达式中的变量名称:实际上,当您调用 lambda 表达式时,local x只是 y调用者的。

关于python - 使用 matplotlib 和 numpy 绘制方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990230/

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