0

一般的な複素数を考えてみましょう:

System.Numerics.Complex z = new System.Numerics.Complex(0,1); // z = i

そして、 の n 乗根抽出操作を考えzます。ご存知のように、z^n = w(zw複素数とnnull でない正の整数を持つ) のような問題がある場合、方程式は( )nのモジュールに等しい半径を持つ複素円上にあるさまざまな複素数を返します。z|z|

System.Numerics名前空間では、そのようなメソッドが見つかりませんでした。明らかに、次のような方法が必要です。

Complex[] NRoot(Complex number);

どうすればこの方法を見つけることができますか。本当に自分で実装する必要がありますか?

4

1 に答える 1

1

どうすればこの方法を見つけることができますか。

フレームワークに組み込まれていないため、できません。

本当に自分で実装する必要がありますか?

はい。

これが少し逆に出くわしたら申し訳ありませんが、そうするつもりはありませんが、これが答えになることをすでに知っていたと思います.

とはいえ、魔法はありません。

public static class ComplexExtensions {
    public static Complex[] NthRoot(this Complex complex, int n) {
        Contract.Requires(n > 0);
        var phase = complex.Phase;
        var magnitude = complex.Magnitude;
        var nthRootOfMagnitude = Math.Pow(magnitude, 1.0 / n);
        return
            Enumerable.Range(0, n)
                      .Select(k => Complex.FromPolarCoordinates(
                          nthRootOfMagnitude,
                          phase / n + k * 2 * Math.PI / n)
                      )
                      .ToArray();
    }
}

ほとんどの作業はフレームワークにオフロードされます。私は、彼らが を正しく (悪い、悪いComplex.Phase、悪い) かつ正しく実装したと信じています。Complex.Magnitude(Complex complex) => Math.Sqrt(complex.Real * complex.Real + complex.Imaginary * complex.Imaginary)Math.Pow

于 2013-05-28T18:20:06.323 に答える