2016-10-22 3 views
3

Я пытаюсь перенести мои скрипты из математики в мудрец. Я застрял в чем-то, что кажется элементарным.Определение семейства переменных в sage

мне нужно работать со сколь угодно большими полиномами сказать о форме

a00 + a10 * х + a01 * у + a20 * х^2 + a11 * х * у + ...

I рассмотрим их многочлены только от х и у и мне нужно дать такой многочлен Р, чтобы получить список его одночленов.

Например, если P = a20 * x^2 + a12 * x * y^2 Я хочу список формы [a20 * x^2, a12 * x * y^2].

Я выяснил, что многочлен в шалфе имеет функцию класса, называемую коэффициентами, которая возвращает коэффициенты и функцию класса, называемую мономами, которая возвращает мономы без коэффициентов. Умножая эти два списка вместе, дает результат, который я хочу.

Проблема в том, что для этого нужно явно объявить все переменные a в качестве переменных с тем, что не всегда возможно.

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

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

ответ

2

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

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

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

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

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

+0

Я поражен, что не существует собственный способ сделать это. Во всяком случае, фрагмент кода в форуме поддержки мудрецов делает трюк. Спасибо. – 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);