-2

这是关于实现数学定理的一般设计问题。我正在尝试用编程语言从微分几何中实现一些数学定理(无论哪种都无所谓;为简单起见,我使用python语言,但这不应该影响一般思想。)。我可以用一个例子更好地描述这个问题。

定理: r>= 2 类曲面上的任何直线都是渐近曲线。

如何实现这样的定理。显然,该函数需要一条线作为参数,而曲面作为参数。

def theorem (line, surface): pass

函数应该只返回真、假还是不可判定?或者该函数是否应该返回“渐近”。如果我们将函数命名为“is-asymptotic”,那么它应该返回 true、false 或 undecidable。

函数应该检查的第一件事是线是否是直的。让我们不要深入细节。然后,它应该计算表面的类别

def theorem (line, surface): 
  if not straight(line, surface):
    return "undecidable"
  else:
    if class-of(surface) >= 2:
      ???

上述方法促使我返回真/假。另一方面,如果我将它实现为一个名为 line 的类的方法,它要求给定 line 的所有属性,那么它应该返回一个属性列表,包括“渐近”。

最后,我在上面所做的是要求给定行的属性,即我们的论点。该函数没有说明所有其他直线。

您将如何解决定理的整个实现设计?

先感谢您。

PS。为了进一步阐明编程语言内容中的问题,将上述问题改写如下。假设我有一个对象“Line”的实例“line”。我是否询问实例是否是渐近的,如

is_asymptotic(line) # returns true/false/undecidable

还是我要询问它的属性并获取包含渐近属性的属性列表,如

line_properties(line) # returns [..., "asymptotic", ...]

或者在创建实例时,在检查它是否是直的之后,我将属性设置为渐近线,如

line = Line(surface) # sets line.asymptotic = True
4

1 回答 1

0

使用 sympy 包。

In [153]: from sympy import *
In [154]: x = symbols('x')
In [155]: y = symbols('y')
In [156]: z = symbols('z')
In [157]: p = (x+y)**2
In [158]: p
Out[158]: (x + y)**2
In [159]: q = x**2 + 2*x*y + y**2
In [160]: p == q
Out[160]: False
In [161]: p.expand() == q
Out[161]: True

你可能会发现 https://github.com/sympy/sympy/wiki/Geometry-Module

乐于助人。

祝你好运!

于 2017-12-06T05:39:34.487 回答