C# 如何知道复数的结果有一个或多个实根

C# 如何知道复数的结果有一个或多个实根,c#,math,mathematical-expressions,C#,Math,Mathematical Expressions,我想用复数来计算负功率 作为$(-10)^(1/3)$,使用Math.Pow将获得NAN 但是当我使用Complex.Pow时,我可以得到结果 Complex c = Complex.Pow(-10, 1.0/3); var r = c.Magnitude;//2.1544346900318843 但实际结果是-2.1544346900318843 我不知道结果是正的,因为震级是Abs 我不能在所有结果中添加-1*,因为pow可以使结果为正 c.Real >

我想用复数来计算负功率

作为$(-10)^(1/3)$,使用Math.Pow将获得NAN

但是当我使用Complex.Pow时,我可以得到结果

        Complex c = Complex.Pow(-10, 1.0/3);
        var r = c.Magnitude;//2.1544346900318843
但实际结果是-2.1544346900318843

我不知道结果是正的,因为震级是Abs

我不能在所有结果中添加
-1*
,因为pow可以使结果为正

c.Real > 0
c.Imaginary > 0
(-10)^(2/3)
应该得到肯定的结果

我如何判断结果是肯定的,并确定是否有真正的解决方案? 见:

--

编辑

(-10)^(2/3)

(-10)^(1/3)


如何计算它,请参见:

这进入数学领域有点太多了,让我感到不舒服,但数量级始终是正值,因为它是一个绝对值。在复数的情况下,震级本身没有任何价值,因为在这种情况下,它在半径为
r=2.1544…
的圆上包含无限多的点

相反,您需要同时使用幅值和参数(角度),也可以使用实部和虚部


如果角度在-90°和90°之间(0°位于实轴,逆时针方向),则实部为正,对于0°和180°之间的角度,虚部为正

在复数中,任何数字都有三个立方根。
对于负数(负实部,无虚部),三个根的排列方式如下

                                       X1  
                                      /  
                                     /  
                                    /  
                                   /
                    X2------------0  
                                   \  
                                    \  
                                     \  
                                      \  
                                       X3  
它们都有相同的大小,实际上是从(0,0)==0+i0的距离。
X1和X3具有相同的实部,即X2实部的一半。
X1和X3的虚部绝对值相同,符号不同。
X2没有虚部。X2的实部是减去震级

因此,X2的实部为负,不是大小。
根据定义,大小对于所有根都是正的

请注意,三个根的平方也不一定有正实部。
特别是第一根的平方(
X1
),是数学正方向上的第一根,从正实轴开始。
没有虚部的复数的平方是正的,没有虚部,但对于虚部不为零的复数,情况并非如此

                                 X1^2
                                   \  
                                    \  
                                     \  
                                      \  
                                       0------------X2^2  
                                      /  
                                     /  
                                    /  
                                   /
                                 X3^2
没有为完全数定义属性“正”。它仅为虚部和实部两部分中的每一部分定义。
复数的大小始终大于等于0。但大小不一定与复数的平方(或平方的平方根)相同。 每个复数有两个平方根。由于它们相距180°,其中一个总是负实部,另一个是正实部,或者两者都为零

是否有一个或多个根具有零虚部和正实部(这似乎是你说“正”时的意思),这是你必须通过检查它们来检查的。可以通过获取第一个根的所有幂1..N-1(这是X^(1/N)的结果)来实现这一点。至少我不知道这样做的捷径。

请注意(正如我注意到的一条评论)计算出的数字不是根,但它们具有相同的相位,因此可以进行判断。

有两种典型的方法表示复数——笛卡尔形式或极坐标形式

Cartesian Form
  c = real + imaginary * i
Polar Form
  c = r * exp(i * theta)
这里的
r
是幅值(
c.magnity
),是一个分量,与角度(
c.Phase
)一起描述复平面中的点

在复数集合上没有定义排序。你可以问真实部分是否为正。或者,您可以询问虚部是否为正

c.Real > 0
c.Imaginary > 0

对于c.Real是1.0772173450159421,c.Imag是1.8657951723620641,但是当我使用
c=Complex.Pow(-10,1.0/3)
我不能理解你,我不知道为什么(-10)^(2/3)只有一个正结果,而(-10)^(1/3)只有一个负值。我如何判断结果是正的?结果很复杂,不肯定。在三种可能的解决方案中,返回角度最小(正)的解决方案作为结果。这是将pow(z,w)实现为exp(w*Log(z))的结果,其中复对数使用主分支。@Yunnosch Thx但我不知道为什么(-10)^(2/3)=(-10)^2^(1/3)因为(-10)^(2/3)=(10^2)^(1/3)=(-10^2)^(1/3)。最后一节不正确。要获得Z^n=X的所有可能解,首先使用Z=X^(1/n),然后将Z乘以Q=(-1)^(2/n)的幂以获得其他根。请参阅友好文档:@LutzL Thx,但对于复数a+bi,相位计算为Math。Atan2(b,a)不可交谈的是肯定的。可能是@ Lutz的复制品,是C++,但是我使用的是C和LutzL的复杂的LIB。但是,非正、复数幂的概念问题以及它的解,一个在整个实轴上工作的立方根都是相同的。@但是我不知道为什么(10)^(2/3)!(-10)^2^(1/3)复数的有理幂是一件棘手的事情,非有理幂不可能正确定义(但你仍然得到一个你可以称之为“结果”的“a”结果)。在幂的“幼稚”规则下,无法选择这些多值函数的分支。参见sqrt(1/-1)!=sqrt(1)/sqrt(-1)及类似产品。
c.Real > 0
c.Imaginary > 0