18

プログラマーとして、数学が得意であることは私の仕事だと思っていますが、虚数を理解するのに苦労しています。私はグーグルとウィキペディアを試してみましたが運が悪かったので、プログラマーが私に説明してくれることを願っています.

4

13 に答える 13

25
于 2009-02-23T07:31:48.027 に答える
23

問題: 私はプログラマーであるだけでなく、数学者でもあります。解決策:とにかく先に進んでください。

複素数にとって魔法のようなものは何もありません。それらの発端の背後にある考え方は、実数には何か問題があるということです。方程式 x^2 + 4 がある場合、これは決してゼロにはなりませんが、x^2 - 2 は 2 回ゼロになります。そのため、数学者は非常に怒って、少なくとも 1 次の多項式を持つゼロが常に存在することを望み (「代数的に閉じた」フィールドが必要でした)、j = sqrt(-1) となるような任意の数 j を作成しました。そこから、すべてのルールが適切に配置されます(ただし、より正確には別の方法で再編成されますが、具体的には、「この数値は負の 1 の平方根です」と正式に言うことはできません)。その数 j があれば、j の倍数を得ることができます。j に実数を足すと、複素数になります。

複合体の本当の問題は、これらすべてにあるのではなく、より小なり大なりの通常の規則を得ることができるシステムを定義できないという事実にあります。本当に、あなたはそれをまったく定義していないところにたどり着きます。二次元空間では意味がありません。したがって、正直なところ、「<= 0 である 2 乗した数の例を教えてください」と実際に答えることはできませんが、その 2 乗を複素数ではなく実数として扱う場合、「j」は意味があります。

用途については、フラクタルを扱うときに個人的に最もよく使用しました。マンデルブロ フラクタルの背後にある考え方は、z = z^2 + c と実虚軸に沿った発散をグラフ化する方法であるということです。

于 2009-02-23T07:30:44.270 に答える
9

また、なぜ負の数が存在するのかと尋ねるかもしれません。これらは、x + 5 = 0 のような特定の方程式の解を表現したいために存在します。同じことが虚数にも当てはまり、x^2 + 1 = 0 の形式の方程式の解をコンパクトに表現したいとします。

実際に使用されているのを見た 1 つの方法を次に示します。EE では、正弦波である関数、または正弦波に分解できる関数を扱うことがよくあります。(たとえば、フーリエ級数を参照してください)。

したがって、次の形式の方程式の解がよく見られます。

f(t) = A*cos(wt)

さらに、この関数から位相をずらした関数を表現したいことがよくあります。90 度の位相シフトにより、sin 関数が得られます。

g(t) = B*sin(wt)

これら 2 つの関数 (同相成分と直交成分と呼ばれます) を組み合わせることで、任意の位相シフトを得ることができます。

h(t) = A cos(wt) + i B*sin(wt)

ここで重要なのは、線形システムでは、f(t) と g(t) が方程式を解く場合、h(t) も同じ方程式を解くということです。これで、方程式 h(t) の一般的な解が得られました。

h(t) の良いところは、次のようにコンパクトに書けることです。

h(t) = Cexp(wt+シータ)

exp(iw) = cos(w)+i*sin(w) という事実を使用します。

これについては、非常に深いものは何もありません。さまざまな方程式の共通解をコンパクトに表現するために、数学的恒等式を利用しているだけです。

于 2009-02-23T07:36:52.820 に答える
2

「虚数は存在するか?」という質問なら または「虚数はどのように存在しますか?」それはプログラマーにとって問題ではありません。それは数学者の問題ではなく、数学の形而上学者または哲学者の問題かもしれませんが、数学者はその分野での存在を正当化する必要性を感じるかもしれません. 数字がどのように存在するかについての議論から始めることは有用です (この問題にアプローチしたかなりの数の数学者はプラトニストです、参考までに)。(初期のホワイトヘッドが行ったように) 虚数は実用的な便利さであると主張する人もいます。しかし、もし虚数が単なる実用的な便利さであるならば、それは数学について何を言いますか? あなたはできる' 虚数を単なる実用的なツールまたは実数のペアとして説明するだけで、両方のペアとそれらが「実用的」であるという一般的な結果を説明する必要はありません。他の人は、虚数の存在を主張し、虚数が存在しないと虚数を多用する物理理論を弱体化させると主張します (QM は複雑なヒルベルト空間でひざまで深くなります)。この問題は、この Web サイトの範囲を超えていると思います。

ソフトウェアで虚数をどのように表現するかなど、あなたの質問がより現実的なものである場合、上記の答え (実数のペアとそれらの定義された操作) はそれです。

