我正在尝试将我的脚本从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,在某种意义上说,任何未定义的东西都被视为变量,但我想这太乐观了。
答案 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);