2016-10-22 44 views
3

我正在尝试将我的脚本从mathematica迁移到sage。我陷入了一些看起来很简单的事情。在sage中定义一个变量族

我需要任意大的多项式工作说形式的

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

我仅考虑x和y上的多项式,并且我需要给出这样一个多项式P来得到其单项式的列表。

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

我发现一个在鼠尾草中的多项式有一个称为系数的类函数,它返回系数和一个称为单项函数的类函数,它返回没有系数的单项式。将这两个列表相乘,得出我想要的结果。

问题是,为了这个工作,我需要显式声明所有的a作为变量是不总是可能的东西。

有没有什么办法可以告诉贤者,任何形式的[数字] [数字]是一个变量?或者有什么方法可以在圣人中定义整个变量族?

在一个完美的世界中,我想让圣人的行为像数学一样,任何不是定义的东西都被认为是一个变量,但我认为这太乐观了。

回答

2

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

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

在一个完美的世界,我想作圣人行为像数学,在这个意义上,任何事情不是定义被认为是一个变量,但我想这太乐观了。

确实;事实上,这违背了Python的(因此是Sage的)“明显优于隐含”的哲学;关于是否应该将x预定义为符号变量(它是!),很长一段时间都有争论。

(而且说实话,我给予多久做错别字,我真的宁愿不任意一点被认为是象征性的变量)。

+0

我很惊讶,有做这种没有原生的方式。无论如何,sage-support论坛中的代码片段都有诀窍。谢谢。 – tst

+0

不客气。我认为没有实行本土方式的原因是因为它会如何发生分歧 - 例如,下标或者只是连接,更不用说数组... – kcrisman

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 

和以后你可以将它们定义为变量来解决(),例如:

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