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

αριθμητικη επιλυση σε matlab?


plato

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

Δημοσ.

Εχω ποσταρει ενα μηνυμα στην κατηγορια software για το προβλημα που εχω προς επιλυση στο matlab αλλα επειδη δεν πηρα καμια απαντηση να ρωτησω εδω μια υποπεριπτωση μπας και βγαλω καμια ακρη. Εστω οτι εχω μια εξισωση της μορφης

 

12*χ^2 - 20* χ^5 + cosθ - 2*sin( θ/2)=0

 

Πως μπορω να κανω αριθμητικη επιλυση ως προς χ για ενα ευρος της γωνιας θ? Για καθε τιμη δηλαδη της θ να παιρνω ενα χ. Θα πρεπει να λυσω ως προς χ και μετα να το δωσω στο προγραμμα για λυση? Δηλαδη:

 

χ= sqrt ((2 *sin(θ/2) - cosθ + 20* χ^5)/12).

 

με -pi< θ <pi

 

Επειδη το χ ειναι μια παραμετρος αλλης εξισωσης που εχω προς επιλυση, πώς γινεται για καθε τιμη του χ που βρισκει το προγραμμα για δεδομενη τιμη της θ, να την τοποθετει στη συνεχεια στην εξισωση και να παιρνω αποτελεσμα?

 

Εχω μπλεξει ασχημα. Οποιος μπορει ας βοηθησει παρακαλω!

Δημοσ.

Καταρχην εχεις μια εξισωση 2ου βαθμου που αυτο σημαινει πως δεν λυνεις ως προς χ αλλα αντιθετα χρησιμοποιεις την γνωστη λυση με την διακρινουσα η οποια σου δινει καθε φορα 2 τιμες για το χ.Εσυ τωρα θες για διαφορετικες τιμες του Θ να παιρνεισ την λυση της εξισωσης. Αυτο ειναι πολυ απλο.Απλα γραφεις μια loop με for και μεσα σε αυτην βαζεις την εξισωση.Δηλαδη σε ψευδοκωδικα ειναι καπως ετσι

 

 

for (θ=-90;θ<90;θ++)

 

{ εξισωση 2ου βαθμου

 

χ1=.....

χ2=....

 

}

Δημοσ.
Καταρχην εχεις μια εξισωση 2ου βαθμου που αυτο σημαινει πως δεν λυνεις ως προς χ αλλα αντιθετα χρησιμοποιεις την γνωστη λυση με την διακρινουσα η οποια σου δινει καθε φορα 2 τιμες για το χ.Εσυ τωρα θες για διαφορετικες τιμες του Θ να παιρνεισ την λυση της εξισωσης. Αυτο ειναι πολυ απλο.Απλα γραφεις μια loop με for και μεσα σε αυτην βαζεις την εξισωση.Δηλαδη σε ψευδοκωδικα ειναι καπως ετσι

 

 

for (θ=-90;θ<90;θ++)

 

{ εξισωση 2ου βαθμου

 

χ1=.....

χ2=....

 

}

Δεν ειναι δευτερου βαθμου φιλε μου. Αν προσεξεις λιγο θα δεις οτι το χ ειναι υψωμενο στο τετραγωνο αλλα και στην πεμπτη στην ιδια εξισωση. Μονο αριθμητικα λυνεται. Ευχαριστω παντως.

Θεωρουσα οτι ειναι ευκολο για καποιον που γνωριζει απο matlab αλλα απο οτι φαινεται ειναι δυσκολο. Ειναι δυνατον να μην υπαρχει ενας απλος τροπος να λυνει αριθμητικα το matlab μια εξισωση? Τοτε ποιος ο λογος υπαρξης του? Να κανει πραξεις με πινακες σαν ενα τεραστιο κομπιουτερακι? Ειναι δυνατον ρε παιδια?

Δημοσ.

ειναι λιγο μπερδεμενα ετσι οπως τα λες ποιος ειναι ο αγνωστος σου και ποια η παραμετρος σου; υπαρχει το roots και αλλες μεθοδοι δωσε λιγες εξηγησεις ειμαι σιγουρη οτι κατι θα βρεθει

Δημοσ.

Λοιπον, ολο το προβλημα (απλοποιημενο για να μην εχουμε πολλες παραμετρους και ξεχνοντας οσα ανεφερα παραπανω) εχει ως εξης:

 

Εχω 2 παραμετρικες εξισωσεις. Μια για Χ και μια για Υ με παραμετρους:

1) τη γωνια θ που παιρνει τιμες απο -π ως +π και

2) την παραμετρο r που δινεται απο την παρακατω σχεση

 

r^5 - 7* r^2 + 3*cos(θ/2) - 2*sinθ = 0 (α)

 

Οι παραμετρικες εξισωσεις για Χ,Υ ειναι οι εξης:

 

Χ= r*cosθ + 3* r^(3/2) + 6 *sin(3θ/2)

