1

ax^3+bx^2+cx+d=0math.numerics を使用して 3 次多項式の根を見つけようとしています。パッケージは素晴らしいですが、使い始めるのに苦労しています。ルートを見つける方法と、 Githubからサンプル パッケージを実行する方法の簡単な説明を誰か説明してもらえませんか?

パッケージへの参照を追加しました

using MathNet.Numerics;

これは私が試したことです:

var roots = FindRoots.Cubic(d, c, b, a);
double root1=roots.item1;
double root2=roots.item2;
double root3=roots.item3;

しかし、エラーが発生します"The type 'Complex' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Numerics'"。System.Numerics を使用して追加するとエラーが発生し、問題は解決しません。

何か提案はありますか?

4

1 に答える 1

4

Visual Studio を使用している場合は、ソリューション エクスプローラーでプロジェクトの [参照] フォルダーを右クリックし、[参照の追加] をクリックして、[アセンブリ] > [フレームワーク] リストから[ System.Numerics ] を選択する必要があります。

[参照マネージャー] ダイアログ ボックスのスクリーンショット

MathNet.Numerics.FindRoots.Cubicは根を複素数として返すため、根を格納する代わりに System.Numerics.Complex 型を使用する必要がありますdouble

using System.Numerics;
using MathNet.Numerics;

class Program
{
    static void Main()
    {
        double d = 0, c = -1, b = 0, a = 1; // x^3 - x
        var roots = FindRoots.Cubic(d, c, b, a);
        Complex root1 = roots.Item1;
        Complex root2 = roots.Item2;
        Complex root3 = roots.Item3;
    }
}

実数だけを扱いたい場合は、代わりにMathNet.Numerics.RootFinding.Cubic.RealRootsを呼び出します (複素数の根をDouble.NaNとして返します)。

using MathNet.Numerics.RootFinding;
...
var roots = Cubic.RealRoots(d, c, b); // "a" is assumed to be 1
double root1 = roots.Item1;
double root2 = roots.Item2;
double roo13 = roots.Item3;
于 2016-07-15T03:20:59.817 に答える