【发布时间】:2020-09-15 16:43:27
【问题描述】:
美好的一天!
我正在使用 python v3.8,我想用(也给定的)边界计算给定公式的值范围(最小值和最大值),例如:
formula1: a * sqrt(b/c)
formula2: a^2 * b/1000 + 3 * (a+b)
formula3: (1/(2 * PI * (a * 1000) * (b * 1000)) * 10^12
..with a=[0,5], b=[10,20], c=[30,40]
我对 scipy、numpy、sympy 不太熟悉。我想知道是否有一种“简单”的方法来计算具有不同值的公式,将其写入数组并从中获取最小值/最大值?我在“写入数组并获得最小值/最大值”时遇到的问题是,给定的浮点数存在一些界限 [-100000, 100000],这会产生太多的值。
我不需要达到最小值/最大值的信息,而只需要可以达到的最小值/最大值。
【问题讨论】:
-
有方法吗?是的。
-
创建一个包含 3 列的矩阵,其中包含您要评估的 a、b 和 c 的值,然后使用其中一个公式创建第四列。计算最大值和最小值应该很简单。
-
@Adirio 是的,现在我正在使用这种“求解器”。 Numpy 为浮点数提供了一个函数/for-loop,这非常有帮助。不幸的是,这一切都取决于变量迭代的“步骤”。在一种情况下,我给出了一个从 0.1 到 2 的范围,我选择了 0.1 的步长范围,我得到了 ~3600 的结果。步长为 0.01 时,结果约为 3900 .. 对于第一次粗略估计,我猜它是“好的”。谢谢
-
是的,这一步会影响您的结果,因为您基本上是在离散世界中使用连续公式。想象一下最大值是
a = 1.324567。如果您获得0.1的步长,您的本地最大值可能是a = 1.3,但这不是真正的最大值。如果您将步长减小到0.01,则您的 loxal 最大值将位于a = 1.32,其值将不同于a = 1.3。如果你想准确,你将不得不计算偏导数。
标签: python