math-as-code, 在代码形式中,数学符号的备忘单

分享于 

28分钟阅读

GitHub

  繁體 雙語
a cheat-sheet for mathematical notation in code form
  • 源代码名称:math-as-code
  • 源代码网址:http://www.github.com/Jam3/math-as-code
  • math-as-code源代码文档
  • math-as-code源代码下载
  • Git URL:
    git://www.github.com/Jam3/math-as-code.git
    Git Clone代码到本地:
    git clone http://www.github.com/Jam3/math-as-code
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Jam3/math-as-code
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    math-as-code

    中文翻译( 中文版)

    这是一个参考,通过显示与JavaScript代码的比较来简化开发人员的数学符号。

    动机:学术论文对于自学游戏和图形编程者来说可能是。 : )

    本指南还没有完成。 如果你看到错误或者想捐赠,请打开一张机票,或者发送一个公关。

    注意英镑:为了简洁,一些代码示例使用了 npm包的。 你可以参考他们的GitHub仓库实现实现细节。

    的序言

    数学符号根据作者。上下文和研究( 线性代数,集合理论等)的领域可以能意味着不同的事物。 本指南可能不包括所有使用符号。 在某些情况下,真实世界引用( 博客文章。出版物等) 将被引用来演示如何在野生世界中显示符号。

    有关更完整的列表,请参阅 Wikipedia的数学符号列表列表。

    为简单起见,许多代码示例在浮点值中运行,并且不是数值鲁棒的。 有关为什么这可能是问题的更多细节,请参见 Mikola Lysenko的健壮算术注释( )。

    电子邮件内容

    变量 NAME 约定

    根据上下文和学习领域,有各种命名约定,并且它们并不总是一致的。 但是,在某些文献中,你可能会发现变量名称遵循 Pattern 这样:

    • 的 italic lowercase 字母( 比如。 数字)
    • x bold lowercase 字母( 比如 )。 2D 磅)
    • 为矩阵计算 bold大写字母( )。 3D 转换)
    • θ - italic lowercase 希腊文字母常量和特殊变量( 比如。 polar 角度 θ,theta ) ) ) ) )

    这也将是本指南的格式。

    等于符号

    有许多类似于等号 =的符号。 下面是几个常见示例:

    • = 用于相等( 值相同)
    • 用于不等式( 值不相同)
    • 的大小大约等于( π ≈ 3.14159 )
    • := 用于定义( A 定义为B )

    在JavaScript中:

    // equality2===3// inequality2!==3// approximately equalalmostEqual(Math.PI, 3.14159, 1e-5)functionalmostEqual(a, b, epsilon) {
     returnMath.abs(a - b) <= epsilon
    }

    你可能会看到 :==:= 符号用于定义。 1

    例如以下定义将 x 为 2 kj。

    equals1

    在JavaScript中,我们可以使用 var 定义定义变量并提供别名:

    var x =2* k * j

    但是,这是可变的,并且只在此时获取值的快照。 一些语言有前处理器 #define 语句,它们更接近于一个数学类,定义了。

    在JavaScript中定义的更精确的定义可能有点像:

    constf= (k, j) =>2* k * j

    另一方面,表示相等性:

    equals2

    可以在代码中将 上面 公式解释为断言:

    console.assert(x === (2* k * j))

    平方 root-和复数

    方形 root 操作的形式如下:

    squareroot

    在编程中,我们使用一个 sqrt 函数,如下所示:

    var x =9;console.log(Math.sqrt(x));//=> 3

    复数是表单的表达式complex ,其中 a 是真正的部分和 b 是虚构的部分。 虚数 i 被定义为:

    imaginary

    在JavaScript中,不存在复杂数字的功能,但是有一些库支持复数算法。 例如使用 mathjs:

    var math =require('mathjs')var a =math.complex(3, -1)//=> { re: 3, im: -1 }var b =math.sqrt(-1)//=> { re: 0, im: -1 }console.log(math.multiply(a, b).toString())//=> '1 + 3i'

    库还支持计算字符串表达式,因此可以将 上面 编写为:

    console.log(math.eval('(3 - i) * i').toString())//=> '1 + 3i'

    其他实现:

    点&交叉

    · 和交叉 × 符号的用法不同,具体取决于上下文。

    虽然看起来很明显,但在继续其他部分之前,理解细微的差别是很重要的。

    标量乘法

    两个符号都可以表示标量的简单乘法。 以下是等效的:

    dotcross1

    在编程语言中,我们倾向于使用 Asterisk 进行乘法:

    var result =5*4

    通常,乘法符号只用于避免歧义( 比如。 在两个数字之间。这里,我们可以完全忽略它:

    dotcross2

    如果这些变量表示标量,则代码将为:

    var result =3* k * j
    矢量乘法

    若要表示一个矢量的乘法,或者向量的元素明智乘法,我们通常不使用点 · 或者交叉 × 符号。 这些在线性代数中有不同的含义,。

    我们先举一个例子,把它应用到向量中。 对于元素智能向量乘法,你可能看到一个开放点 来表示 Hadamard产品。2

    dotcross3

    在它的他实例中,作者可能会显式定义不同的符号,例如圆圈点 或者填充圆的3

    下面是代码中的查找方法,使用数组 [x, y] 表示 2D 个向量。

    var s =3var k = [ 1, 2 ]var j = [ 2, 3 ]var tmp =multiply(k, j)var result =multiplyScalar(tmp, s)//=> [ 6, 18 ]

    我们的multiplymultiplyScalar 函数如下所示:

    functionmultiply(a, b) {
     return [ a[0] * b[0], a[1] * b[1] ]
    }functionmultiplyScalar(a, scalar) {
     return [ a[0] * scalar, a[1] * scalar ]
    }

    类似地,矩阵乘法通常不使用点 · 或者交叉符号 ×。 矩阵乘法将在后面的部分中讨论。

    点产品

    点符号 · 可以用来表示两个向量的点积。 有时这称为标量产品,因为它计算为一个标量。

    dotcross4

    它是线性代数的一个很常见的特征,并且有 3D 个向量,它可能如下所示:

    var k = [ 0, 1, 0 ]var j = [ 1, 0, 0 ]var d =dot(k, j)//=> 0

    结果 0 告诉我们向量是垂直的。 以下是 3-component 向量的dot 函数:

    functiondot(a, b) {
     return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]
    }
    交叉产品

    交叉符号 × 可以用来表示两个向量的交叉乘积( cross ) 交叉积。

    dotcross5

    在代码中,它的外观如下:

    var k = [ 0, 1, 0 ]var j = [ 1, 0, 0 ]var result =cross(k, j)//=> [ 0, 0, -1 ]

    这里,我们得到 [ 0, 0, -1 ] 英镑k 英镑和英镑

    我们的cross 函数:

    functioncross(a, b) {
     var ax = a[0], ay = a[1], az = a[2],
     bx = b[0], by = b[1], bz = b[2]
     var rx = ay * bz - az * by
     var ry = az * bx - ax * bz
     var rz = ax * by - ay * bx
     return [ rx, ry, rz ]
    }

    对于向量乘法,交叉积和点乘积的其他实现:

    大希腊 Σ ( Sigma ) 是用于求和。 换句话说:总结一些数字。

    sigma

    这里,i=1 说从 1 开始,在的数字 上面,100。 分别是上下和上边界。 我在右边的告诉我们在求和的内容。 在代码中:

    var sum =0for (var i =1; i <=100; i++) {
     sum += i
    }

    sum的结果是 5050

    提示:带有整数的,这个特定的Pattern 可以优化到以下:

    var n =100// upper boundvar sum = (n * (n +1)) /2

    下面是另一个示例,即 ,或者不同:

    sum2

    在代码中:

    var sum =0for (var i =1; i <=100; i++) {
     sum += (2* i +1)
    }

    sum的结果是 10200

    这个符号可以嵌套,这非常类似于嵌套 for 循环。 除非作者把它们括在括号中,否则,你应该先评估一下最大的西格玛。 然而,在下面的例子中,由于我们处理的是有限和,所以顺序并不重要。

    sigma3

    在代码中:

    var sum =0for (var i =1; i <=2; i++) {
     for (var j =4; j <=6; j++) {
     sum += (3* i * j)
     }
    }

    在这里,sum 将是 135

    capital

    除了使用乘法来查找一系列值的乘积外,大写Pi或者"大引脚"与非常相似。

    执行以下操作:

    capitalPi

    在代码中,它可能类似于:

    var value =1for (var i =1; i <=6; i++) {
     value *= i
    }

    value 将评估为 720

    管道

    管道符号,称为条,根据上下文可以表示不同的东西。 below 是三种常见用途: 绝对值欧几里德范数,和行列式值。

    这三个特征都描述了对象的长度长度。

    绝对值

    pipes1

    对于数字 ,|x| 表示的绝对值。 在代码中:

    var x =-5var result =Math.abs(x)// => 5
    欧氏范数

    pipes4

    向量为 ‖v‖ 为磅欧几里德标准值。 它也被称为向量的"大小"或者"长度"。

    通常用双条表示,以避免用绝对值表示歧义,但有时你可能会看到单条:

    pipes2

    下面是一个使用 array [x, y, z] 表示 3D 矢量的例子。

    var v = [ 0, 4, -3 ]length(v)//=> 5

    length 函数:

    functionlength (vec) {
     var x = vec[0]
     var y = vec[1]
     var z = vec[2]
     returnMath.sqrt(x * x + y * y + z * z)
    }

    其他实现:

    行列式

    pipes3

    矩阵为 ,表示矩阵的行列式

    以一个平面 array 表示的2列矩阵的行列式为例,以列主格式为例。

    var determinant =require('gl-mat2/determinant')var matrix = [ 1, 0, 0, 1 ]var det =determinant(matrix)//=> 1

    实现:

    ,符号 上面 a 一个字符用来表示一个单位矢量。 例如这里的单位向量为 :

    hat

    在笛卡尔空间中,单位向量通常是长度 1. 也就是说向量的每个部分都将在 -1.0到 1.0的范围内。 在这里,我们将向量normalize一个单位向量:

    var a = [ 0, 4, -3 ]normalize(a)//=> [ 0, 0.8, -0.6 ]

    以下是 normalize 函数,操作 3D 向量:

    functionnormalize(vec) {
     var x = vec[0]
     var y = vec[1]
     var z = vec[2]
     var squaredLength = x * x + y * y + z * z
     if (squaredLength >0) {
     var length =Math.sqrt(squaredLength)
     vec[0] = vec[0] / length
     vec[1] = vec[1] / length
     vec[2] = vec[2] / length
     }
     return vec
    }

    其他实现:

    元素

    对于集合理论,可以使用"元素"符号 来描述某个元素是否为集合的元素。 例如:

    element1

    这里我们有一组数字,一个数字。 { 3, 9, 14 } 我们是说 3 是一个"元素"。

    ES5中的一个简单实现可能如下所示:

    varA= [ 3, 9, 14 ]A.indexOf(3) >=0//=> true

    但是,使用只保存惟一值的Set 会更准确。 这是ES6的一个特性。

    varA=newSet([ 3, 9, 14 ])A.has(3)//=> true

    反向 是相同的,但顺序更改:

    element2

    你还可以像这样使用"不是一个元素"符号 :

    element3

    通用数字集

    你可能会看到一些大的黑板在方程式之间。 通常,这些被用来描述。

    例如我们可以将 k 描述为的一个元素,即 set。

    real

    列出的below 是几个常见集合及其符号。

    实数

    大的 描述了实数的集合。 这些包括整数,以及理性和无理的数字。

    functionisReal (k) {
     returntypeof k ==='number'&&isFinite(k);
    }

    注:实数也是的有限,例如不是无穷。

    有理数

    有理数是实数,可以表示为分数,也可以表示为非比例比率( ( 像 ) )。 有理数不能有零作为分母。

    这也意味着所有整数都是有理数,因为分母可以表示为 1.

    另一方面,无理数是无法表示为比率的,如 π ( 管脚)。

    整数

    一个整数,换句话说,是没有分数部分的实数。 这些可以是正数或者负数。

    JavaScript中的简单测试可能如下所示:

    functionisInteger (n) {
     returntypeof n ==='number'&& n %1===0}
    自然数

    一个自然数,一个正整数和非负整数。 根据上下文和研究领域,该集可以能不包括零,所以它看起来像下面这样:

    { 0, 1, 2, 3, ... }
    { 1, 2, 3, 4, ... }

    前者在计算机科学中更常见,例如:

    functionisNaturalNumber (n) {
     returnisInteger(n) && n >=0}
    复数

    复数是实数和假数的组合,看作 2D 平面中的一个坐标。 有关更多信息,请参见虚拟数字的直观直观指南

    函数

    函数的基本特征是数学,这个概念很容易转换为代码。

    函数将输入与输出值关联起来。 例如下面是一个函数:

    function1

    我们可以给这个函数一个名称。 通常,我们使用 ƒ 来描述函数,但它可以被命名为 A(x) 或者其他任何。

    function2

    在代码中,我们可以 NAME square,并像这样编写它:

    functionsquare (x) {
     returnMath.pow(x, 2)
    }

    有时,函数没有命名,而是写入输出。

    function3

    上面 示例中, x 是输入,关系是 squaring squaring y y is是输出。

    函数还可以有多个参数,如在编程语言中。 这些被称为参数数学,函数的个数称为函数的数量。

    function4

    在代码中:

    functionlength (x, y) {
     returnMath.sqrt(x * x + y * y)
    }

    分段函数

    一些函数将根据输入值 x 使用不同的关系。

    piecewise1

    这与代码中的if/else 非常相似。 right-side 条件通常以英镑或者英镑"如果x = 0"编写。 如果条件为 true,则使用左侧的函数。

    在分段函数中,英镑和英镑 类似于代码中的else 语句。

    functionf (x) {
     if (x >=1) {
     return (Math.pow(x, 2) - x) / x
     } else {
     return0 }
    }

    通用函数

    在数学中存在一些函数名。 对于程序员来说,这可能类似于"内置"对语言( JavaScript中的parseInt )的函数。

    一个这样的例子是 函数。 这是符号符号或者函数。 让我们使用分段函数表示法来描述它:

    sgn

    在代码中,它可能类似于:

    functionsgn (x) {
     if (x <0) return-1if (x >0) return1return0}

    作为模块,请参见这里函数的signum

    此类函数的其他示例: ,,。

    函数表示法

    某些文献中,函数可以用更明确的符号来定义。 例如让我们回到前面提到的square 函数:

    function2

    它也可能以以下形式编写:

    mapsto

    这里的箭头通常表示"地图到",x 映射到 x2。

    有时,如果不明显,符号也会描述函数的域和 codomain codomain。

    funcnot

    函数域和 codomain codomain codomain respectively input input输入输出输出类型,。 下面是使用前面的函数的另一个示例,它输出一个整数:

    domain2

    这里的箭头是用来映射一个。

    在JavaScript和它的他动态类型语言中,可以使用文档和/或者运行时检查来解释和验证函数输入/输出。 例如:

    /** * Squares a number. * @param{Number}a real number * @return{Number} a real number*/functionsquare (a) {
     if (typeof a !=='number') {
     thrownewTypeError('expected a number')
     }
     returnMath.pow(a, 2)
    }

    一些工具如 flowtype 试图将 static 键入给 JavaScript。

    其他语言,比如 Java,允许基于函数的输入/输出的static 类型重载 true 方法。 这更接近于数学: 如果两个函数使用不同的域,则两个函数不相同。

    素符符号( ) 常常用于变量名称,以描述相似的事物,而不是完全不同的NAME。 它可以在转换后描述"下一个值"。

    例如如果我们取一个 2D 点 ( x,y ) 并旋转它,那么你可能会把结果( x′,y′ )。 或者,矩阵 transpose的转换可能命名为 M′。

    我们通常只给变量赋一个描述性的NAME,比如 transformedPosition

    对于数学函数,主要符号通常描述该函数的导数。 衍生产品将在未来部分中解释。 让我们使用前面的函数:

    function2

    它的导数可以用一个素数 符号写:

    prime1

    在代码中:

    functionf (x) {
     returnMath.pow(x, 2)
    }functionfPrime (x) {
     return2* x
    }

    地板&天花板

    特殊括号 ⌊x⌋⌈x⌉ 分别表示 floor和 ceil functions函数。

    floor

    ceil

    在代码中:

    Math.floor(x)Math.ceil(x)

    当两个符号为混合 ⌊x⌉ 时,它通常表示一个返回到最近整数的函数:

    round

    在代码中:

    Math.round(x)

    箭头

    箭头通常用于函数表示法中。 以下是你可能会看到的几个其他区域。

    材料蕴涵

    这样的箭头有时在逻辑中用来表示非。 也就是说,如果是,那么B 也是 true。

    material1

    将这里解释为代码可能会如下所示:

    if (A===true) {
     console.assert(B===true)
    }

    箭头可以是 direction ,也可以是

    material-equiv

    相等

    在数学中,<> 通常用于我们在代码中使用它们的方式: 小于,大于,小于或者等于and大于或者等于,。

    50>2===true2<10===true3<=4===true4>=4===true

    偶尔你会看到一个斜线通过这些符号,来描述它们,而不是。 例如 k is is is"非 GREATER"。

    ngt

    有时被用来表示的重要。 也就是说, k 是一个大小大于j的 order。

    orderofmag

    在数学中,数量级相当具体;它不仅是一个简单的例子,上面的例子是:

    orderOfMagnitude(k) >orderOfMagnitude(j)

    below 是我们的orderOfMagnitude 函数,使用 Math.trunc ( ES6 )。

    functionlog10(n) {
     // logarithm in base 10returnMath.log(n) /Math.LN10}functionorderOfMagnitude (n) {
     returnMath.trunc(log10(n))
    }

    注:注意:这并不是数值上的稳健。

    关于ES5中的一个,请参见 math-trunc。

    连接&析取

    逻辑中的另一个使用箭头是连接 和析取 。 它们类似于程序员和 OR 运算符的AND

    下面显示了连接 ,逻辑 AND

    and

    在JavaScript中,我们使用 &&。 假设 k 是一个自然数,逻辑表示k 是 3:

    if (k >2&& k <4) {
     console.assert(k ===3)
    }

    由于双方都是等效的,因此它也意味着:

    if (k ===3) {
     console.assert(k >2&& k <4)
    }

    向下箭头 是逻辑析取,如或者运算符。

    logic-or

    在代码中:

    A||B

    逻辑否定

    有时,¬~ 和 符号用于表示逻辑 NOT。!

    下面是一个使用 not符号的简单示例:

    negation

    如何在代码中解释这里问题的示例:

    if (x !== y) {
     console.assert(!(x === y))
    }

    注意:tilde ~ 有很多不同的含义取决于上下文。 例如行等价 ( 矩阵理论) 或者相同的数量级( 在等式中讨论。)。

    间隔

    有时函数处理限定于某些值范围的实数,这样的约束可以用一个区间表示。

    例如,我们可以表示零和一之间的数字,包括/不包括零和/或者一个:

    • 不包括零或者一个: interval-opened-left-opened-right
    • 包括零,但不包括: interval-closed-left-opened-right
    • 不包括零,但包括: interval-opened-left-closed-right
    • 包括零和一个:interval-closed-left-closed-right

    例如我们表示一个点 x 在 3D 中的单位多维数据集中,我们说:

    interval-unit-cube

    在代码中,我们可以使用两个元素 1d array 表示间隔:

    var nextafter =require('nextafter')var a = [nextafter(0, Infinity), nextafter(1, -Infinity)] // open intervalvar b = [nextafter(0, Infinity), 1] // interval closed on the left var c = [0, nextafter(1, -Infinity)] // interval closed on the rightvar d = [0, 1] // closed interval

    间隔与集合操作一起使用:

    • 交叉 比如 interval-intersection
    • 联合 比如 interval-union
    • 差分 比如 interval-difference-1interval-difference-2

    在代码中:

    var Interval =require('interval-arithmetic')var nexafter =require('nextafter')var a =Interval(3, nexafter(5, -Infinity))var b =Interval(4, 6)Interval.intersection(a, b)// {lo: 4, hi: 4.999999999999999}Interval.union(a, b)// {lo: 3, hi: 6}Interval.difference(a, b)// {lo: 3, hi: 3.9999999999999996}Interval.difference(b, a)// {lo: 5, hi: 6}

    请参见:

    更多。

    像这个指南建议一些更多功能,或者向我们发送一个请求请求? !

    有关如何贡献的详细信息,请参阅 CONTRIBUTING.md

    许可证

    MIT,有关详细信息,请参阅 LICENSE.md


    cod  for  form  MAT  Sheet  数学  
    相关文章