### 1.52.7 Εύρεση γραμμικών αναδρομών : reverse_rsolve

reverse_rsolve παίρνει σαν όρισμα ένα διάνυσμα v=[v0,…, v2n−1] των πρώτων 2n όρων μιας ακολουθίας (vn) που υποτίθεται ότι ικανοποιεί μια γραμμική αναδρομική σχέση βαθμού το πολύ n

xn*vn+k+⋯+x0*vk=0

όπου τα xj είναι n+1 άγνωστα.
reverse_rsolve επιστρέφει την λίστα x=[xn,…,x0] των xj συντελεστών (εάν το xn≠ 0 ανάγεται στο 1).

Με άλλα λόγια reverse_rsolve λύνει το γραμμικό σύστημα των n εξισώσεων:

xn*vn+⋯+x0*v0 | = | 0
| ⋮ |
xn*vn+k+⋯+x0*vk | = | 0
| ⋮ |
xn*v2*n−1+⋯+x0*vn−1 | = | 0

Ο πίνακας A του συστήματος έχει n γραμμές και n+1 στήλες :

A=[[v0,v1,…,vn],[v1,v2,…,vn−1],…,[vn−1,vn,…,v2n−1]]

reverse_rsolve επιστρέφει την λίστα x=[xn,…,x1,x0] με xn=1 και x λύση του συστήματος A* revlist(x), δηλαδή A επί την ανεστραμένη λίστα x.

Παραδείγματα

- Βρείτε μια ακολουθία που ικανοποιεί μια γραμμική αναδρομή βαθμού το πολύ 2 και της οποίας τα πρώτα στοιχεία είναι 1, -1, 3, 3.
  Είσοδος :
  reverse_rsolve([1,-1,3,3])
  Έξοδος :
  [1,-3,-6]
  Έτσι, x0=−6, x1=−3, x2=1 και η αναδρομική σχέση είναι

  vk+2−3vk+1−6vk=0

  Χωρίς την εντολή reverse_rsolve, θα γράφαμε τον πίνακα του συστήματος: [[1,-1,3],[-1,3,3]] και θα χρησιμοποιούσαμε την εντολή rref:
  rref([[1,-1,3],[-1,3,3]]).
  Η έξοδος είναι ο πίνακας [[1,0,6],[0,1,3]] και επομένως x0=−6 και x1=−3 (επειδή x2=1).
- Βρείτε μια ακολουθία που επαληθεύει μια γραμμική αναδρομή βαθμού το πολύ 3 και της οποίας τα πρώτα στοιχεία είναι 1, -1, 3, 3,-1, 1.
  Είσοδος :
  reverse_rsolve([1,-1,3,3,-1,1])
  Έξοδος :
  [1,(-1)/2,1/2,-1]
  Επομένως, x0=−1, x1=1/2, x2=−1/2, x3=1, και η αναδρομική σχέση είναι

  vk+3−

  1
  2

  vk+2+

  1
  2

  vk+1−vk=0

  Χωρίς την reverse_rsolve, θα γράφαμε τον πίνακα του συστήματος :
  [[1,-1,3,3],[-1,3,3,-1],[3,3,-1,1]] και θα χρησιμοποιούσαμε την εντολή rref :
  rref([[1,-1,3,3],[-1,3,3,-1],[3,3,-1,1]])
  Η έξοδος είναι ο πίνακας [1,0,0,1],[0,1,0,1/-2],[0,0,1,1/2]] και επομένως x0=−1, x1=1/2 και x2=−1/2 (επειδή x3=1).