Κυριακή, 27 Σεπτεμβρίου 2015

Επίλυση πολυωνυμικών εξισώσεων

Δεν είναι λίγες οι φορές που οι επιστήμονες καλούνται να επιλύσουν πολυωνυμικές εξισώσεις. Χαρακτηριστικές περιπτώσεις αυτών των εξισώσεων είναι η πρωτοβάθμια εξίσωση, η δευτεροβάθμια εξίσωση (τριώνυμο) και η κυβική εξίσωση. Στην παρακάτω ανάλυση θα δούμε πως επιλύονται αυτές οι εξισώσεις.

Κυβική εξίσωση

Μία κυβική εξίσωση έχει την μορφή
Στο μιγαδικό επίπεδο μία κυβική εξίσωση έχει ακριβώς τρεις λύσεις ρ1, ρ2 και ρ3. Για να υπολογισθούν αυτές οι λύσεις ακολουθούμε την εξής διαδικασία:

Αρχικά, υπολογίσουμε τις ποσότητες
To D είναι η διακρίνουσα για της κυβικής εξίσωσης.

Αν D>0 τότε έχουμε 1 πραγματική ρίζα και 2 μιγαδικές οι οποίες δίνονται από τις σχέσεις
Αν D=0 τότε έχουμε 3 πραγματικές ρίζες που υπολογίζονται από τις σχέσεις
Παρατηρούμε πως οι δύο από τις τρεις ρίζες έχουν την ίδια τιμή (διπλή ρίζα).

Αν D<0 τότε έχουμε πάλι 3 πραγματικές ρίζες οι οποίες δίνονται από τις σχέσεις

Επίσης, μία κυβική εξίσωση μπορεί να έχει και την εξής μορφή:
με Α διάφορο του μηδενός.

Σε αυτή την περίπτωση πρέπει να ανάγουμε την εξίσωση (2) στην εξίσωση (1). Αυτό γίνεται πολύ εύκολα διαιρώντας την εξίσωση (2) με το Α. Έτσι έχουμε
Δηλαδή πλέον έχουμε την εξίσωση (1) με

Δευτεροβάθμια εξίσωση

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

Πρωτοβάθμια εξίσωση

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

Επίλυση με την χρήση υπολογιστή

Χρησιμοποιώντας τους παραπάνω τύπους είναι πολύ εύκολο να φτιάξουμε ένα πρόγραμμα το οποίο επιλύει αυτές τις τρεις μορφές εξισώσεων. Το μόνο πρόβλημα που δημιουργείται είναι πως η Visual Basic δεν δουλεύει με μιγαδικούς αριθμούς και ως εκ τούτου πρέπει να αναλύσουμε κάθε ρίζα στο πραγματικό μέρος της (Re) και στο φανταστικό (Im). Δηλαδή κάθε ρίζα έχει την μορφή
Αν το πραγματικό μέρος μίας ρίζας είναι μηδενικό τότε η ρίζα είναι φανταστικός αριθμός ενώ αν το φανταστικό μέρος είναι μηδενικό η ρίζα είναι πραγματικός αριθμός.

Με βάση τα παραπάνω γράφουμε τον ακόλουθο κώδικα:

Private Sub Command1_Click()

Dim a As Double, b As Double, c As Double, d As Double
Dim x1(2) As Double, x2(2) As Double, x3(2) As Double
Dim Q As Double, R As Double, S As Double, T As Double

a = Text1.Text
b = Text2.Text
c = Text3.Text
d = Text4.Text

If a = 0 And b <> 0 Then
MsgBox ("quadratic equation")
dis = c ^ 2 - 4 * b * d