Υ= r*sinθ +2* r^(3/2) - 6* cos(3θ/2)

 

Θελω τη γραφικη παρασταση των (Χ,Υ) για ολο το ευρος της θ.

 

Υ.Γ. Ουσιαστικα δηλαδη θελω για καθε τιμη της θ να επιλυνεται αριθμητικα η εξισωση (α) και για την τιμη της r που θα προκειπτει να βρισκει το προγραμμα το αντιστοιχο Χ και το αντιστοιχο Υ. Αυτο να γινεται για ολο το ευρος της θ (δηλ. απο -π ως +π) και το συνολο ολων αυτων των σημειων που προκειπτουν να απεικονιζονται σε ενα διαγραμμα (Χ,Υ).

Δημοσ.

Πρέπει να χρησιμοποιήσεις την Matlab symbolic toolbox που βασίζεται στον πυρήνα της Maple και χειρίζεται αυτό που θέλεις. Αρχικά πρέπει να περάσεις στην Matlab τις μεταβλητές που θα έχει η εξίσωση σου ως:

 

syms r theta

 

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

 

f = sym('r^5 - 7*r^2 + 3*cos(theta/2) - 2*sin(theta) = 0')

 

Ακολούθως εισάγεις τιμές στην μεταβλητή θ στο διάστημα (-π,π) με βήμα 0.01, και παίρνεις τα διαφορετικά realization της f. Αυτό θα σου γυρίσει στον πίνακα theta_substitution τις τιμές της f για θ απο (-π, π).

 

theta_substitution = subs(f,theta,[-pi:0.01:pi])

 

Ακολούθως πρέπει να λύσεις την κάθε f ως προς r:

 

solve(theta_substitution)

 

προσοχή αυτό λογικά θα πάρει αρκετή ώρα μιας και η Matlab κάνει brute force αριθμητική ανάλυση κάθε realization της theta_substitution (f), το οποίο είναι ένας vector με (up to) 5 τιμές (πραγματικές και μιγαδικές). Λογικό μιας και η εξίσωση (α) είναι 5ου βαθμού.

 

Ετσι παίρνεις τις λύσεις της (α) ως προς r για θ = (-π, π). Τέλος βάζεις τις προκύπτουσες τιμές στα Χ,Υ και σε συνδιασμό με τιμές για την θ παίρνεις τις τελικές τιμές που χρειάζεται να πλοτάρεις. Για οποιαδήποτε άλλη βοήθεια symbolic matlab toolbox documentation demos απο την ίδια την Matlab και google.

Δημοσ.

Τι λες τωρα ρε αρχηγε? Τα μισα καταλαβα... Μου εδωσες πολυ δουλεια. Τα βαζω κατω να δω τι ειναι ολα αυτα και που με βγαζουν. Ευχαριστω παρα πολυ warchief κι ελπιζω με ψαξιμο να βγαλω ακρη! Αν υπαρχει και καποια αλλη υποδειξη απο οποιονδηποτε καλοδεχουμενη. Και παλι ευχαριστω!

Δημοσ.

Τοτε ποιος ο λογος υπαρξης του matlab? Για να λυνει δευτεροβαθμιες που λυνουμε με το μολυβακι μας το φιαξανε? Ελπιζω φιλε μου να κανεις λαθος γιατι αλλιως την εκατσα! Θα ακολουθησω οσα μου εγραψε ο warchief και θα ενημερωσω αν γινεται και τι γινεται...

Δημοσ.

Πιο εύκολα:

  • τα πολυώνυμα συμβολίζονται με p=[α5,α4,α3,α2,α1,α0] όπου α5 ο συντελεστής του χ^5 κτλ.
  • οι ρίζες των πολυωνύμων γράφονται με roots(p) όπου p=[α5,α4,α3,α2,α1,α0] και έχουν μέγεθος τον βαθμό του πολυωνύμου.
  • οι συναρτήσεις ("αριθμητικές", όχι αναλυτικές) ορίζονται με οδηγό πχ.
    f = @(x) x^2 και μετά γράφονται με f(2)

 

Οπότε μπορείς να ορίσεις ένα πολυώνυμο p = @(th) [-20,0,0,12,0,cos(th)-2*sin(th/2)] και για κάθε τιμή του th να περνεις το roots και να σου βγάζει την λύση...

 

ΥΓ. Αν ορίσεις πχ thM=-pi:0.01:pi και πάρεις το p(thM) δεν θα πάρεις το επιθυμητό αποτέλεσμα...

Δημοσ.
Πιο εύκολα:

  • τα πολυώνυμα συμβολίζονται με p=[α5,α4,α3,α2,α1,α0] όπου α5 ο συντελεστής του χ^5 κτλ.
  • οι ρίζες των πολυωνύμων γράφονται με roots(p) όπου p=[α5,α4,α3,α2,α1,α0] και έχουν μέγεθος τον βαθμό του πολυωνύμου.
  • οι συναρτήσεις ("αριθμητικές", όχι αναλυτικές) ορίζονται με οδηγό πχ.
    f = @(x) x^2 και μετά γράφονται με f(2)

 

