수학적 표현을 평가하고, 음모를 구분하고, 차별화해야하는 수치 해석 할당 작업을하고 있습니다. 다른 것들 중에. Java으로 표현식 트리를 구현했습니다.수식 표현 트리를 축소 된 형태로 변환하는 방법은 무엇입니까?
지금까지 표현 트리를 만들고 라텍스로 표시하고 평가하고 플롯하고 파생물을 얻을 수 있습니다. 트리의 복합 함수에 의해 구현 된 인터페이스는 다음과 같습니다. Function[] child();
void addChild(Function chld);
double evaluate(HashMap subMap);
String toLatex();
int precedence();
Function derivative();
내가 구현 한 코드는 Constant, Variable, Add, Subtract, Multiply, Divide, Power, Sine, Cosine, Ln
입니다. 나는 몇 가지 기본적인 기능을 구별 할 때
지금, 나는 비 감소 형태로 그것을 얻을 :
파생 상품이 가장 일반적인 방식으로 구현되기 때문이다 d/dx(x^2) ===> x^2 * (1 * 2/x + 0 * ln(x))
.
내가 생각한 해결책은 f
의 자식이 주어진 각 노드 f
의 구성에서 자식을 재귀 적으로 줄이고 순진한 재구성을 수행하는 것입니다. 그러한 재건 후에, 아이들은 f
과 관련하여 "함께"감소합니다. 0 * X, 나무가 같아야 식 주어진 예
:
* /\ 0 x
이 경우 자식 중 하나가 제로 상수는 * 노드 제로 일정하게 . 물론 아이들을 버리게됩니다.
0
등 다른 모든 승산의 경우에도 마찬가지입니다. 이것은 필자를 대신하여 많은 분석이 필요하며 모든 경우를 다루지는 않습니다 - 곱셈 만이 필요한 기능이 아니라는 것을 명심하십시오.
주어진 작업 : 표현 트리를 사용하면 기본 감소를 어떻게 할 수 있습니까?이 문제에 대한 해결책을 제시하는 링크 나 논문을 참조 할 수 있다면 (바람직하게는 우아한 OO 방식으로) 또는 이전에 태클 한 적이 있다면 이 실제로이 될 것입니다.
실제로 많은 규칙을 구현하고 모든 사례를 망각해야합니다. 여기서 당신이 필요로하는 것은 이전에 (나 아닌) 이것을 한 사람들이 경험 한 것이며, 당신에게 합리적인 ** OOP 디자인 ** (예 : 전략, 방문자, 복합체 등을 결합)을 말할 수 있습니다. IMHO라는 함수형 언어를 사용하는 것이 더 낫습니다. –
빠른 응답을 주셔서 감사합니다. 그게 내가 찾는거야 ** "전에 이런 짓을 한 사람들"**. Java 이외의 것을 사용할 수 없습니다. :) – MSiddeek
다소 어려운 문제를 선택했습니다 (또는 수작업으로 처리되었습니다). 이 http://issc.uj.ac.za/symbolic/symbolic.html이 도움이 될 수 있습니다. –