复数表示法

时间:2009-09-20 23:09:49

标签: c# math notation complex-numbers

我的DotNET应用程序内置了一种有限的脚本语言(在VBScript上松散建模),主要用于后处理数字,点和向量。我刚刚添加了对复杂数字的支持,但我正在努力使用符号。

我不想使用A + Bi表示法,因为如果A或B已被定义为方程式,它不是一个明确的除法:

31 * 5 + 6 + -5i

这可以解释为:

A = 31 * 5 + 6 B = -5i

A = 31 * 5 B = 6 + -5i

我所知道的编程语言都不支持复数。我认为以下内容可能有用,但我对此有任何意见:

{31 * 5} + {6 + -5} i

复合物(31 * 5,6 + -5)

r {31 * 5} i {6 + -5}

4 个答案:

答案 0 :(得分:2)

如果您希望简单区分复数的虚数和虚数,我会执行以下操作之一。

  • 用一些形式的括号括起数字,以确保它被视为一个单位。例如,6 + 5i变为{6,5}或{6,5i}以提高额外的可读性。
  • 引入标记来分隔部分,类似于6.022e23中的指数。例如,6 + 5i变为6i5。你仍然需要括号来指定这一个的公式,例如6 +(b / 2)我变为6i(b / 2),而不是令人困惑的6ib / 2(也可以读作(6ib)/ 2)不幸的是,你失去了使用i作为变量。

即使使用简单的解析器,其中任何一个都很容易处理,并且它们与数学符号足够接近,以免混淆。我更喜欢第一个,因为它对我来说似乎更明确,并使用不太可能混淆的符号。

答案 1 :(得分:1)

您的用户是否有他们使用的特定符号?你能尽可能选择一个吗?在我的情况下,我会使用+ bi所以我会说{31 * 5} + {6 + -5} i但是,如果他们习惯了函数形式,那么我建议复数(31 * 5,6 + -5) )。

由于您使用的是.net,您可能希望使用DLR来提供脚本pythonruby语法?

答案 2 :(得分:1)

我能找到的大多数内置类型复杂的语言(如Python和Lisp)都使用类似的东西:

c{r, i}

答案 3 :(得分:0)

您的示例中似乎使用了显式乘法(即您需要A * B而不是A B)。

在这种情况下,为什么不直接使用i后缀直接跟在

之后的值
 myComplex = 12 + 6i
   or
 myOtherComplex = 12/7 + (6 * pi)i

然后你可能需要决定i或j,我见过两个......

这个后缀技巧与科学通知不同,是e(例如3.1415e7)

修改(遵循David的评论)

上述格式可能会让人感到困惑,具体取决于受众,澄清这种情况的一种方法可能是仅允许虚构的文字 ,并将这些包含在从现有矢量符号派生的复杂符号。当虚数或复数需要表达式来指定它们时,语法将需要显式的“函数外观”语法,例如Imaginary(i)和Complex(r,i)。

解析规则

  • 任何数字(有符号或无符号,整数或十进制,甚至exp。表示法编号)后面跟着后缀i是一个虚数:-7i或1.23i或5.76e4i但不是12 i(数字之间不允许空格)和后缀)
  • 两个值向量,第一个是真实的,第二个是虚构的:(1,7i)或偶数(7,0i)
  • 当“i”值是表达式时,使用虚构(i)格式。表示没有方法调用语法隐含的i后缀。
  • 复数(r,i)格式用于“r”或“i”params是表达式时,以及每当我们希望避免歧义时。

简而言之

  • (7,1i),(0,-3.1415i),(13,0i),Complex(13,0)或Complex(7x + 3,sin(y)+2)都是复数
  • 6i,-1.234e5i,Imaginary(1.234)或Imaginary(sqx(19x + 5y))都是虚数
  • (12,23,34)是R ^ 3
  • 中的向量
  • (12i,-2i)在I ^ 2中的向量中(不是复数,因为第一个元素不是真的)
  • ((0,0i),(1,-9.2i),(12,0i))或((0,21i),Complex(12,3),(44,-55i))是C中的载体^ 3

这似乎足够简单,但再次,只有真正的最终用户才能说出来。