If dis > 0 Or dis = 0 Then
x1(1) = (-c + Sqr(dis)) / (2 * b)
x1(2) = 0
x2(1) = (-c - Sqr(dis)) / (2 * b)
x2(2) = 0
ElseIf dis < 0 Then
x1(1) = -c / (2 * b)
x1(2) = (Sqr(Abs(dis))) / (2 * b)
x2(1) = -c / (2 * b)
x2(2) = -(Sqr(Abs(dis))) / (2 * b)
End If
Text5.Text = Format(x1(1), "0.0000")
Text6.Text = Format(x1(2), "0.0000")
Text7.Text = Format(x2(1), "0.0000")
Text8.Text = Format(x2(2), "0.0000")
Text9.Text = "only two roots"
Text10.Text = "only two roots"
ElseIf a <> 0 Then
MsgBox ("cubic equation")
a_n = b / a
b_n = c / a
c_n = d / a
Q = (3 * b_n - a_n ^ 2) / 9
R = (9 * a_n * b_n - 27 * c_n - 2 * a_n ^ 3) / 54
Delta = Q ^ 3 + R ^ 2
If Delta >= 0 Then
S = cr(R + Sqr(Delta))
T = cr(R - Sqr(Delta))
x1(1) = S + T - a_n / 3
x1(2) = 0
x2(1) = -(S + T) / 2 - a_n / 3
x2(2) = (S - T) * 0.5 * Sqr(3)
x3(1) = x2(1)
x3(2) = -x2(2)
Else
thita = acos(R / Sqr(-Q ^ 3))
x1(1) = 2 * Sqr(-Q) * Cos(thita / 3) - a_n / 3
x1(2) = 0
x2(1) = 2 * Sqr(-Q) * Cos(thita / 3 + 2.094395102) - a_n / 3
x2(2) = 0
x3(1) = 2 * Sqr(-Q) * Cos(thita / 3 + 4.188790205) - a_n / 3
x3(2) = 0
End If
Text5.Text = Format(x1(1), "0.0000")
Text6.Text = Format(x1(2), "0.0000")
Text7.Text = Format(x2(1), "0.0000")
Text8.Text = Format(x2(2), "0.0000")
Text9.Text = Format(x3(1), "0.0000")
Text10.Text = Format(x3(2), "0.0000")
ElseIf a = 0 And b = 0 And c <> 0 Then
MsgBox ("linear equation")
x1(1) = -d / c
x1(2) = 0
Text5.Text = Format(x1(1), "0.0000")
Text6.Text = Format(x1(2), "0.0000")
Text7.Text = "only one root"
Text8.Text = "only one root"
Text9.Text = "only one root"
Text10.Text = "only one root"
Else
MsgBox ("impossible to solve")
End If
End Sub

Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
Text8.Text = ""
Text9.Text = ""
Text10.Text = ""
End Sub

Function cr(x) As Double
If x > 0 Or x = 0 Then
cr = x ^ (1 / 3)
ElseIf x < 0 Then
cr = -(Abs(x)) ^ (1 / 3)
End If
End Function

Function acos(x) As Double
acos = Atn(-x / Sqr(-x ^ 2 + 1)) + 2 * Atn(1)
End Function

Η φόρμα του προγράμματος φαίνεται στην ακόλουθη εικόνα


Για να λύσετε μία εξίσωση, με την βοήθεια αυτού του κώδικα, συμπληρώνετε στην παραπάνω φόρμα τα a, b, c και d. Δηλαδή η συμπλήρωση των δεδομένων γίνεται βάσει της εξίσωσης (2) που έχει την πιο γενική μορφή. Αν a≠0 τότε έχουμε κυβική εξίσωση. Αν a=0 και b≠0 τότε έχουμε τριώνυμο και αν a=0 και b=0 και c≠0 τότε έχουμε πρωτοβάθμια εξίσωση. Σε κάθε περίπτωση το πρόγραμμα αναγνωρίζει την μορφή της εξίσωσης. Τέλος αν a=b=c=0 τότε η εξίσωση δεν εμπίπτει σε καμία από τις παραπάνω κατηγορίες και το πρόγραμμα βγάζει το μήνυμα "impossible to solve".

Όταν συμπληρωθούν τα δεδομένα ο χρήστης πρέπει να πατήσει στο "calculate". Έτσι υπολογίζονται τα πραγματικά και τα φανταστικά μέρη των ριζών. Τέλος αν ο χρήστης πατήσει στο "clear" καθαρίζονται οι τιμές από όλα τα πεδία και το πρόγραμμα είναι ξανά έτοιμο για χρήση.

--------------------------------------------------------------------------------------------------------------------------

Παράδειγμα 1

Έστω πως θέλουμε να λύσουμε την κυβική εξίσωση
Εισάγουμε στο πρόγραμμα ως δεδομένα τα a=1, b=3, c=0 και d=1. Πατώντας το "calculate" αναγνωρίζεται η μορφή της εξίσωσης ("cubic equation") και υπολογίζονται οι ρίζες
Παρατηρούμε πως οι ρίζες ρ2 και ρ3 είναι συζυγείς μιγαδικοί αριθμοί.

--------------------------------------------------------------------------------------------------------------------------

Παράδειγμα 2

Λύστε την εξίσωση
Εισάγουμε στο πρόγραμμα ως δεδομένα τα a=0, b=2, c=5, d=-6. Έπειτα πατάμε στο "calculate" με αποτέλεσμα να αναγνωρίζεται πως έχουμε δευτεροβάθμια εξίσωση και να υπολογίζονται οι ρίζες οι οποίες είναι οι

--------------------------------------------------------------------------------------------------------------------------

Μπορείτε να κατεβάσετε το πρόγραμμα από εδώ.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου