你如何使数学方程可读和可维护?

时间:2009-12-11 12:35:36

标签: language-agnostic formula

鉴于数学不是我最强的观点,我正在为3D动画实现贝塞尔曲线。

公式显示为here,你可以看到它非常讨厌。在我的编程中,我使用描述性名称,并喜欢将复杂的行分解为较小的可管理的名称。

处理这样的场景的最佳方法是什么?

是否忽略编程最佳实践并坚持使用变量名称,如x,y和t?

9 个答案:

答案 0 :(得分:4)

在我看来,当你有一个预定义的数学方程时,使用短变量名称是完全可以接受的:x,y,t,P_0等对应于等式。请务必清楚地参考该公式。

答案 1 :(得分:2)

如果公式被提升为自己的函数,我当然会使用规范数学表示,并可能在评论中添加wiki页面网址

如果它嵌入代码中并具有该函数的特定用法,那么保留代码中的域名可能会更好

取决于

答案 2 :(得分:2)

看到只有你的数学家实际上会理解这个公式,我的建议是采用数学家最熟悉的风格(所以字母作为变量等......)

我也肯定会在某处明确说明公式是什么,以及它做了什么,例如“此方法沿着二次贝塞尔曲线返回一系列点”。这样,只要程序员重新访问代码,您就可以安全地忽略数学复杂性,并假设您的内部数学家已经检查过以确保其一切正常。

答案 3 :(得分:1)

我鼓励您使用数学的最​​佳实践并用字母表示变量。只需为公式上方的变量提供解释。如果你可以将公式拆分为更小的子公式,那就更好了。

答案 4 :(得分:1)

不要打扰。只需参考文档(本例中的维基百科页面,甚至更好的文档),并确保变量名称与您的文档相匹配。代码注释不太适合(也不需要它们)描述数学公式。

有时,引用优于40行注释甚至是暗示性变量名称。

答案 5 :(得分:1)

使C#(或其他偏好语言)中的公式尽可能地与数学公式相似,并包括对公式的引用,包括变量的描述。编码的想法是可读的,如果你正在处理数学公式,那么最可读的表示形式就像数学一样。

答案 6 :(得分:0)

您可以将公式键入wolfram alpha ...它会尝试为您简化。

它还将以mathematica友好的方式输出......有趣的是足够的;)

善,

答案 7 :(得分:0)

我倾向于将一个方程式分解为其根部。

def sum(array)
  array.inject(0) { |result, item| result + item }
end

def average(array)
  sum(array) / array.length
end

def sum_squared_error(array)
  avg = average(array)
  array.inject(0) { |result, item| result + (item - avg) ** 2 }
end

def variance(array)
  sum_squared_error(array) / (array.length - 1)
end

def standard_deviation(array)
  Math.sqrt(variance(array))
end

答案 8 :(得分:0)

您可以考虑使用特定于域的语言来处理此问题。 Mathematica允许你写出方程式,就像它出现在数学概念中一样。

您的最终形式与原始等式越相似,从长远来看它就越容易维护(否则每次看到它时都必须解释代码)。