于 2012-05-19T05:59:53.393 に答える
2

さて、プログラマーの場合:

class complex {
public:
  double real;
  double imaginary;

  complex(double a_real) : real(a_real), imaginary(0.0) { }
  complex(double a_real, double a_imaginary) : real(a_real), imaginary(a_imaginary) { }

  complex operator+(const complex &other) {
    return complex(
        real + other.real,
        imaginary + other.imaginary);
  }
  complex operator*(const complex &other) {
    return complex(
        real*other.real - imaginary*other.imaginary,
        real*other.imaginary + imaginary*other.real);
  }

  bool operator==(const complex &other) {
    return (real == other.real) && (imaginary == other.imaginary);
  }
};

基本的にはこれだけです。複素数は、+、*、および == の特別なオーバーロードが定義される実数の単なるペアです。そして、これらの操作は実際には次のように定義されます。次に、これらの演算を伴うこれらの数値のペアは、残りの数学とうまく適合することが判明したため、特別な名前が付けられました。

それらは「数える」のような数字ではなく、「+、-、*、... で操作でき、『従来の』数字と混ぜても問題にならない」というようなものです。それらは実数によって残された穴を埋めるので重要です。たとえば、-1 の 2 乗を持つ数はありません。complex(0, 1) * complex(0, 1) == -1.0これらの場合に負の数を特別に扱う必要がなくなったため、これで便利な表記法が得られました。(そして、結局のところ、基本的に、複素数を使用する場合、他のすべての特別なケースはもう必要ありません)

于 2009-02-23T08:27:54.087 に答える
1

このサイトを数学のオーバーフローにするつもりはありませんが、興味のある方は、Paul J. Nahin による「An Imaginary Tale: The Story of sqrt(-1)」をご覧ください。虚数のすべての歴史とさまざまな応用について楽しくエキサイティングな方法で話します。その本は、私が 7 年前に読んだときに数学の学位を取得することを決定した理由です (そして私は芸術を考えていました)。よく読んだ!!

于 2012-05-19T06:15:43.413 に答える
0

単純なアプリケーションを見つけることに興味があり、行列に精通している場合は、複素数を使用して完全に実数の行列を複素空間の三角行列に変換すると便利な場合があり、計算が少し簡単になります。 .

結果はもちろん完全にリアルです。

于 2009-02-23T08:01:05.070 に答える
0

これまでのところ素晴らしい回答です(Devinのように!)

もう1つのポイント:

複素数の最初の用途の 1 つは (当時はそのように呼ばれていませんでしたが)、3 次方程式を解く際の中間ステップとしてでした。 リンク

繰り返しますが、これは純粋に、物理的な意味を持つ実数で実際の問題に答えるために使用される手段です。

于 2009-02-23T08:02:13.273 に答える
0

要点は、 x 2 = -1のような 2 次方程式の解となるように定義した数値を追加することです。その方程式 i の解を 1 つ挙げると、i の計算規則はその方程式から導かれます。

これは、正の数しか知らなかったときに 2 + x = 1 のような方程式の解として負の数を定義したり、整数しか知らなかったときに 2x = 1 のような方程式の解として分数を定義したりするのと似ています。

于 2009-02-23T07:35:46.427 に答える
0

数値が負の数の平方根になる方法を理解しようとするのをやめて、それが負の数であるという仮定を続けるのが最も簡単かもしれません.

したがって ( iを -1 の平方根として使用):

(3+5i)*(2-i)
= (3+5i)*2 + (3+5i)*(-i)
= 6 + 10i -3i - 5i * i
= 6 + (10 -3)*i - 5 * (-1)
= 6 + 7i + 5
= 11 + 7i

数学の標準的な規則に従って動作します (4 行目の i の 2 乗は -1 に等しいことに注意してください)。

于 2009-02-23T07:36:45.347 に答える
0

虚数は、実数に虚数単位を掛けたものiです。iと定義されている:

i == sqrt(-1)

そう:

i * i == -1

この定義を使用すると、次のように負の数の平方根を取得できます。

   sqrt(-3)
== sqrt(3 * -1)
== sqrt(3 * i * i) // Replace '-1' with 'i squared'
== sqrt(3) * i     // Square root of 'i squared' is 'i' so move it out of sqrt()

最終的な答えは、実数sqrt(3)に虚数を掛けたものiです。

于 2009-02-23T07:37:11.867 に答える
0

簡単な答え: 実数は 1 次元であり、虚数は方程式に 2 番目の次元を追加し、乗算すると奇妙なことが起こります...

于 2009-02-23T07:42:01.030 に答える