Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.
3 λεπτά πριν, pmav99 είπε

Αν οι περισσότερες εξισώσεις έχουν όντως μια λύση, τότε συνήθως η πρώτη λύση που θα βρεις θα είναι τις περισσότερες φορές η «σωστή». Και αν δεν είναι σύντομα θα την πετύχεις

Αφού βρεις μία λύση, το να τεστάρεις πόσες εξισώσεις ικανοποιεί είναι vectorized operation. Πχ σε python + numpy:


import numpy as np

# Αυτά είναι τα νούμερα που υπαρχουν αριστερά του ίσον
coefficients = np.array([
    [2, 2, 1],   # satisfied
    [1, 1, 2],   # satisfied
    [1, 2, 3],   # satisfied
    [1, 2, 2],   # not satisfied
    [1, 2, 3],   # not satisfied 
])

# Αυτή είναι τα νούμερα που υπάρχουν δεξιά του ίσον. Τα δύο τελευταία δεν ικανοποιούν την εξίσωση
expected = np.array([ 2, 4, 8, 3, 2])

# Αυτή είναι η λύση που βρήκες (με Gauss ή με ό,τι χρησιμοποιείς)
solution = np.array([-2, 2, 2])

results = coefficients * solution
unsolved = coefficients[results.sum(axis=1) != expected]

print(unsolved)
# [[1 2 2]
#  [1 2 3]]

Ενδιαφέρον..θα το δοκιμάσω με την 1η ευκαιρία..

  • Απαντ. 42
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Συμφωνω με οσα ειπωθηκαν. Με 2^Ν πληθος συστηματων εκισωσεων, και με μερικες χιλιαδες εξισωσεις, ακομα

και γραμμικες οπως στο παραδειγμα σου, δεν νομιζω να υπαρχει υπολογιστης να στο λυσει σε αυτη τη ζωη. Εκτος κι αν το πραλληλισεις σε χιλιαδες nodes. 

Και δεν νομιΖω πως ουτε καποιος greedy αλγοριθμος μπορει να σε βοηθησει.

Δημοσ.
6 ώρες πριν, masteripper είπε

κάπου εδώ έχουμε πρόβλημα καθώς η παραπάνω εξίσωση είναι ίδια με μία απο τις προηγούμενες.

Όχι. Δεν είναι ίδια με μία από τις προηγούμενες. Έχεις βασικά λάθη, που σε αποτρέπουν να κατανοήσεις το πρόβλημά σου και, συνεπώς, να βρεις την λύση του. 

Τα βήματα που παρέθεσε ο pmav είναι μία αρχική λογική προσέγγιση αλλά, δεδομένου των όσων έχεις γράψει, θαρρώ πως δεν έχεις καταλάβει το πρόβλημά σου και, συνεπώς, δεν το μεταφέρεις σωστά. 

  • Like 1
Δημοσ.

Το όλο πρόβλημα πάντως μπορείς να το δεις ως optimization. Αλλά, προς το παρόν, δεν μπορώ να καταλάβω το πρόβλημά σου. Μέχρι στιγμής ό,τι έχεις δώσει ως παρουσίαση του προβλήματος έχει βασικά λάθη που (προσωπικά) δεν με αφήνουν να καταλάβω τι θες να κάνεις. 

Δημοσ.
18 ώρες πριν, pmav99 είπε

Βήμα 2ο; Διαλέγεις Ν από τις Λ εξισώσεις και κοιτάς αν υπάρχει λύση. Αν δεν υπάρχει λύση διαλέγεις Ν διαφορετικές εξισώσεις και επαναλαμβάνεις μέχρι να βρεις τη λύση a.

Υπαρχουν πααααρα πολλες διαφορετικες Ν.

Δημοσ.

Παιδιά μπορεί να κλείσει...με την βοήθεια του Pmav ξεμπλόκαρα και εγώ και τώρα ξέρω πως να το λύσω ...απλώς θα χρειαστείς κάποιος κώδικας για μαγείρεμα των δεδομένων για να αποφευχθούν το singular matrix...είχα στο μυαλό μου περίπλοκα πράγματα που τελικά δεν χρειάζονται...οπότε επιστροφή στις βάσεις.

Δημοσ.
5 λεπτά πριν, masteripper είπε

Παιδιά μπορεί να κλείσει...με την βοήθεια του Pmav ξεμπλόκαρα και εγώ και τώρα ξέρω πως να το λύσω ...απλώς θα χρειαστείς κάποιος κώδικας για μαγείρεμα των δεδομένων για να αποφευχθούν το singular matrix...είχα στο μυαλό μου περίπλοκα πράγματα που τελικά δεν χρειάζονται...οπότε επιστροφή στις βάσεις.

Να τονίσω ότι ζητάς βοήθεια δημόσια, παίρνεις βοήθεια, αλλά δεν την μοιράζεσαι με άλλους που μπορεί μετά να χρειαστούν το ίδιο; Κρίμα, γιατί ήθελα να βοηθήσω και εγώ αλλά μετά από τέτοιες πρακτικές δεν νομίζω ότι θα ξανα-προσπαθήσω για εσένα. Σόρρυ. 

