Τον τελευταίο καιρό έχω αρχίσει να διαβάζω ένα πολύ ωραίο βιβλίο σχετικά με εφαρμογές της γραμμικής άλγεβρας. Είμαι στο λήμμα για τους αντιστρέψιμους πίνακες, αλλα το βασικό μου πρόβλημα είναι ότι δεν έχω πρόσβαση σε λογισμικό όπως το Matlab, γιατί δυστυχώς δεν έχω βρει μέχρι τώρα κάπου ν' αγοράσω μία νόμιμη άδεια και εδώ που τα λέμε, η καραντίνα δεν βοηθάει.
΄Έτσι λοιπόν για να μπορέσω προς το παρόν να κάνω τη δουλειά μου όρισα ένα κατηγόρημα σε Prolog που παίρνει ως είσοδο έναν τετραγωνικό πίνακα Α 2x2 και επιστρέφει τον αντίστροφό του, δηλ. τον Α εις την -1. Χρησιμοποιώ τον γνωστό ορισμό που λέει ότι ο αντίστροφος πίνακας ενός τετραγωνικού πίνακα Α ισούται με το αντίστροφο της ορίζουσας του Α επί τον προσηρτημένο πίνακα του Α. Η έκπληξη είναι ότι το κατηγόρημα δουλεύει σωστά και έτσι είπα ν' αφήσω τον κώδικα εδώ μέσα μήπως κανείς τον χρειάζεται. Αν ο πίνακας Α δεν είναι αντιστρέψιμος (δηλ. αν detA=0), τότε απλά το κατηγόρημα απαντά false.
antistr([[A,B],[C,D]], [[Neo_A,Neo_B],[Neo_C,Neo_D]]) :-
Orizousa is A*D-B*C,
Orizousa \= 0,
Antistr_Orizousa is 1/Orizousa,
Neo_A is Antistr_Orizousa*D, Neo_B is Antistr_Orizousa*(-B),
Neo_C is Antistr_Orizousa*(-C), Neo_D is Antistr_Orizousa*A.
Όπως βλέπετε ο πίνακας πρέπει να εισάγεται κατά γραμμή με ένθετες λίστες, ενώ το όρισμα εξόδου πρέπει να είναι μία νέα λίστα που μετά την εκτέλεση του κώδικα περιέχει τον ζητούμενο αντίστροφο πίνακα.
Εκείνο που θα ήθελα από εσάς είναι αν γνωρίζει κάποιος να μου πει τι είδους αναδρομικό ορισμό θα πρέπει να γράψω, ώστε το πρόγραμμα να δουλεύει και με πίνακες μεγαλύτερους από 2x2. Ο υπολογισμός της ορίζουσας σε πίνακες 2x2 είναι κάτι πολύ απλό, δυστυχώς όμως όταν οι διαστάσεις μεγαλώνουν, τα πράγματα γίνονται αρκετά πιο δύσκολα κι αυτή τη στιγμή σπάω το κεφάλι μου αλλά δεν φαίνεται να μπορώ να βρω έναν σωστό ορισμο. Άν τύχει αυτό το μήνυμα να το διαβάσει κάποιος που δεν ασχολείται με την Prolog, ας μου πει απλά πού θ' αγοράσω το Matlab.
Ερώτηση
White_Cat 375
Αγαπητοί φίλοι,
Τον τελευταίο καιρό έχω αρχίσει να διαβάζω ένα πολύ ωραίο βιβλίο σχετικά με εφαρμογές της γραμμικής άλγεβρας. Είμαι στο λήμμα για τους αντιστρέψιμους πίνακες, αλλα το βασικό μου πρόβλημα είναι ότι δεν έχω πρόσβαση σε λογισμικό όπως το Matlab, γιατί δυστυχώς δεν έχω βρει μέχρι τώρα κάπου ν' αγοράσω μία νόμιμη άδεια και εδώ που τα λέμε, η καραντίνα δεν βοηθάει.
΄Έτσι λοιπόν για να μπορέσω προς το παρόν να κάνω τη δουλειά μου όρισα ένα κατηγόρημα σε Prolog που παίρνει ως είσοδο έναν τετραγωνικό πίνακα Α 2x2 και επιστρέφει τον αντίστροφό του, δηλ. τον Α εις την -1. Χρησιμοποιώ τον γνωστό ορισμό που λέει ότι ο αντίστροφος πίνακας ενός τετραγωνικού πίνακα Α ισούται με το αντίστροφο της ορίζουσας του Α επί τον προσηρτημένο πίνακα του Α. Η έκπληξη είναι ότι το κατηγόρημα δουλεύει σωστά και έτσι είπα ν' αφήσω τον κώδικα εδώ μέσα μήπως κανείς τον χρειάζεται. Αν ο πίνακας Α δεν είναι αντιστρέψιμος (δηλ. αν detA=0), τότε απλά το κατηγόρημα απαντά false.
Όπως βλέπετε ο πίνακας πρέπει να εισάγεται κατά γραμμή με ένθετες λίστες, ενώ το όρισμα εξόδου πρέπει να είναι μία νέα λίστα που μετά την εκτέλεση του κώδικα περιέχει τον ζητούμενο αντίστροφο πίνακα.
Εκείνο που θα ήθελα από εσάς είναι αν γνωρίζει κάποιος να μου πει τι είδους αναδρομικό ορισμό θα πρέπει να γράψω, ώστε το πρόγραμμα να δουλεύει και με πίνακες μεγαλύτερους από 2x2. Ο υπολογισμός της ορίζουσας σε πίνακες 2x2 είναι κάτι πολύ απλό, δυστυχώς όμως όταν οι διαστάσεις μεγαλώνουν, τα πράγματα γίνονται αρκετά πιο δύσκολα κι αυτή τη στιγμή σπάω το κεφάλι μου αλλά δεν φαίνεται να μπορώ να βρω έναν σωστό ορισμο. Άν τύχει αυτό το μήνυμα να το διαβάσει κάποιος που δεν ασχολείται με την Prolog, ας μου πει απλά πού θ' αγοράσω το Matlab.
Σας ευχαριστώ πολύ,
Ο Άσπρος Γάτος
Επεξ/σία από White_CatΣύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
13 απαντήσεις σε αυτή την ερώτηση
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Εγγραφείτε για έναν νέο λογαριασμόΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα