2009-04-17 10 views
4

Comment convertir une équation en formules pour des variables individuelles? Je pense à une des équations mathématiques comme:Comment convertir une équation en formules pour des variables individuelles?

c^2 = a^2 + b^2 

Je voudrais avoir une fonction qui pourrait traiter une formule, et me donner les formules variables individuelles. L'équation ci-dessus produirait ce qui suit:

a = (c^2 - b^2)^0.5 
b = (c^2 - a^2)^0.5 
c = (a^2 + b^2)^0.5 

Je voudrais également commencer par:

a = (c^2 - b^2)^0.5 

et sortie:

b = (c^2 - a^2)^0.5 
c = (a^2 + b^2)^0.5 

J'ai regardé les arbres d'expression, mais je suis avoir de la difficulté à visualiser comment cela fonctionnera. Je voudrais une solution .NET (C#, VB.NET ou F #). Des idées?

Quelque chose comme:

public string[] GetFormulas(string equation) 
{ 
    ... 
} 

Merci.

Répondre

6

La résolution d'équations symboliques est un problème complexe et il n'existe pas de solution fermée pour de nombreuses équations. Ecrire votre propre Computer Algebra System n'est pas trivial, mais vous pouvez écrire un programme pour une équation simple.

Vous devrez construire un arbre d'expression de la chaîne d'entrée et définir des règles de transformation pour manipuler l'arbre d'expression.Pour résoudre une variable, vous pouvez alors effectuer une recherche (guidée par de bonnes heuristiques pour garder l'exécution acceptable) sur l'arbre d'expression qui peut être dérivé de l'arbre original par plusieurs applications de règles de transformation .

0

Puisque c^2 = a^2 + b^2 n'est pas une expression en C#, vous êtes sur la mauvaise voie. Oubliez les arborescences d'expression .NET et créez les vôtres.

Vous devez décrire les algorithmes requis pour effectuer ces transformations et les données nécessaires pour décrire une équation. Vous constaterez que ce que vous obtenez est très différent d'un arbre d'expression .NET.

1

Ceci est quelque chose que vous voudrez probablement regarder en utilisant une bibliothèque mathématique. Pour .NET, Math.NET semble être l'option la plus complète (je ne sais pas si elle est stable, mais elle est certainement très complète). La bibliothèque pour effectuer une manipulation symbolique devrait être capable de gérer le problème spécifique que vous avez posé ici. Pour être honnête, écrire ceci à partir de zéro ne devrait pas être trop difficile, mais si vous n'êtes pas très familier avec les arbres d'expression et que vous ne savez pas comment aborder la tâche, je recommanderais quand même d'utiliser un existant. bibliothèque de maths, soit Math.NET ou tout autre décent qui fait de l'algèbre symbolique.

+1

Notez également que réarranger simplement une équation arbitraire donnée est un * lot * plus facile (bien que cela puisse être raisonnablement difficile) que de le résoudre réellement. Si vous voulez résoudre des équations complexes, vous aurez besoin de quelque chose comme le paquet Mathematica en général. – Noldorin

+0

Je pourrais enfin suggérer que vous utilisiez un langage comme F # si vous le connaissez et que vous allez écrire le code important vous-même (plutôt que d'utiliser une bibliothèque). Les langages fonctionnels sont largement considérés comme particulièrement adaptés aux applications mathématiques et scientifiques. – Noldorin

+0

Math.NET ne fonctionnera pas pour moi à cause de la GPL. –

4

Ceci est un problème non-trivial que vous essayez de résoudre ... Je ne pense pas que vous aurez beaucoup de chance d'essayer de le résoudre par vous-même. Mieux vaut trouver une sorte d'application ou de bibliothèque tierce qui le fait. Il y a un certain nombre de programmes qui peuvent faire l'opération dont vous parlez, comme Matlab et Maple. En outre, une calculatrice graphique TI-89 peut le faire. Vous pouvez obtenir les algorithmes dont vous avez besoin de Octave, qui est essentiellement une implémentation Open Source de Matlab.

1

Traiter des équations de manière symbolique et non numérique n'est certainement pas une tâche facile. Je pense que la façon la plus simple pour vous serait de simplement utiliser Mathematica, Maple ou similaire dans les coulisses et de les laisser travailler dur pour vous.

2

Votre seul choix est de le forcer brutalement en appliquant toutes les techniques connues. Dans les équations d'algèbre simples comme vous l'avez fait plus haut, cela peut être suffisant, mais des problèmes plus complexes nécessiteront des solutions de plus en plus complexes. Bref, ce ne sera pas facile.

Une fois que vous avez compris comment analyser le texte en symboles, il pourrait être assez facile de créer une application qui permet de déterminer que

c^2 = a^2 + b^2 

peuvent être substitués comme

c = (a^2 + b^2)^.5 

mais, qu'en

cos(c) = sin(a^2/b) - b^(a/sin(b)) 

Pire encore, vous avez des intégrations insolubles, et l'algèbre abstraite ... Vous ' Il va falloir tracer la ligne de la complexité quelque part, sinon vous finirez par construire un autre Maple.

+0

Je suis d'accord. La plupart des équations que j'utiliserai seront l'algèbre de base et la géométrie de base. Certains Trig, mais très peu. –

0

En plus de tout ce qui a déjà été dit, vous pouvez jeter un oeil aux méthodes numériques.

Il existe des algorithmes pour approcher la (les) solution (s) d'une équation. Parce que la plupart d'entre eux ne seront pas aussi faciles (ou même impossibles) à résoudre exactement.

0

Un vilain problème en général. Pour les expressions polynomiales de bas niveau, ce n'est pas trop difficile. Pour les problèmes linéaires, vous avez juste besoin d'un analyseur et d'un peu de post-traitement. Mais même une expression simple à écrire pourrait être moins que triviale. Par exemple, que ferez-vous avec

x^5 + y^5 - xy + 1 = 0 

Résolution pour l'un de x ou y en termes de l'autre signifie que vous devez résoudre pour les racines d'un polynôme de coefficient non constant de l'ordre 5. Il sera impossible de faire en général. Pire, introduisez des fonctions trigonométriques ou n'importe quelle fonction spéciale dans le mixage, et cela vous forcera à réécrire Mathematica avant d'avoir terminé.

Questions connexes