Δημοσ.

Φίλε μου ...είπα ότι ξέρω πως θα το λύσω ....δεν είπα ότι έχω την λύση στην τσέπη μου...απλώς σκεφτόμουν παπάδες και τελικά τα πράγματα θα λυθούν με πιο απλό τρόπο.

Εν πρώτοις σου λέω ότι θα εισάγω τα δεδομένα σε μια βάση...θα κάνω 1 Group By για να πάρω τις μοναδικές εξισώσεις. (σε 1ο στάδιο)

Μετά θα πρέπει να ελέγξω ποιές τελικά απαλείφονται (αυτό πρέπει να το δουλέψω)

Και στο τέλος θα ενώσω τα υποσετ για να δω τι λύσεις παίρνω..

Π.χ σε δείγμα 1000 εξισώσεων με 1η κίνηση υπάρχουν 350+ "μοναδικές"

Όμως πρέπει να δώ ποιές απαλείφονται

Μετά θα πρέπει να δω πως θα τα χωρίσω σε υποσετ ώστε ο πίνακας να είναι ΑxA με βάση τους αγνώστους για να το λύσει το numpy...εδώ θα παίξουν αρκετές παραδοχές.

Απο αυτό θα εξετάσω τις λύσεις για να δω σε τι range παίζουν και πάει λέγοντας...

Ίσως έπρεπε να το διατυπώσω ότι πήρα μια 1η ιδέα για να ξεκινήσω να το λύνω ...όχι "ξέρω πως θα το λύσω"

Ευχαριστώ όλους για την βοήθεια τους και σίγουρα έκανα κάποια λάθη αλλά απο το επίπεδο της σκέψης ...στο επίπεδο της εφαρμογής υπάρχει πάντα μια απόσταση....τώρα που τα έβαλα κάτω τα πράγματα και τα δουλεψα είδα πως πρέπει να το προσεγγίσω.

 

Δημοσ.

Διαφωνώ στο group by.

Θα πρότεινα να δημιουργήσεις μία ακολουθία από vectors, όπου κάθε vector θα έχει ως στοιχεία τους συντελεστές μίας εξίσωσης. Μετά, τους κάνεις sort βάσει ενός συντελεστή (διάλεξε έναν) και ξεκινάς από τον πρώτο vector να τον χρησιμοποιείς σε διαίρεση στοιχείου προς στοιχείου με όλους τους υπόλοιπους. Μετά, βρίσκεις για ποιους vectors είχες αποτέλεσμα όπου η διαίρεση έδωσε τον ίδιο αριθμό για όλα τα στοιχεία και "πετάς" τους vectors αυτούς.

Συνεχίζεις μέχρι τον προ-τελευταίο vector. 

Θα σου μείνει, μετά, ένα σετ από γραμμικά ανεξάρτητους vectors. Από εκεί και πέρα, εξετάζεις με τυπικές διαδικασίες εάν υπάρχει λύση για όλους. Εάν όχι, τότε θα μπορούσες να το δεις σαν heuristics αλλά και σαν optimization. 

Υ.Γ. Η διαδικασία μπορεί να σου φάει κάποια ώρα, αλλά θα την κάνεις μόνο μία μέχρι να βρεις το σετ εξισώσεων που θέλεις. Μετά, θα χρησιμοποιείς μόνο το σετ αυτό, μιας και μόνο αυτό το σετ θα είναι αρκετό για να λύσεις το πρόβλημά σου. 

Δημοσ.
25 λεπτά πριν, Fortistis είπε

Διαφωνώ στο group by.

Θα πρότεινα να δημιουργήσεις μία ακολουθία από vectors, όπου κάθε vector θα έχει ως στοιχεία τους συντελεστές μίας εξίσωσης. Μετά, τους κάνεις sort βάσει ενός συντελεστή (διάλεξε έναν) και ξεκινάς από τον πρώτο vector να τον χρησιμοποιείς σε διαίρεση στοιχείου προς στοιχείου με όλους τους υπόλοιπους. Μετά, βρίσκεις για ποιους vectors είχες αποτέλεσμα όπου η διαίρεση έδωσε τον ίδιο αριθμό για όλα τα στοιχεία και "πετάς" τους vectors αυτούς.

Συνεχίζεις μέχρι τον προ-τελευταίο vector. 

Θα σου μείνει, μετά, ένα σετ από γραμμικά ανεξάρτητους vectors. Από εκεί και πέρα, εξετάζεις με τυπικές διαδικασίες εάν υπάρχει λύση για όλους. Εάν όχι, τότε θα μπορούσες να το δεις σαν heuristics αλλά και σαν optimization. 

Υ.Γ. Η διαδικασία μπορεί να σου φάει κάποια ώρα, αλλά θα την κάνεις μόνο μία μέχρι να βρεις το σετ εξισώσεων που θέλεις. Μετά, θα χρησιμοποιείς μόνο το σετ αυτό, μιας και μόνο αυτό το σετ θα είναι αρκετό για να λύσεις το πρόβλημά σου. 

