0

さて、私は文字列に数式を持っています

String myExpression = "2-3*(cos(x)+sen(x)-exp(-x))*(sen(2x)+1/(cos(x)))";

そして、式を(文字列で)取得する方法を知りたいです:

2-3*cos(x)*sen(2x)-3*cos(x)/cos(x)-3*sen(x)*sen(2x)-3*sen(x)/cos(x)+3*exp(-x)*sen(2x)+3*exp(-x)/cos(x)

つまり、分配特性を適用しますが、計算値は適用しません。

誰でも私を助けることができますか?

4

1 に答える 1

0

数式を別の形式に変換する場合は、最初に後置/前置式に変更することをお勧めします(< リンクでは、「中置」に戻す方法も説明されています)。あなたの関数(例:sin(x)定数として))。参考文献を見つけるためのソースがたくさんあります。

簡単な Infix/Postfix Calculator へのリンクがある ので、試したことがない場合は試してみることができます。

次に中置に戻しますが、今回は掛け算と割り算を分配します

例えば。

   *
  / \
 A   +
    / \
   B   /
      / \
     C   D

Infix: A*(B+C/D)
Postfix: ABCD/+*

ABCD/+*
C and D division first (distribute)                >>> C/D
B and C/D addition(addition,nothing to distribute) >>> B+C/D
A and B + C/D multiplication (distribute)          >>> A*B+A*C/D

したがって、一般的に言えば、足し算と引き算の文字列を連結するだけです。
しかし:

  1. 乗算すると、 文字列が最初とA 最後に追加されますまたは"A*"'+''-'

  2. で除算する場合は 、最後とすべてのまたはの前に文字列をB 追加します。"/B"'+''-'

これはすべての単純な式をカバーする必要があると思います。式が広範囲に分岐し、完全には考えていない場合は、さらにいくつかのケースが必要になる場合があります (または必要ない場合もあります)。フィードバックをいただければ幸いです。

于 2013-04-10T00:41:59.333 に答える