【发布时间】:2021-05-31 01:30:51
【问题描述】:
我在边长为 1 的正方形上定义了两个变量 u 和 v 的函数 f(u,v)。
计时器启动,对于计时器的每个刻度,我需要在该正方形的一组离散点 (u,v) 上评估此函数数千次。这个点 (u,v) 在计时器的每个滴答声中都可能不同,并且没有理由假设它们总是相同的。
出于性能原因,我想对正方形的一些点进行采样 [f(0,0), f(0,0.1), f(0,0.2), ..., f(0.1,0),...f (1,1)] 并在计时器开始之前只评估一次函数,然后尽快获取它们。
字典可以解决问题吗?还是有更好的结构?
我忘了补充一点,显然我不需要边 1 平方的所有可能的 u、v 值,而是那些属于离散网格的值。
【问题讨论】:
-
如果函数返回该时间步的该点的值,那么听起来您需要在每个时间步为每个点调用该函数。当然,您可以预先计算每个值(如果它是确定性和恒定的),但听起来这只是解决您遇到的任何问题。
-
我忘了补充一点,显然我不需要边 1 平方的所有可能的 u、v 值,但那些属于离散网格的值。
-
我们是否应该假设函数评估复杂且耗时? u 和 v 的取值范围是多少?将值编码为整数的 2D 矩阵可能非常有效。您不必担心 1000x1000 矩阵,对于现代计算机,这应该不是问题。如果它变得非常大,它可能无济于事。
-
是的,你可以假设这个函数很耗时。它用于求解一个 4 次方程,因此它包含大量对 Math.Sqrt 的调用。
-
你也可以假设u和v的取值范围都是[0,1]
标签: c# performance math graphics sampling