作为一名程序员,我认为擅长数学是我的工作,但我很难理解虚数。我已经尝试过谷歌和维基百科但没有运气,所以我希望程序员可以向我解释,给我一个 <= 0 的平方数的例子,一些示例用法等......
13 回答
问题:我不仅是程序员,还是数学家。解决方案:无论如何都要继续前进。
复数没有什么真正神奇的东西。他们成立背后的想法是实数有问题。如果你有一个方程 x^2 + 4,这永远不会是零,而 x^2 - 2 是零两次。所以数学家真的很生气,希望在多项式至少为 1 的情况下总是有零(想要一个“代数闭”域),并创建了一些任意数 j,使得 j = sqrt(-1)。所有的规则都从那里开始落实(尽管它们更准确地以不同的方式重新组织——具体来说,你不能正式地说“嘿,这个数字是负数的平方根”)。如果有那个数字 j,你可以得到 j 的倍数。你可以把实数加到 j 上,那么你就有了复数。
复合体的真正问题不在于所有这些,而在于您无法定义一个系统,从而可以获得小于和大于的普通规则。所以真的,你到达了你根本没有定义它的地方。它在二维空间中没有意义。所以老实说,我实际上无法回答“给我一个 <= 0 的平方数的例子”,尽管如果您将它的平方视为实数而不是复数,“j”是有意义的。
至于用途,我个人在处理分形时最常使用它们。mandelbrot 分形背后的想法是,它是一种绘制 z = z^2 + c 及其沿实虚轴散度的图形的方法。
您可能还会问为什么存在负数?它们的存在是因为您想要表示某些方程的解,例如:x + 5 = 0。同样的事情适用于虚数,您想要紧凑地表示以下形式的方程的解:x^2 + 1 = 0。
这是我看到它们在实践中使用的一种方式。在 EE 中,您经常处理正弦波函数,或者可以分解为正弦波的函数。(参见例如傅立叶级数)。
因此,您经常会看到以下形式的方程的解:
f(t) = A*cos(wt)
此外,您通常希望表示从该函数偏移某个相位的函数。90 度相移将为您提供 sin 函数。
g(t) = B*sin(wt)
您可以通过组合这两个函数(称为同相和正交分量)来获得任意相移。
h(t) = A cos(wt) + i B*sin(wt)
这里的关键是在线性系统中:如果 f(t) 和 g(t) 求解一个方程,h(t) 也将求解同一个方程。所以,现在我们有了方程 h(t) 的通用解。
h(t) 的好处在于它可以紧凑地写成
h(t) = Cexp(wt+theta)
使用 exp(iw) = cos(w)+i*sin(w) 的事实。
这真的没有什么特别深刻的。它只是利用数学恒等式来紧凑地表示各种方程的通用解。
好吧,对于程序员:
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 的数字一样。现在您有了complex(0, 1) * complex(0, 1) == -1.0
一个有用的符号,因为在这些情况下您不必再专门处理负数。(而且,事实证明,当您使用复数时,基本上不再需要所有其他特殊情况)
如果问题是“虚数存在吗?” 或“虚数是如何存在的?” 那么这不是程序员的问题。这甚至可能不是数学家的问题,而是形而上学家或数学哲学家的问题,尽管数学家可能觉得有必要证明他们在该领域的存在是正当的。从讨论数字是如何存在的开始很有用(很多解决这个问题的数学家都是柏拉图主义者,仅供参考)。有些人坚持认为虚数(就像早期的怀特黑德所做的那样)是一种实用的便利。但是,如果虚数仅仅是一种实用的便利,那么这对数学有什么意义呢?你可以' 不要仅仅将虚数解释为一种实用的工具或一对实数,而不必考虑这两对以及它们“实用”的一般后果。其他人坚持虚数的存在,认为虚数的不存在会破坏大量使用它们的物理理论(QM 在复杂的希尔伯特空间中是齐膝深的)。我相信这个问题超出了本网站的范围。
如果您的问题更具体,例如如何在软件中表达虚数,那么上面的答案(一对实数,以及它们的定义操作)就是它。
我不想把这个网站变成数学溢出,但是对于那些感兴趣的人:查看 Paul J. Nahin 的“一个虚构的故事:sqrt(-1) 的故事”。它以有趣和令人兴奋的方式谈论虚数的所有历史和各种应用。那本书让我在 7 年前阅读它时决定攻读数学学位(当时我正在思考艺术)。伟大的阅读!
要点是你添加你定义为二次方程解的数字,比如 x 2 = -1。命名该方程 i 的一个解,然后 i 的计算规则遵循该方程。
这类似于当您只知道正数时将负数定义为等式的解,例如 2 + x = 1,或者当您只知道整数时,将分数定义为等式的解,例如 2x = 1。
停止尝试理解一个数字如何成为负数的平方根可能是最容易的,而只是继续假设它是。
所以(使用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
根据数学的标准规则工作(记住第四行的 i 平方等于 -1)。
虚数是实数乘以虚数单位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
。
一个简短的回答:实数是一维的,虚数为等式添加了第二维,如果你乘以会发生一些奇怪的事情......
如果您有兴趣找到一个简单的应用程序并且您熟悉矩阵,那么使用复数将一个完全实数矩阵转换为复数空间中的三角形矩阵有时会很有用,并且它会使计算变得更容易一些.
结果当然是完全真实的。
在电气工程中,电感的阻抗 Z 为 jwL,其中 w = 2*pi*f(频率)和 j (sqrt(-1)) 表示它超前 90 度,而对于电容器 Z = 1/jwc = -j/wc 是 -90deg/wc,因此它比一个简单的电阻滞后 90 度。