2014-09-17 1 views
0

Учитывая первый вектор строки R0 = [a0,a1,...,a(n-1)] и конкретный вектор V, я хотел бы создать «векторную циркулянтную матрицу» в SAGE, которая будет построена следующим образом.Как создать векторную циркулянтную матрицу в Sage?

Строки матрицы будет

R0=R0; R1=p(R0); R2=p(R1), ..., R(n-1)=p(R(n-2)) 

где p является карта, которая принимает, например, строки Ri = [r0,r1,...,r(n-1)] и делает его [0, r0, r1,...,r(n-2)]+r(n-1)*V

Обратите внимание, что я пытался написать все, что в языке Sage. И это не похоже на классические циркулянтные, теплицкие или ганкелевые матрицы.

(п, R0, а вектор V будет определяться пользователем в начале)

Как написать простую программу, которая даст мне матрицу, определенную выше?

ответ

0

Вот функция:

def f(r,v): 
    def p(x): 
     return vector([0]+list(x[:-1r])) + x[-1r]*v 
    m = [r] 
    for _ in xrange(len(r)-1r): 
     m.append(p(m[-1r])) 
    return matrix(m) 

Пример:

sage: r = vector(ZZ,(0, 1, 2, 3,)) 
sage: v = vector(ZZ,(3, 5, 7, 9,)) 
sage: f(r,v) 
[ 0 1 2 3] 
[ 9 15 22 29] 
[ 87 154 218 283] 
[ 849 1502 2135 2765] 
+0

Действительно оценил, чтобы получить ответ так быстро, спасибо очень много. Это, похоже, работает с векторами и на ZZ. –

+0

Я беру эти векторы как список коэффициентов полиномов над конечными полями, можете ли вы также изменить эту функцию для этого? Потому что здесь мы берем векторы как «списки»? –

+0

Ах. Я вижу, что просто написал r = vector (L) для списка L, и он сработал. Большое спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^