关于将数学方程式写入代码的建议

时间:2011-07-31 21:00:06

标签: php algorithm math

我是一名自学成才的开发人员(大约3年),我希望通过学习如何将数学方程编写成代码来提高我的开发技能。

这是继续困扰我的事情,我看到许多书籍和文章伴随着发光的数学方程式,真正看起来非常有趣。我可以读取它们的一部分(乘法,除法,小数,西格玛,变量),但是当我在代码中实现它们时我会遇到麻烦。

例如,如何开始理解这些方程:http://en.wikipedia.org/wiki/Manhattan_distance并开始在代码中编写它们?

任何有关入门地点的建议?是不是代码问题,但缺乏基本的数学理解?我愿意倾听和阅读,因为我觉得这种能力对于开发人员来说非常重要。

4 个答案:

答案 0 :(得分:11)

I can read parts of them (multiplication, division, decimals, sigma, variables)
but I have troubles when going off to implement them in code.

嗯,我猜的关键是你需要能够将你感兴趣的公式分解成它的组件,如果你能理解如何单独编写这些组件,你就可以了将它们以代码的形式粘在一起。

让我们以二维空间中具有固定(x, y)坐标系的两点之间的曼哈顿距离为例。您想要编写一个将需要两个点的函数,并为您提供这些点之间的曼哈顿距离。让我们放弃在这里使用面向对象的概念,并假设你有四个输入变量:

x1, the x-coordinate of the first point
y1, the y-coordinate of the first point
x2, the x-coordinate of the second point
y2, the y-coordinate of the second point

所以我们的功能就像

function mdistance (x1, y1, x2, y2) {
    ???
}

功能(功能体)的内部应该是什么样的?现在我们检查我们想要重写为代码的数学公式。维基百科的版本(在“形式描述”下)处理任意维度的情况 - 我们也可以这样做,但是现在我们只考虑二维情况。因此,就我们而言,他们的n为2,我们想要计算|x1 - x2| + |y1 - y2|。这是失去sigma表示法的结果,有利于描述带有两个加数的和的表达式。但我们仍然没有弄清楚如何在计算机代码中表达|a - b|

所以现在该功能看起来像

function mdistance (x1, y1, x2, y2) {
    return bars(x1, x2) + bars(y1, y2);
}

而且,就目前而言,这很好,因为我们已经将我们还不知道该如何做的事情作为另一个函数隔离,称为bars()。一旦我们定义bars(),函数mdistance()就可以正常工作,当然假设我们对bars()的定义是明智的。所以问题只是定义bars()。通过将问题分解为其组成部分,我们使我们的工作变得更容易,因为我们只需要使每个部分都工作 - 这比使一切工作一次更简单。

那么应该如何定义bars()?好吧,|a - b|只是表达了“a - b”的绝对值。 PHP有一个内置函数,用于实数的绝对值;它是abs()。所以我们像这样定义bars()

function bars (a, b) {
    return abs(a - b);
}

现在我们的函数mdistance()将按照我们想要的方式工作。

答案 1 :(得分:0)

使用sin(),cos(),sqrt()

对于您需要array()的向量,对于总和,您需要一个循环(for / foreach)。矢量长度=数组长度,使用count

答案 2 :(得分:0)

好吧,你可以使用数学API在你的代码中写下数学经验。例如,在java中有为此目的的Math。或者您可以编写自己的方法(函数)来执行这些操作...让我们看看发布链接中的信息。第一个结果:pi和qi的差值绝对值的Suma(p与指数i)。 pi和qi你可以将它们存储在一个数组中。那么对于绝对值,您可以编写自己的函数来执行此操作,例如(我使用C / C ++样式语法):

int absoluteValue(int number){
     if (number < 0) return number = number * (-1);
     else return number;
}

对于suma来说:它只是一个简单的for()循环。如果你有更困难的数学运算,当然实现它们就更困难了。  您只需要逐步向PC写入如何执行操作的说明。当你在计算某些东西时,你究竟是怎么做的。

希望这很有帮助:)

答案 3 :(得分:0)

如果目标是评估表达式(涉及数学函数,操作等),则该过程通常相当简单(但在代码和计算机步骤中却很复杂)。当通过评估右侧来计算方程式的左侧时,我们可以称之为明确的数学。

但数学文章中的方程式可以具有完全隐含的含义和效用。例如,微分方程通常不会给程序员一个明显的方法来找到它的解决方案。这些任务要求程序员用一些数值分析知识来补充文献中的方程式。