2016-10-29 24 views
2

Sympyで抽象的な数学演算子を実装する簡単な方法があるのだろうかと思います。演算子とは、単に「演算子(a、b、c)」のような3つの値を入力または3つのインデックスとするオブジェクトを意味します。私は数学的演算子(ヒルベルト空間上)を指しており、プログラミングの文脈では演算子ではないことに注意してください。これらの値に応じて、私はこの種の2つの演算子を乗算する方法と浮動小数点数を乗算する方法をSympyに教えたいと思います。計算のある時点で、これらの演算子を他のものと置き換えたいと思っています。Sympyで抽象的な数学演算子/オブジェクトを操作する

これまでsympyがこのような抽象計算を提供しているかどうかはわかりませんでした。したがって、私はこれらのオブジェクトに対して新しいPythonクラスを作成し始めましたが、これはPythonでの私の限られた知識の範囲をはるかに超えています...新しいクラスを作成するより簡単な実装方法はありますか?

答えて

1

セイジには、あらかじめ構築された数学的構造が付いてくるので、SageMathとSymPyを見ることもできます。しかし、代数幾何学、代数のさまざまな領域、およびコンビナトリアルに目を向けて開発が進んでいます。私はそれがどの演算子代数を実装しているかは分かりません。

+0

あなたの答えをありがとう!実際、これらのオブジェクトは実際にヒルベルト空間の演算子であるという計算には重要ではありません。それは3つのパラメータを持つものである可能性があります。私はちょうどsympyに伝えたい:ここに3つのパラメータを持ついくつかのオブジェクトがあります...私の計算を行い、その計算のためにあなたに与えるルールのリストを検討してください... –

0

はい、これを行うことができます。ちょうどsympy.Functionのサブクラスを作成してください。あなたは関数が特定の引数を評価したい場合は、クラスの機能evalを定義nargs

class Operator(Function): 
    nargs = 3 

で引数の数を指定することができます。未評価のままにする必要がある場合は、Noneを返す必要があります。たとえば、すべての3つの引数が0のとき0に評価するために、あなたは

class Operator(Function): 
    @classmethod 
    def eval(cls, a, b, c): 
     if a == b == c == 0: 
      return Integer(0) 

を(あなたがevalを定義する場合nargsが必要とされていないことに注意)使用することがあります。

関連する問題