Определение семейства переменных в sage

#variables #sage

#переменные #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 как переменные с чем-то, что не всегда возможно.

Есть ли какой-либо способ сообщить sage, что что-либо в виде [числа][number] является переменной? Или есть какой-нибудь способ определить целое семейство переменных в sage?

В идеальном мире я хотел бы, чтобы sage вел себя как mathematica, в том смысле, что все, что не определено, считается переменной, но я думаю, это слишком оптимистично.

Ответ №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);
  

Ответ №2:

Вам почти наверняка потребуется некоторая незначительная обработка строк; ответы

это лучше, чем все, что я могу сказать. Естественно, это возможно реализовать, но …

В идеальном мире я хотел бы, чтобы sage вел себя как mathematica, в том смысле, что все, что не определено, считается переменной, но я думаю, это слишком оптимистично.

Верно; действительно, это противоречит философии Python (и, следовательно, Sage) «явное лучше неявного»; долгое время шли споры о том, следует ли предопределять even x как символическую переменную (это так!).).

(И, честно говоря, учитывая, как часто я делаю опечатки, я бы действительно предпочел, чтобы не какая-либо произвольная вещь считалась символической переменной.)

Комментарии:

1. Я поражен, что нет собственного способа сделать это. В любом случае, фрагмент кода на форуме поддержки sage делает свое дело. Спасибо.

2. Пожалуйста. Я думаю, причина, по которой никогда не был реализован собственный способ, заключается в некоторых разногласиях по поводу того, как именно это будет происходить — например, индекс или просто конкатенация, не говоря уже о массиве …