2016-10-22 5 views
3

私はスクリプトをmathematicaからsageに移行しようとしています。私はそれが初歩的なものに詰まっている。sageで変数ファミリを定義する

私は

A00 + A10 * X + A01 * yを+ A20 * X^2 + A11 * X * Y + ...

I形で言って任意の大きさの多項式で作業する必要があります多項式をxとyについてのみ考えると、その単項式のリストを得るには多項式Pを与えなければならない。

たとえば、P = a20 * x^2 + a12 * x * y^2の場合 [a20 * x^2、a12 * x * y^2]という形式のリストが必要です。

Iは、セージにおける多項式の係数及び係数なし単項式を返し単項式と呼ばれるクラスの関数を返す係数と呼ばれるクラスの機能を有することを考え出しました。これらの2つのリストを掛け合わせると、私が望む結果が得られます。

問題はこれが機能するために、私は常に可能ではない何かであると明示的に変数としてすべてのを宣言する必要があるということです。

は、フォーム[番号]のもの[番号]が変数であることをセージを伝えるための方法はありますか?あるいは、セージで変数のファミリー全体を定義する方法はありますか?完璧な世界では

私は定義していないものを変数と考えられているという意味で、セージは、Mathematicaのように振る舞うしたいと思いますが、私は、これはあまりにも楽観的であると思います。

答えて

2

あなたはほぼ確実にいくつかの非常にマイナーな文字列処理が必要になります。答え

は、私が言うことができるものよりも優れています。当然のことながら、これは実現することが可能であるが、完璧な世界では...

私は定義していないものを変数と考えられているという意味で、セージは、Mathematicaのように振る舞うしたいと思いますが、私はこれを推測しますあまりにも楽観的です。

真。確かに、それはPythonの(そしてそれゆえSageの) "明示的なものは暗黙的なもの"の哲学に反するものです。 xも記号変数(それは!)としてあらかじめ定義されるべきかどうかについて、長い間議論があった。

(そして正直、私はタイプミスをする頻度を考えると、私は本当にむしろないは任意のものをシンボリック変数と見なされる必要があると思います。)

+0

私はこれを行うにはネイティブな方法が存在しないことを驚いています。とにかく、sage-supportフォーラムのコードスニペットはそのトリックを行います。ありがとうございました。 – tst

+0

ようこそ。ネイティブな方法がこれまでに実装されていなかった理由は、それがどのように起こるかについてのいくつかの不一致のためであると思います。添字または連結だけでなく、配列を言及する... – kcrisman

1

私の答えは完全にあなたの質問が、1つのトリックIに対処されていません変数を定義するのがPolynomialRing()を使用することでした。

sage: R = PolynomialRing(RR, 'c', 20) 
sage: c = R.gens() 
sage: pol=sum(c[i]*x^i for i in range(10));pol 
c9*x^9 + c8*x^8 + c7*x^7 + c6*x^6 + c5*x^5 + c4*x^4 + c3*x^3 + c2*x^2 + c1*x + c0 
例えば、()変数は解決するために、それらを定義することができます上の

以降:たとえば

sage: variables=[SR(c[i]) for i in srange(0,len(eq_list))]; 
sage: solution = solve(eqs,variables); 
関連する問題