在圣人中定义一系列变量

时间:2016-10-22 18:24:45

标签: variables sage

我正在尝试将我的脚本从mathematica迁移到sage。我陷入了一些看似基本的事情。

我需要使用任意大型多项式来表示

形式

a00 + a10 * x + a01 * y + a20 * x ^ 2 + a11 * x * y + ...

我只考虑x和y的多项式,我需要给出这样的多项式P来得到它的单项式列表。

例如,如果P = a20 * x ^ 2 + a12 * x * y ^ 2 我想要一个表格列表[a20 * x ^ 2,a12 * x * y ^ 2]。

我发现sage中的多项式有一个叫做系数的类函数,它返回系数,还有一个叫做单项式的类函数,它返回没有系数的单项式。将这两个列表相乘,得出我想要的结果。

问题在于,为了实现这个目的,我需要明确地声明所有a作为变量,这是不可能的。

有没有办法告诉圣人,[数字] [数字]的任何形式都是变量?或者有没有办法在圣人中定义一整套变量?

在一个完美的世界里,我想让圣人表现得像mathematica,在某种意义上说,任何未定义的东西都被视为变量,但我想这太乐观了。

2 个答案:

答案 0 :(得分:2)

你几乎肯定需要一些非常小的字符串处理;答案

比我能说的更好。当然,这可以实现,但是......

  

在一个完美的世界里,我想让圣人表现得像mathematica,在某种意义上说,任何未定义的东西都被视为变量,但我想这太乐观了。

真;事实上,这违背了Python(以及因此Sage的)哲学的明确优于隐含的&#34 ;;很长一段时间都存在争论,即使x是否应该被预定义为一个符号变量(它是!)。

(说实话,考虑到我经常打字错误,我真的宁愿有任意事物被视为符号变量。)

答案 1 :(得分:1)

我的回答并没有完全解决你的问题,但我发现定义变量的一个技巧是使用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

以后你可以将它们定义为solve()的变量,例如:

sage: variables=[SR(c[i]) for i in srange(0,len(eq_list))];
sage: solution = solve(eqs,variables);