Language agnostic 如何使数学方程式可读和可维护?

Language agnostic 如何使数学方程式可读和可维护?,language-agnostic,formula,Language Agnostic,Formula,鉴于数学不是我的强项,我正在为3D动画实现贝塞尔曲线 公式如图所示,正如你所看到的,它相当令人讨厌。在我的编程中,我使用描述性名称,并且喜欢将复杂的行分解为更小的可管理行 处理这种情况的最佳方法是什么 是否忽略编程最佳实践而坚持使用变量名,如x、y和t?我鼓励您使用mathematic的最佳实践并用字母表示变量。只需对公式上方的变量进行解释即可。如果你能把公式分割成更小的子公式,那就更好了。你可以把公式输入到。。。它会尽量为你简化 它还将以友好的方式输出。。。有趣的是;) 善良 Dan在我看来,

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

公式如图所示,正如你所看到的,它相当令人讨厌。在我的编程中,我使用描述性名称,并且喜欢将复杂的行分解为更小的可管理行

处理这种情况的最佳方法是什么


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

我鼓励您使用mathematic的最佳实践并用字母表示变量。只需对公式上方的变量进行解释即可。如果你能把公式分割成更小的子公式,那就更好了。

你可以把公式输入到。。。它会尽量为你简化

它还将以友好的方式输出。。。有趣的是;)

善良


Dan

在我看来,当你有一个预定义的数学方程时,完全可以使用与方程对应的短变量名:x、y、t、p_0等。但是,请确保清楚地引用公式。

如果公式被附加到它自己的函数中,我当然会使用规范的数学表示法,并且可能会在注释中添加wiki页面url

如果在代码中嵌入了特定的函数用法,那么在代码中保留域名可能会更好


这取决于

鉴于只有你的数学家才能真正理解这个公式,我的建议是采用数学家最熟悉的风格(比如字母作为变量等等)


我也肯定会在那里的某个地方发表评论,清楚地说明公式是什么,以及它的作用,例如“此方法返回沿二次贝塞尔曲线的一系列点”。这样,当你的程序员重温代码时,你可以放心地忽略数学的复杂性,假设你的内在数学家已经检查过了,以确保一切正常。

不用麻烦了。只需参考文档(本例中为wikipedia页面,或者更好的是您自己的文档),并确保变量名称与您的文档匹配。代码注释并不适合(也不需要)描述数学公式


有时一个引用比40行注释甚至是提示性的变量名要好。

我倾向于将一个等式分解为它的根部分

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

您可以考虑使用特定于域的语言来处理这个问题。Mathematica可以让你写出数学概念中的方程式


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

使C#(或其他首选语言)中的公式尽可能与数学公式相似,并包含对公式的引用,包括对变量的描述。编码的理念是可读性,如果你在处理数学公式,最可读的表示法就是看起来最像数学的表示法。

你能举一个例子说明贝塞尔示例中的“编程最佳实践”是什么吗?比如描述性变量名。例如,保持代码行短,用C#say编写的完整forumula将比纸上的长。