def solve(a, b, c, d, e, f): D = a*d-b*c # Υπολογίζουμε τις 3 ορίζουσες Dx = e*d - b*f Dy = a*f - e*c if abs(D)>1e-6: # Αν η ορίζουσα D δεν είναι 0 (πάντα το ελέγχουμε προσεγγιστικά) x = Dx/D; y = Dy/D return [x, y, "nonsingular"] if abs(Dx) > 1e-6 or abs(Dy) > 1e-6: # Σύστημα είναι αδύνατο σε αυτή την περίπτωση return [0, 0, "impossible"] # Από δω και κάτω και οι τρεις ορίζουσες είναι (προσεγγιστικά 0). Θα πρέπει να ελέγξουμε και τους # συντελεστές για να βγάλουμε συμπέρασμα. # Πρώτα φροντίζουμε ώστε η δεύτερη γραμμή του συστήματος να έχει τουλάχιστον ένα μη μηδενικό συντελεστή. if abs(a)<1e-6 and abs(b)<1e-6 and abs(e)<1e-6: # Ελέγχουμε αν η πρώτη γραμμή είναι όλα μηδενικά firstrowzero=True else: firstrowzero=False if abs(c)<1e-6 and abs(d)<1e-6 and abs(f)<1e-6: # Ελέγχουμε αν η δεύτερη γραμμή είναι όλα μηδενικά secondrowzero=True else: secondrowzero=False if firstrowzero and secondrowzero: # Αν όλα είναι μηδενικά τότε τα πάντα είναι λύση return [0, 0, "all"] # Τα πάντα είναι λύση if secondrowzero: # Αν η δεύτερη γραμμή είναι όλο μηδέν τότε την εναλλάσουμε με την πρώτη ώστε να ξέρουμε από # δω και κάτω ότι υπάρχει κάποιο μη μηδενικό στη δεύτερη γραμμή. Αυτό δεν αλλάζει φυσικά τις λύσεις. a, c = c, a; b, d = d, b; e, f = f, e if abs(c)>1e-6: # Αν το c δεν είναι 0 L = a/c # Για να μην είναι το σύστημα αδύνατο πρέπει η πάνω γραμμή του συστήματος να είναι πολλαπλάσιο # της κάτω γραμμής. Ο λόγος (άνω προς κάτω) είναι το L. Παρακάτω ελέγχουμε αν ο ίδιος λόγος # ισχύει και για τις άλλες δύο στήλες, αλλά προσέχουμε μη διαιρέσουμε μήπως και είναι 0 τα d ή f. if abs(b-L*d)<1e-6 and abs(e-L*f)<1e-6: return [ -d/c, f/c, "indefinite-X-from-Y"] # Επιστρέφουμε στην 1η θέση το συντελεστή του Y, A, και # στη 2η θέση το σταθερό όρο, B, οπότε η γενική λύση # είναι X = A Y + B, με Y οτιδήποτε. else: # αδύνατο σύστημα return [0, 0, "impossible"] if abs(d)>1e-6: # Αν το d δεν είναι 0, κάνουμε αντίστοιχα ό,τι κάναμε ακριβώς από πάνω L = b/d if abs(a-L*c)<1e-6 and abs(e-L*f)<1e-6: return [ c/d, -f/d, "indefinite-Y-from-X"] # Επιστρέφουμε στην 1η θέση το συντελεστή του X, A, και # στη 2η θέση το σταθερό όρο, B, οπότε η γενική λύση # είναι Y = A X + B, με X οτιδήποτε. else: # αδύνατο σύστημα return [0, 0, "impossible"] # Εδώ που φτάσαμε έχουμε c=d=0 και f !=0. Αυτό είναι αδύνατο. return [0, 0, "impossible"]