### 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 −6 vk =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).