我试图使用math.numerics找到三次多项式ax^3+bx^2+cx+d=0
的根。套餐很棒,但我很难开始使用它。有人可以解释如何查找根,以及如何从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添加会出错并且无法解决问题。
有什么建议吗?
答案 0 :(得分:2)
如果您使用的是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;