2012-03-16 13 views
1

式の派生を表現する新しいツリーを返すメソッドを実装しようとしています。私は、私の処分で正確なコピーだけでなく、オリジナル表現ツリーも持っています。私は、ノードが定数または数である場合の微分規則と基底の場合を使って、これを再帰的に行うことができることを知っています。しかし、私は、新しい表現をどのように格納するかについて頭を落とすのに問題があります。派生式ツリーJava

正確な回答は必要ありませんが、新しい表現を保存する方法に関するいくつかのガイダンスや推奨事項はありますか?

図が役立ちます、ありがとうございます!私はそこに着いていますが、まだ作業コードの実装に問題があります。

if(this.getValue().equals("mult")){ 
     this.deepCopy().setValue("add"); 
     this.deepCopy().getRightChild().setValue("mult"); 
     this.deepCopy().getLeftChild().setValue("mult"); 
     // not sure what to recursively here! 

     } 
+0

あなたは何をしていますか、これまでにどのようなコードをお持ちですか?あなたはプログラミング言語であなたの質問にタグを付けませんでした。 – Kaz

答えて

0

明白な答えは、式の記号操作用に設計された言語を使用することです。ヒント:それは1960年より前に始まり、それは4文字の単語です。

ちょっとこれをチェックアウト、それはこの分野でいくつかの新しい技術があります表示されます。http://www.autodiff.org/

http://www.cs.berkeley.edu/~fateman/papers/ADIL.pdf

+0

これはJavaで記述されているはずです。 – user1205722

+1

私のお悔やみ。 :) – Kaz

+0

私は本当にPythonのリンクに感謝しますが、その言語は残念なことに絶対に外国人です! – user1205722

0

基本的にはオリジナルのツリーのルートから開始し、ダウンあなたの方法を動作し、ためにデリバティブを計算しますノードが必要になったとき。 'とG:例えば、D FG = f'g + FG以降「

  ....     .... 
      \      \ 
       *      + 
      /\   ->  /\ 
      F G     * * 
           /\/\ 
           F' G F G' 

そして、あなたはFを得るか、そこから、乗算ノードのためにあなたは、出力の積の和をだろうか」?私はAPIが少し見えると言わなければならないけれども

Node right = this.deepCopy().getRightChild(); 
Node left = this.deepCopy().getLeftChild(); 
right.setLeftChild(derivative(this.getLeftChild())) // F' 
right.setRightChild(this.getRightChild()))   // G 
left.setLeftChild(this.getLeftChild())    // F 
left.setRightChild(derivative(this.getRightChild()))) // G' 

:基本的にはあなたがその遠く、あなただけの乗算のためのサブツリーに記入する必要はありませんしている:それは

アップデートでどこ再帰キックです奇妙な。 deepCopyは常に同じオブジェクトを返しますか?その名前は毎回新しいコピーを作ることを示唆しています。

+0

私のコメントにコードを正しく配置する方法を理解できませんでしたが、私の元の質問が更新されました。私は完全にオフですか? – user1205722

+0

が更新されました。コメントは広範な書式設定を許可しません。 – Joni