MATLAB angle() 到 C# 的转换

MATLAB angle() to C# conversion

我想转移到 C#,一个从 MATLAB 计算表达式相量角的函数,angle()。我发现 angle(x+yi)=atan2(y,x) 但我的问题来了,我有一个 平方根 取决于我给它的值是 positive负面。但是,在 MATLAB 中,如果 sqrt 函数得到一个负数,它 returns 一个 虚数 ,不像 C# returns NaN.

那么,我怎样才能让这两个代码给出相同的结果呢?

即 MATLAB:

angle(a*1i-sqrt(expression))

C#:

Mathf.Atan2(a,-sqrt(expression))(我做的,我认为是错误的)

您可以做与 Matlab 相同的事情并使用复数数学:

using System.Numerics;

public static class Foo
{
    public static double GetAngle(double a, double expression)
    {
        Complex cA = new Complex(0, a);
        Complex sqrt = Complex.Sqrt(expression);
        Complex result = cA - sqrt;
        return result.Phase;
    }
}

如果你不想这样做,你可以看到,如果 expression 是负数,那么 sqrt(expression) 是(正)虚轴上的一个数字,这意味着 a*i-sqrt(Expression) == (a-sqrt(abs(expression)))*i其相位是 pi/2 或 3*pi/2:

public static class Foo
{
    public static double GetAngle(double a, double expression)
    {
        if (expression < 0.0)
        {
            double result = a - Math.Sqrt(-expression);
            if (result > 0.0)
                return Math.PI * 0.5;
            else if (result < 0.0)
                return Math.PI * 1.5;
            else
                return 0.0;
        }
        else
            return Math.Atan2(a, -Math.Sqrt(expression));
    }
}