Math 作为一名程序员,你会如何解释虚数?

Math 作为一名程序员,你会如何解释虚数?,math,complex-numbers,Math,Complex Numbers,作为一名程序员,我认为我的工作是擅长数学,但我很难理解虚数。我尝试过谷歌,但运气不佳,所以我希望程序员能向我解释一下,给我举一个平方数的例子,这是一个问题:我不仅是程序员,还是数学家。 解决方案:无论如何都要继续前进 复数并没有什么神奇之处。他们最初的想法是实数有问题。如果你有一个方程x^2+4,这永远不是零,而x^2-2是零的两倍。因此数学家们非常生气,希望总是有至少一次多项式的零(想要一个“代数闭合”域),并创建了一些任意数j,使得j=sqrt(-1)。所有的规则都是从这里开始的(尽管它们被

作为一名程序员,我认为我的工作是擅长数学,但我很难理解虚数。我尝试过谷歌,但运气不佳,所以我希望程序员能向我解释一下,给我举一个平方数的例子,这是一个问题:我不仅是程序员,还是数学家。 解决方案:无论如何都要继续前进

复数并没有什么神奇之处。他们最初的想法是实数有问题。如果你有一个方程x^2+4,这永远不是零,而x^2-2是零的两倍。因此数学家们非常生气,希望总是有至少一次多项式的零(想要一个“代数闭合”域),并创建了一些任意数j,使得j=sqrt(-1)。所有的规则都是从这里开始的(尽管它们被更准确地以不同的方式重新组织——特别是,你不能正式地说“嘿,这个数字是负一的平方根”)。如果有这个数字j,你可以得到j的倍数。你可以把实数加到j上,得到复数。复数运算类似于二项式运算(有意如此)

复合物的真正问题不在于所有这些,而在于你不能定义一个系统,通过这个系统,你可以以小于或大于的价格获得普通规则。所以说真的,你到达了一个你根本没有定义它的地方。这在二维空间中没有意义。所以老实说,我不能回答“给我一个数平方的例子,我想这是一个很好的解释:

关键词是旋转(与负数的方向相反,负数和虚数一样陌生:小于零?)


与负数模拟翻转一样,虚数可以模拟在二维“X”和“Y”之间旋转的任何东西。或任何具有循环、循环关系的事物

主要的一点是,添加一些数字,这些数字被定义为二次方程的解,如x2=-1。为方程i指定一个解,然后根据该方程计算i的规则


这类似于当你只知道正数时,将负数定义为方程的解,如2+x=1;当你只知道整数时,将分数定义为方程的解,如2x=1。

可能最容易的方法是停止尝试理解一个数如何可以是负数的平方根,而只需继续使用as这是一种奢望

因此(使用i作为-1的平方根):


根据数学的标准规则工作(记住第四行我的平方等于-1).

你可能还会问为什么会有负数?负数的存在是因为你想表示某些方程的解,如:x+5=0。同样的道理也适用于虚数,你想简洁地表示形式为:x^2+1=0的方程的解

这是我在实践中看到的一种方法。在EE中,您经常处理正弦波函数,或者可以分解为正弦波的函数(参见示例)

因此,您经常会看到以下形式的方程的解:

f(t)=A*cos(wt)

此外,您通常希望表示从该函数移相某个相位的函数。90度相移将给出sin函数

g(t)=B*sin(wt)

通过组合这两个函数(称为同相分量和正交分量),可以获得任意相移

h(t)=Acos(wt)+iB*sin(wt)

这里的关键是,在线性系统中:如果f(t)和g(t)解一个方程,h(t)也会解同一个方程。所以,现在我们有了方程h(t)的一般解

h(t)的优点是它可以简洁地写成

h(t)=Cexp(wt+theta)

使用exp(iw)=cos(w)+i*sin(w)这一事实


这其实没有什么特别深刻的地方。它只是利用一个数学恒等式来简洁地表示各种方程的共同解。

虚数是一个实数乘以虚数单位。
i
i
的定义如下:

i == sqrt(-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

一个简短的回答:实数是一维的,虚数给方程增加了一个第二维度,如果你想找到一个简单的应用程序,如果你熟悉矩阵,就会发生一些奇怪的事情…

, 在复数空间中,使用复数将一个完美的实矩阵转换成一个三角形矩阵有时是有用的,并且它使计算变得更容易

结果当然是完全真实的。

到目前为止,答案很好(真的像Devin的!)

还有一点:

复数的最初用途之一(尽管当时没有这样称呼)是作为求解三次方程的中间步骤。


同样,这是一种纯粹的工具,用于回答具有物理意义的实数的实际问题。

对于程序员来说:

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);
  }
};
基本上就是这样。复数就是实数对,对它们定义了+、*和==的特殊重载。这些运算实际上就是这样定义的。结果发现,这些带有这些运算的数对与数学的其余部分非常吻合,所以它们有一个特殊的名称

它们不像“计数”中的数字,更像是“可以用+,-,*。。。和“conventi”混在一起不会引起问题
   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()
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);
  }
};