2016-07-15 15 views
0

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

は、私はパッケージ

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を使用して追加するとエラーが発生し、問題は解決しません。

お願いします。

+0

あなたがSystem.Numericsを使用して一番上の部分に入力するコードが必要です – user2705620

+0

ここでは、他のすべてのアセンブリとともに、 '' MathNet.Numerics''のすぐ下に置いています。 Intellisenseによると、アセンブリは必要ないと言います。 – Zeus

答えて

2

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

Screenshot of Reference Manager dialog box

複素数としてMathNet.Numerics.FindRoots.Cubic返し根ので、あなたのルーツを格納する代わりにdoubleSystem.Numerics.Complexタイプを使用する必要があります。

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; 
    } 
} 

あなたが唯一の本当の数字に対処したい場合は、(Double.NaNとして任意の複素数値根を返します)の代わりにMathNet.Numerics.RootFinding.Cubic.RealRootsを呼び出します。

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; 
+0

はい、彼はそれを試みましたが、 "それはエラーを出しました"。 * rolleyes * – Blorgbeard

+0

@Blorgbeard:OPには、プロジェクトへの参照を追加するのではなく、コードファイルに 'using System.Numerics;'を追加したと書かれています。 –

+0

"System.Numericsを使用して追加するとエラーが発生し、問題は解決しません。" – Blorgbeard

関連する問題