2017-08-16 7 views
1

J'essaie de faire une méthode qui va calculer un déterminant. Pour cela j'utilise la bibliothèque MathNet.Symbolics. Tout bon jusqu'à ce que je rencontre un petit problème. J'essayais d'obtenir le résultat final de la formule d'un déterminant et après avoir utilisé Infix.Format, je ne sais pas pourquoi, mais cela ne donne pas un résultat satisfaisant à ma. Au lieu du résultat final Cela me donne une équation quelque part entre les deux. Je pense que cela a quelque chose à voir avec le fait qu'une partie de l'équation se situe entre 2 parenthèses. Que dois-je faire pour obtenir le résultat final?Comment puis-je obtenir le résultat final en utilisant MathNet.Symbolics?

Voici mon code:

using System; 
using InputMath; 
using MathNet.Symbolics; 
using mns = MathNet.Symbolics.Expression; 

namespace MathWizard 
{ 
    class Determinants 
    { 
     //The final result 
     public static string fnalResult; 

     public static void BasicDeterminant() 
     { 
      //The inputs before assigning them to theyr specific variable 
      string[] inputs; 

      inputs = Console.ReadLine().Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries); 

      Double x1 = Convert.ToDouble(inputs[0]); 
      Double y1 = Convert.ToDouble(inputs[1]); 

      Double x2 = Convert.ToDouble(inputs[2]); 
      Double y2 = Convert.ToDouble(inputs[3]); 

      var x = mns.Symbol("x"); 
      var y = mns.Symbol("y"); 

      var firstResult = Infix.Format(x * x1 * 1 + x1 * y2 * 1 + x2 * y * 1 - (x1 * x2 * 1 + 1 * y2 * x + 1 * y * x1)); 

      Console.WriteLine(firstResult); 
      Console.ReadKey(); 

     } 
    } 
} 

C'est donc une entrée exemple:

Après l'entrée des numéros seront attribués comme suit:

x1 = 1; 
y1 = 3; 
x2 = 6; 
y2 = 4; 

Après avoir exécuté tout le code, la sortie est:

4 + x + 6 * y - (6 + 4 * x + y)

Après avoir résolu cette sortie, le résultat attendu réelle devrait être:

-2-3 * x + y * 7

+0

Pouvez-vous ajouter un exemple d'entrée et le résultat attendu correspondant? –

+0

J'ai édité la question en conséquence. Je vous remercie! – Noobie

Répondre

0

Math.NET Symbolics applique une simplification automatique, mais uniquement selon des règles strictes. C'est pourquoi certains termes sont simplifiés et réordonnés, mais la parenthèse n'est pas automatiquement développée.

Vous pouvez utiliser la routine Algebraic.Expand symbolique pour faire respecter l'expansion:

var expression = x * x1 * 1 + x1 * y2 * 1 + x2 * y * 1 - (x1 * x2 * 1 + 1 * y2 * x + 1 * y * x1); 
var expanded = Algebraic.Expand(expression); 
var firstResult = Infix.Format(expanded); 

firstResult a maintenant la valeur attendue (-2) + (-3)*x + 5*y.

NB: Je remarque qu'il serait plus agréable si cela aurait été formaté comme -2 - 3*x + 5*y. Je vais essayer d'améliorer cela dans la prochaine version.

+0

Cela a fonctionné comme un charme! Merci beaucoup pour votre temps et vos efforts. Passe une très bonne journée! – Noobie