Ασκήσεις στην Numpy: Γραμμικά Συστήματα

Γενική οδηγία:

Αποθηκεύστε τα αρχεία που σας δίνονται στον υπολογιστή σας και χρησιμοποιώντας την υλοποίηση της python που προτιμάτε απαντήστε στην ερώτηση.

Numpy

Αν έχουμε έναν πίνακα Α σε μορφή ενός array της Numpy, π.χ., Α=np.array([[2,1],[1,2]]), για να πάρουμε ένα στοιχείο του Α, δίνουμε π.χ. Α[0,1], για να πάρουμε το 1 (1η γραμμή, 2η στήλη). Για να πάρουμε έναν υποπίνακα πρέπει να δώσουμε, π.χ. A[:,0:1], για να πάρουμε την πρώτη στήλη np.array([[2],[1]]). Αν δώσουμε Α[:,0] τότε δεν παίρνουμε 2-διάστατο array, αλλά το μονοδιάστατο np.array([2,1]). Αν θέλουμε να αλλάξουμε τα στοιχεία ενός υποπίνακα του Α, μπορούμε να το κάνουμε με μια ταυτόχρονη εκχώρηση, αλλά τα arrays πρέπει να έχουν την ίδια δομή, (shape). Έτσι αν x=np.array([[0],[5]]), τότε η εντολή A[:,0:1]=x, αλλάζει την πρώτη στήλη του A.
  1. Θεωρούμε έναν πίνακα \(2\times 2\), πχ $$A=\left(\begin{array}{cc} 2 & 1\\1&2\end{array}\right). $$ Λύστε τα γραμμικά συστήματα $$ Ax_1= \left(\begin{array}{c} 1\\0 \end{array}\right)\text { και } Ax_2= \left(\begin{array}{c} 0\\1 \end{array}\right) $$ Ο πίνακας Β με πρώτη στήλη τη \(x_1\) και δεύτερη τη \(x_2\), θα είναι ο αντίστροφος του A. Φτιάξτε μια συνάρτηση η οποία έχει ως όρισμα έναν πίνακα A \(2\times2\) και υπολογίζει τα δύο διανύσματα \(x_1\) και \(x_2\) και στη συνέχεια επιστρέφει τον πίνακα Β. Numpy8-find-inv.py
    	
  2. Τροποποιήστε την προηγούμενη συνάρτηση ώστε να μπορείτε να την εφαρμόσετε σε πίνακες \(n\times n\). Τώρα θα πρέπει να σχηματίσουμε τα \(n\) διανύσματα \(x_1,\dots,x_n\) λύνοντας τα γραμμικά συστήματα $$ Ax_1= \left(\begin{array}{c} 1\\0\\ \vdots\\0 \end{array}\right),\text { }\cdots, Ax_n= \left(\begin{array}{c} 0\\ \vdots\\0\\1 \end{array}\right). $$ Στη συνέχεια σχηματίζουμε τον πίνακα \(B\), με ανάλογο τρόπο όπως πριν. Φτιάξτε μια συνάρτηση η οποία έχει ως όρισμα έναν πίνακα A \(n\times n\) και υπολογίζει τα διανύσματα \(x_1,\dots, x_n\) και στη συνέχεια επιστρέφει τον πίνακα Β. Numpy8-find-inv2.py
    	
  3. Θέλουμε να ελέγξουμε αν ο πίνακας που δημιουργούμε στις προηγούμενες ασκήσεις είναι ο αντίστροφος που δίνει η συνάρτηση inv της Numpy. Φτιάξτε μια συνάρτηση η οποία να έλεγχει αν ισχύει η σχέση \(ΒA=AΒ=I\) και να επιστρέφει ανάλογα True ή False Numpy8-find-inv3.py