【问题标题】:Defining a family of variables in sage在 sage 中定义变量族
【发布时间】:2016-10-22 18:24:44
【问题描述】:

我正在尝试将我的脚本从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 中的多项式有一个名为 coefficients 的类函数,它返回系数,还有一个名为 mononomials 的类函数,它返回没有系数的单项式。将这两个列表相乘,得到我想要的结果。

问题在于,要使其正常工作,我需要将所有 a 显式声明为变量,而这并不总是可行的。

有什么方法可以告诉 sage 任何形式为 a[number][number] 的东西都是变量吗?或者有什么方法可以在 sage 中定义整个变量族?

在一个完美的世界里,我想让 sage 表现得像数学一样,因为任何没有定义的东西都被认为是一个变量,但我想这太乐观了。

【问题讨论】:

    标签: variables sage


    【解决方案1】:

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

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

    在一个完美的世界里,我想让 sage 表现得像数学一样,因为任何没有定义的东西都被认为是一个变量,但我想这太乐观了。

    是的;事实上,这违背了 Python(以及 Sage 的)“显式胜于隐式”的哲学;关于是否应该将 x 预定义为符号变量(它是!),长期以来一直存在争论。

    (说实话,考虑到我打错字的频率,我真的宁愿将任何任意事物视为符号变量。)

    【讨论】:

    • 我很惊讶没有本地方法可以做到这一点。无论如何,sage-support 论坛中的代码 sn-p 可以解决问题。谢谢。
    • 不客气。我认为没有实现原生方式的原因是因为对它的确切发生方式存在一些分歧 - 例如下标或只是串联,更不用说数组...
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2013-01-05
      • 2018-06-10
      • 2011-09-27
      • 2019-11-11
      • 2019-04-18
      • 2012-10-18
      相关资源
      最近更新 更多