Ενδιαφέρον ...για να το επεξεργαστώ λίγο.

Δημοσ.
1 λεπτό πριν, masteripper είπε

Ενδιαφέρον ...για να το επεξεργαστώ λίγο.

Εάν η εξίσωση είναι της μορφής: 

ax + by + cz = h

Τότε οι συντελεστές είναι: [a, b, c, h]. 

Αλλά, όπως είπα, η πρακτική να κρύβεται μία απάντηση (ακόμα και στο πλαίσιο "σύστασης" ) δεν μου αρέσει καθόλου. Για αυτό και δεν θα βοηθήσω άλλο. 

Καλή τύχη με τα περαιτέρω. 

Δημοσ.

Δυστυχώς δεν έχω ασχοληθεί (ακόμα) με Python και φαίνεται ότι έχει πολλά κόλπα..

Μόλις βρήκα αυτό

>>> import sympy 
>>> import numpy as np
>>> mat = np.array([[0,1,0,0],[0,0,1,0],[0,1,1,0],[1,0,0,1]])  # your matrix
>>> _, inds = sympy.Matrix(mat).T.rref()   # to check the rows you need to transpose!
>>> inds
[0, 1, 3]

Απότι φαίνεται έχει τις μεθόδους ώστε να πάρει 1 πίνακα και να βρείς ποιές γραμμές είναι οι "καλές" (γραμμικώς ανεξάρτητες)...

οπότε τώρα πρέπει να βρω πως θα διαβάζει τις γραμμές απο το .csv ...να ελέγχει ποιές γραμμές είναι γραμμικώς ανεξάρτητες και εφόσον δεν είναι να πετάει τις γραμμικές εξαρτημένες και να φορτώνει την επόμενη γραμμή απο το .csv...εως ότου φτάσει στο Ν των αγνώστων.

Δημοσ.
36 λεπτά πριν, Fortistis είπε

Διαφωνώ στο group by.

Θα πρότεινα να δημιουργήσεις μία ακολουθία από vectors, όπου κάθε vector θα έχει ως στοιχεία τους συντελεστές μίας εξίσωσης. Μετά, τους κάνεις sort βάσει ενός συντελεστή (διάλεξε έναν) και ξεκινάς από τον πρώτο vector να τον χρησιμοποιείς σε διαίρεση στοιχείου προς στοιχείου με όλους τους υπόλοιπους. Μετά, βρίσκεις για ποιους vectors είχες αποτέλεσμα όπου η διαίρεση έδωσε τον ίδιο αριθμό για όλα τα στοιχεία και "πετάς" τους vectors αυτούς.

Συνεχίζεις μέχρι τον προ-τελευταίο vector. 

Θα σου μείνει, μετά, ένα σετ από γραμμικά ανεξάρτητους vectors. Από εκεί και πέρα, εξετάζεις με τυπικές διαδικασίες εάν υπάρχει λύση για όλους. Εάν όχι, τότε θα μπορούσες να το δεις σαν heuristics αλλά και σαν optimization. 

Υ.Γ. Η διαδικασία μπορεί να σου φάει κάποια ώρα, αλλά θα την κάνεις μόνο μία μέχρι να βρεις το σετ εξισώσεων που θέλεις. Μετά, θα χρησιμοποιείς μόνο το σετ αυτό, μιας και μόνο αυτό το σετ θα είναι αρκετό για να λύσεις το πρόβλημά σου. 

Θεωρεις οτι οι εξαρτημένες γραμμικες εξισώσεις ειναι μονο το trivial παραδειγμα και 'πετας' τις δυο τελευταίες. 

  • x+y+z=1
  • 2x+2y+2z=2
  • 3x+3y+3z=3

Επαναλαμβανω οτι το πρόβλημα δεν μπορει να λυθεί στη γενικη περίπτωση. Τα υποσυνολα απο ανεξαρτητες  ειναι παααααρα πολλα (2^10000..).  αν θεωρεις οτι μπορείς με μια λουπα να βρεις πιο είναι καλύτερο απ ολα.

Δημοσ.
5 λεπτά πριν, albNik είπε

Θεωρεις οτι οι εξαρτημένες γραμμικες εξισώσεις ειναι μονο το trivial παραδειγμα και 'πετας' τις δυο τελευταίες. 

  • x+y+z=1
  • 2x+2y+2z=2
  • 3x+3y+3z=3

Επαναλαμβανω οτι το πρόβλημα δεν μπορει να λυθεί στη γενικη περίπτωση. Τα υποσυνολα απο ανεξαρτητες  ειναι παααααρα πολλα (2^10000..).  αν θεωρεις οτι μπορείς με μια λουπα να βρεις πιο είναι καλύτερο απ ολα.

Υπάρχουν έξτρα στοιχεία που μπορεί να περιορίσουν τα δεδομένα σε ανεξάρτητα υποσύνολα...αλλά πρέπει να δω πρώτα τις προοπτικές του όλου εγχειρήματος και μετά να το απορρίψω αν είναι.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...