Ρίζες πολυωνύμων

Η εφαρμογή δημιουργήθηκε για να λύσει το πρόβλημα του υπολογισμού των πραγματικών ριζών ενός δεδομένου πολυωνύμου με έναν μοναδικό τρόπο

Περιγραφή

Η εφαρμογή γραμμής εντολών δέχεται πολυωνυμικούς συντελεστές και μια παράμετρο ακριβείας, υπολογίζοντας τα πραγματικά μηδενικά του πολυωνύμου.

Περιγραφή κώδικα

Εφαρμογή Java γραμμής εντολών.

Η έννοια αυτού του αλγορίθμου περιλαμβάνει τα ακόλουθα βήματα:

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

Ωστόσο, υπάρχει ένα catch-22: Πρέπει πρώτα να υπολογίσουμε τα μηδενικά της παράγωγης συνάρτησης προκειμένου να ορίσουμε τα μηδενικά του ίδιου του πολυωνύμου!

Λύση: Εφαρμόζουμε αναδρομή μέχρι να φτάσουμε σε ένα πολυώνυμο που επιτρέπει τον εύκολο υπολογισμό των μηδενικών του. Αυτή η διαδικασία μπορεί να επαναληφθεί μέχρι να εξάγουμε μια συνάρτηση affine


Μειονότητες:

  • Αν ο βαθμός του πολυωνύμου (n) είναι μεγάλος, η παράγωγος μπορεί να αποφέρει πολύ υψηλούς αριθμούς (όπως το n!), γεγονός που μπορεί να περιπλέξει τους υπολογισμούς.
  • Η πολυπλοκότητα των λειτουργιών θα εξαρτηθεί από το μέγεθος των αριθμών, οι οποίοι μπορούν να αναπαρασταθούν ως συνάρτηση του log(n!)

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


Ο αλγόριθμος έχει σχεδιαστεί χωρίς να υποθέτει δεδομένα κινητής υποδιαστολής, χρησιμοποιώντας Java generics αντ' αυτού

Η εφαρμογή υποστηρίζει τη χρήση του Double ή του BigDecimal, αλλά μια έκδοση Float θα μπορούσε εύκολα να υλοποιηθεί

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


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

Νομίζω ότι μπορεί να προσαρμοστεί αποτελεσματικά για να λειτουργήσει σε όλα τα σενάρια.

Παράθυρα

Πολυωνυμικές Ρίζες (2023)

Λήψη

Εκδόσεις

image

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

Συνεισφέρω τη δική μου εκδοχή της λύσης στο πρόβλημα.

Δεν είναι μια πολύ αποτελεσματική λύση αφού η υπολογιστική πολυπλοκότητα στη χειρότερη περίπτωση είναι O(G2), όπου G αντιπροσωπεύει τον πολυωνυμικό βαθμό.

Ωστόσο, νομίζω ότι κάνει τη δουλειά αποτελεσματικά.


Ο αλγόριθμος βασίζεται στον υπολογισμό των ριζών ενός πολυωνύμου, υποθέτοντας ότι οι ρίζες της παράγωγης λειτουργίας του είναι γνωστές.

Κάτω από αυτή την υπόθεση, είναι ευθύς ο υπολογισμός των ριζών επειδή μπορούμε να καθορίσουμε το όριο εύρους των ριζών.(Βλέπε:Ιδιότητες των πολυωνυμικών ριζών)

Με αυτόν τον τρόπο, μπορούμε να καθορίσουμε το εύρος κάθε δυνητικής ρίζας χρησιμοποιώντας τις ρίζες της παράγωγης συνάρτησης, και μπορούμε να υπολογίσουμε τα μηδενικά εφαρμόζοντας το θεώρημα του Μπολζάνο.

Αλλά... χρειαζόμαστε τη συνάρτηση για να υπολογίσουμε τις ρίζες της παράγωγης συνάρτησης!

Κανένα πρόβλημα. Χρησιμοποιούμε αναδρομή για να υπολογίσουμε τις ρίζες ενός πολυωνύμου. Η αναδρομική συνάρτηση έχει μια θήκη τερματισμού για το σενάριο ενός πολυωνύμου βαθμού μηδέν (μια σταθερά), το οποίο υποθέτουμε ότι δεν έχει ρίζες.

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


Αυτός ο τρόπος διαδικασίας μπορεί να απαιτεί ακρίβεια στους υπολογισμούς μας, αλλά αυτό δεν είναι πρόβλημα αν χρησιμοποιήσουμε την κλάση Java BigDecimal.

Λήψεις