如何在编程中思考数学?

3
我不确定这是否与SO有关。我正在阅读一些旧的数学教科书,并试图理解数学的本质,而不是如何计算某些东西。我可以做到这一点,但更想知道的是数学在做什么。
我确信这显而易见,但直到我更多地思考游戏编程时才想到它。将数学视为用于精确解释事物为什么起作用的“语言”是否正确?
我很难表达,再次说明,对大多数人来说这很明显,但经过多年的数学学习后,当有人要求“找到一条直线的方程”时,人们会识别出空间中直线(y=mx+b)的某些特征并找到它们之间的关系。他们需要除了一个庞大的段落(像这个)之外的精确表示方法。我们称之为数学,在其基础上,它只是一种符号化表示事物的方式。
实际上,我在想:“我知道他们为什么说‘找到一条直线的方程’。”
因此,现在我正在思考的不仅仅是搜索告诉我如何将曲线与行走的人转换或跟踪路径的公式,而是为什么和如何用数学和程序表示它。
只是希望得到关于编程中数学的评论。

2
我尽量避免数学...这样有帮助吗? ;) - CodeRedick
1
首先,应该是社区维基。其次,应该澄清问题或主题的确切内容。 - Rook
11个回答

4
以我的理解,我会创建一个关于世界某些方面的“模型”。例如:
  • 利润=收入-支出
  • 我扔球的路径将是一个带有方程的抛物线...
然后,我将这个模型表示为计算机程序。因此,某种抽象概念支撑着程序,有时数学非常“显而易见”,我们几乎没有注意到它,有时(例如模拟游戏)它非常明显,并且相当棘手。
关键思想:数学可以用来模拟现实,大多数商业系统可以被视为现实的模型。
话虽如此,在30年的编程中,我所做的真正的(代数,微积分)数学量是微不足道的。

我同意 - 在过去的15年中,我使用的大多数数学都相当基础,除了一些尝试三角学之外。但是,我也没有编写流体动力学模拟... - GalacticCowboy
当然这取决于编程的类型。作为一个Web程序员,我认为除了基础数学外不需要其他任何东西。然而,在进行CFD工作时,需要高级数学以及数值分析。 - ccook

4
史蒂夫·叶格(Steve Yegge)写了一篇非常好的文章,您可能会发现有帮助:每天都用到的数学

这是一篇非常好的文章。谢谢。 - johnny

1

我建议您研究与计算理论相关的材料。例如:

这些不是给新手看的论文,但它们将为您提供有关数学和计算机科学之间美妙关系的见解。

在阅读上述论文之前,您可能需要先从计算理论的教科书入手,例如:

  • 《计算理论导论》- 迈克尔·西普瑟

1

对于程序员来说,数学就像是木匠的锤子。木匠并不会把锤子用在所有事情上,但如果他没有锤子,很多事情就做不了。


1

不确定您的确切问题是什么... 以下是一些想法:

  • 编程就是数学(函数式编程, λ演算, 编程 == 数学
  • 数学是一种语言 - 对思维中表达式的抽象描述/表示
  • 数学帮助您形式化表达式:而不是对于所有整数x,从1到10,x的平方小于250,您可以写成∀x ∈ {1..10} (x² < 250)
  • 编程(一种编程语言)也是这样做的,有助于形式化算法。

  • 在计算机程序中常用的数学类型是数值数学,但是通过一些努力,您也可以执行符号计算


1

我认为数学实际上是符号背后的概念,而不仅仅是符号本身,但当大多数人谈论数学时,他们没有区分。他们只是想到符号。部分原因是因为数学在学校里的教学方式,重点是机械式地操作符号以获得正确的结果,而不是理解概念。

这类似于非程序员看待编程的方式。他们看着计算机程序就像看天书一样,而使用该语言的程序员(经过或多或少的努力)则能够理解代码所代表的行为。

有些人比其他人更擅长保留这些符号的含义。我认为如果他们能够克服这个障碍,就会有人比他们想象中更欣赏数学。


我刚想到的一个比喻:数学符号在某个点之后,对于大多数人(包括我自己)来说,就像Brainfuck对于大多数程序员甚至是好的程序员一样,他们完全能够理解和创建程序逻辑,如果用他们理解或愿意解码的语言编写。例如,当我做欧拉计划问题时,我真的必须努力寻找我不知道的数学概念的解释,这些解释用英语而不仅仅是数学符号来解释。这让我想知道是否有Python类似于数学符号的东西... - Anon

0

我同意Taylor的观点。计算机内部的数学是一个非常深奥的主题,涉及到 数值方法。最大的问题是精度和32位只能达到的限度。有一些非常酷(也很复杂)的函数描述了如何用计算机找到积分等,但由于我们无法得到精确答案,并且因为计算机的操作受限(加、乘等等),所以有很多方法来估算数学问题以达到高精度。

如果你对这个话题感兴趣,那么太好了。那是我挣扎过的一门课程。


我知道在一些语言中(比如Haskell),数字是任意精度的;它们会根据需要扩大。大多数语言都有一些附加组件,如果没有内置此功能,则可以使用它们。 - Lucas Jones

0

我正在研究类似的东西(金融模型)- 相似之处在于我们提出数学模型,然后在代码中实现这些模型。

从编程角度来看,你面临的主要问题是将以数学术语表达的模型(假设连续性、无限小的时间/空间步长等)转化为“离散”模型,这些模型假定有限的时间/空间步长(例如,球每1毫米或每1毫秒移动一次)。

这些模型的转换并不一定是微不足道的,你应该查阅适当的参考资料(Numerical Recipes 是一个经典的例子)。在代码中的实现通常与你用数学术语表达问题的方式非常不同。


0
我觉得编程中的数学就像时间、宁静和美食一样,让我拥有了很多纸和一支笔,还有可以向朋友求助的机会,以及堆在我Macbook上的一摞从Rudin到Bourbaki的书籍。

0

我认为“为什么”是一个哲学问题。

至于我如何看待数学/编程以及它们之间的相互作用... 我将它们视为建模的层次。在最低、最真实的层次上,存在着某种基本的真理,无论它是什么。然后就是这个真理的数学建模,从而发展出了数学的“语言”(幸运的是只有一种语言?)。接下来是另一层,即建模和近似。对于y=mx+b的情况,它只是一个模型中的一条线,它可以是任何东西。作为视觉生物,最有益的可能是几何(线、面等)。然后,在此基础上,就有了计算建模,即数值方法/分析。

至于我如何思考事物,我喜欢从建模的角度来思考。也就是说,我喜欢概念性地建模某个过程,然后应用数学,再应用数值方法。如果你愿意,可以将其称为中间开发(以绘制N层比喻)。

作为一个想法,也许建模可以被称为工程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接