我正在尝试使用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进行添加会出现错误,并且无法解决问题。

有什么建议吗?

最佳答案

如果使用的是Visual Studio,则需要在解决方案资源管理器中右键单击项目的“引用”文件夹,单击“添加引用”,然后从“程序集”>“框架”列表中选择“ System.Numerics”:

c# - 求三次多项式的根-LMLPHP

由于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;

关于c# - 求三次多项式的根,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38387335/

10-13 01:56