2016-07-15 16 views
0

Я пытаюсь найти корни кубического полинома 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

вам нужно ввести код в верхней части большинства Использование System.Numerics – user2705620

+0

вот где я помещаю его вместе со всеми другими сборками прямо под '' using MathNet.Numerics''. Intellisense говорит, что сборка не требуется. – Zeus

ответ

2

Если вы используете Visual Studio, необходимо щелкнуть правой кнопкой мыши папку Ссылки для вашего проекта в окне Solution Explorer, нажмите кнопку Добавить ссылку, а затем выберите System.Numerics из Ассамблей > Framework список:

Screenshot of Reference Manager dialog box

поскольку 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; 
+0

Да, он пробовал это, но «это дало ошибку». * rolleyes * – Blorgbeard

+0

@Blorgbeard: OP заявила, что добавила 'using System.Numerics'' в свой файл кода вместо добавления ссылки на проект. –

+0

«Добавление с использованием System.Numerics дает ошибку и не решает проблему». – Blorgbeard

 Смежные вопросы

  • Нет связанных вопросов^_^