0

私の DotNET アプリケーションには、主に数値、点、およびベクトルの後処理用に (VBScript で大まかにモデル化された) 組み込みのスクリプト言語が制限されています。複素数のサポートを追加したばかりですが、表記に苦労しています。

A または B が既に方程式として定義されている場合、明確な分割ではないため、A + Bi 表記を使用したくありません。

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

4 に答える 4

2

複素数の実数成分と虚数成分を単純に区別したい場合は、次のいずれかを行います。

  • 数値が単位として扱われるように、何らかの形式の括弧で数値を囲みます。たとえば、6+5i は、読みやすくするために {6,5} または {6,5i} になります。
  • 6.022e23 の指数と同様に、パーツを区切るマーカーを導入します。たとえば、6+5i は 6i5 になります。6 + (b/2)i が 6i(b/2) になるなど、この式の式を指定するには、まだ括弧が必要です。混乱を招く 6ib/2 ((6ib)/2 と読むこともできます) ではありません。残念ながら、変数として i を使用できなくなります。

どちらも単純なパーサーでも簡単に処理でき、混乱しないように数学表記に十分近いものです。私には前者の方がより明確に見え、混乱する可能性が低い記号を使用しているため、前者を好みます。

于 2009-09-20T23:40:31.800 に答える
1

複素数の組み込み型 (Python や Lisp など) を持つ言語のほとんどは、次のようなものを使用します。

c{r, i}
于 2009-09-21T12:52:27.867 に答える
1

ユーザーが使用する特定の表記法はありますか? できるだけ近いものを選んでいただけますか?私の場合、a + bi を使用するので、{31 * 5} + {6 + -5}i としますが、関数型に慣れている場合は、complex(31 * 5, 6 + -5) をお勧めします)。

.net を使用しているので、DLR を使用してスクリプトのpythonまたはruby​​ 構文を使用したい場合がありますか?

于 2009-09-20T23:26:30.190 に答える
0

あなたの例では明示的な乗算を使用しているようです(つまり、 AB ではなく A * B が必要です)。

その場合、次のように値の直後に i サフィックスを使用しないのはなぜですか

 myComplex = 12 + 6i
   or
 myOtherComplex = 12/7 + (6 * pi)i

次に、iまたはjについて決定する必要があるかもしれません。私は両方を見てきました...

この i 接尾辞のトリックは、科学的通知と同じで、e (たとえば 3.1415e7) です。

編集(Davidのコメントに従って)

上記の形式は、聴衆によっては混乱を招く可能性があります。これを明確にする 1 つの方法は、架空のリテラルのみを許可し、これらを既存のベクトル表記法から派生した複雑な表記法に含めることです。虚数または複素数を指定する式が必要な場合、構文には、Imaginary(i) や Complex(r, i) などの明示的な「関数のような」構文が必要になります。

構文解析規則:

  • 接尾辞 i が直接続く数値 (符号付きまたは符号なし、整数または 10 進数、さらには指数表記の数値) は、虚数です: -7i または 1.23i または 5.76e4i ですが、12 i ではありません (数値と接尾辞の間にスペースは許可されません)。
  • 最初の 1 つは実数、2 番目の虚数は複素数の 2 つの値のベクトル: (1, 7i) または偶数 (7, 0i)
  • "i" 値が式の場合、Imaginary(i) 形式が使用されます。i は、メソッド呼び出し構文で暗示される i サフィックスなしで表されます。
  • Complex(r,i) 形式は、"r" または "i" パラメータのいずれかが式である場合、およびあいまいさを避けたい場合に使用されます。

要するに

  • (7, 1i) 、 (0, -3.1415i)、(13, 0i)、Complex(13, 0) または Complex(7x+3, sin(y)+2) はすべて複素数です
  • 6i、-1.234e5i、Imaginary(1.234) または Imaginary(sqrt(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 のベクトル

これは一貫していて単純なことのように思えますが、真のエンドユーザーだけが知ることができます。

于 2009-09-20T23:25:44.543 に答える