Οπότε μπορείς να ορίσεις ένα πολυώνυμο p = @(th) [-20,0,0,12,0,cos(th)-2*sin(th/2)] και για κάθε τιμή του th να περνεις το roots και να σου βγάζει την λύση...

 

ΥΓ. Αν ορίσεις πχ thM=-pi:0.01:pi και πάρεις το p(thM) δεν θα πάρεις το επιθυμητό αποτέλεσμα...

Μηπως μπορεις να μου εξηγησεις τι σημαινει ο οδηγος που αναφερεις και ο συμβολισμος @. Επισης εννοεις οτι θα πρεπει εγω να οριζω τις τιμες του theta καθε φορα για να μου βρισκει ριζες? Δηλαδη πρεπει να δωσω πανω απο 360 τιμες ωστε να παιρνω καθε φορα ενα αποτελεσμα?

Δημοσ.

Τη ζωή μου έχει φάει αυτό το MatLab!

 

Το @ είναι πως ορίζεις (άμεσα) συναρτήσεις. Με αυτόν τον τρόπο τις ορίζει το MatLab (ένας από αυτούς τεσπα). Έτσι το γράφεις και μετά μπορείς να το χρησιμοποιείς όπως το παράδειγμα που έφερα!

Φίλε μου το πρόβλημά σου δεν το κατάλαβα, αλλά αυτό που έγραψες στην αρχή δεν ήταν εξίσωση, αλλά συνάρτηση (πλεγμένη). Παραπάνω δεν ξέρω τι θες να κάνεις, απλώς αυτά είναι τα εργαλεία...

Δημοσ.

Μπορει στην αρχη να τα εγραψα λιγο περιεργα.Στη συνεχεια ομως το ανελυσα. Θελω ουσιαστικα μια γραφικη παρασταση σημειων. Μονο που δεν εχω μια συναρτηση y(x) ωστε να δινω τιμες στο χ και να παιρνω το y αλλα οπως ειπες εχω πλεγμενες συναρτησεις χ(r,θ) και y( r,θ). Δυστυχως ομως και το r εξαρταται απο το θ με τη σχεση που αναφερεται στο μηνυμα μου # 5. Δεν ξερω, μπορει να το σκεφτομαι λαθος αλλα νομιζω οτι θα πρεπει να φιαξω ενα loop που για καθε τιμη της θ ,ξεκινωντας απο -π και τελειωνοντας ως +π, να βρισκει το r και στη συνεχεια για την ιδια τιμη της θ μαζι και με την r που βρεθηκε να βρισκονται τα χ,y αντιστοιχα. Στη συνεχεια παιρνω νεα τιμη του θ, αρα νεο r και συνεπως νεο ζευγος χ,y σχηματιζοντας ετσι τη γραφικη παρασταση για ολο το ευρος της θ. Το σκεφτομαι λαθος? Εμενα μου δωθηκαν οι παραμετρικες χ,y και r και μου ζητηθηκε η γραφικη παρασταση των παραμετρικων χ και y . Αν μπορειτε να καταλαβετε τωρα ποιο ειναι ακριβως το προβλημα προς λυση... Ευχαριστω για τις ως τωρα προσπαθειες σας μαγκες! Ο,τι σας ερχεται στο μυαλο ως ιδεα ειναι καλοδεχουμενο.

  • 3 εβδομάδες αργότερα...
Δημοσ.
Δεν ξερω, μπορει να το σκεφτομαι λαθος αλλα νομιζω οτι θα πρεπει να φιαξω ενα loop που για καθε τιμη της θ ,ξεκινωντας απο -π και τελειωνοντας ως +π, να βρισκει το r και στη συνεχεια για την ιδια τιμη της θ μαζι και με την r που βρεθηκε να βρισκονται τα χ,y αντιστοιχα. Στη συνεχεια παιρνω νεα τιμη του θ, αρα νεο r και συνεπως νεο ζευγος χ,y σχηματιζοντας ετσι τη γραφικη παρασταση για ολο το ευρος της θ. Το σκεφτομαι λαθος?

 

Μια χαρά το σκέφτηκες, αυτό είναι το πιο απλό να κάνεις. Πρόσεχε όμως γιατί όταν λύσεις την 5ου βαθμού εξίσωση (με τη συνάρτηση roots της matlab) μπορεί να βγάλεις >1 πραγματικές ρίζες. Θα σου κάνουν όλες? Φαντάζομαι πρέπει r>0 οπότε πρέπει να βάλεις επιπλέον loop που θα 'φιλτράρει' το αποτέλεσμα. Επίσης πρέπει να σκεφτείς τι πρέπει να γίνει αν τον περιορισμό σου τον ικανοποιούν >1 λύσεις.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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