¿Cómo convertir una ecuación en fórmulas para variables individuales?

.net c# expression-trees logic math

Pregunta

¿Cómo convertir una ecuación en fórmulas para variables individuales? Estoy pensando en una ecuación matemática como:

c^2 = a^2 + b^2

Me gustaría tener una función que pudiera procesar cualquier fórmula y darme las fórmulas de variables individuales. La ecuación anterior produciría lo siguiente:

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

También me gustaría comenzar con:

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

y salida:

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

He mirado los árboles de expresiones, pero tengo problemas para visualizar cómo funcionará esto. Me gustaría una solución .NET (C #, VB.NET o F #). ¿Algunas ideas?

Algo como:

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

Gracias.

Respuesta aceptada

La resolución de ecuaciones simbólicas es un problema complejo y no hay una solución cerrada para muchas ecuaciones. Escribir tu propio sistema de álgebra computacional no es trivial, pero puedes escribir un programa para una ecuación simple.

Tendrá que crear un árbol de expresiones de la cadena de entrada y definir reglas de transformación para manipular el árbol de expresiones. Para resolver una variable, puede realizar una búsqueda (guiada por buenas heurísticas para mantener el tiempo de ejecución aceptable) en el espacio del árbol de expresión que puede derivarse del árbol original mediante múltiples aplicaciones de reglas de transformación.


Respuesta popular

Este es un problema no trivial que intentas resolver ... No creo que tengas mucha suerte tratando de resolverlo por tu cuenta. Es mejor encontrar algún tipo de aplicación o biblioteca de terceros que lo haga. Hay una serie de programas que pueden hacer la operación de la que estás hablando, como Matlab y Maple. Además, una calculadora gráfica TI-89 puede hacerlo. Puede obtener los algoritmos que necesita de Octave , que es esencialmente una implementación de código abierto de Matlab.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow