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

Πινακες σε matlab


theo2008

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

Δημοσ.

Καλησπερα.

Εχω 2 μεταβλητες Κ,Μ μιας συναρτησης οι οποιες εχουν την εξης μορφη:

Και οι 2 ειναι πινακες 1χ27 στο Matlab.Μαλιστα η μεταβλητη Μ εχει και στα8ερο βημα 0.05:0.018:0.5.

Θελω η συναρτηση μου να παιρνει την 1η φορα την 1η τιμη της Κ και την 1η τιμη της Μ και να βγαζει αποτελεσμα..

Μετα την 2η τιμη Κ με την 2η της Μ και να βγαζει αποτελεσμα,μετα την 3η τησ Κ με την 3η της Μ κτλ.

Πως μπορει να επιτευχθει αυτο?Ευχαριστω.

Δημοσ.

για να σας δωσω ακριβως να καταλαβετε.

Εχω μια συναρτηση για παραδειγμα y=4Κ-Μ*V.

το V ειναι V=-12:0.05:2.

Επισης οπως ειπα παραπανω τα Κ,Μ ειναι 2 πινακες 1χ27 με διαφορες τιμες.Θελω αρχικα να παιρνει την 1η τιμη του Κ και την 1η του Μ και να υπολογιζει την y για ολες τις τιμες του V ομως.

Στην συνεχεια να παιρνει την 2η τιμη του Κ και την 2η του Μ και να υπολογιζει την y παλι για ολες τις τιμες του V,την 3η του Κ με την 3η του Μ κτλ.

Αυτο θελω να κανω και μεχει ταλαιπωρησει καιρο...

Δημοσ.

Το καλύτερο για το matlab είναι να μπορείς να κάνεις ότι χρειάζεσαι χωρίς for που είναι απίστευτα αργά - και μεταξύ μας, αν είναι να κάνεις κάτι με το Matlab, κάνε το σωστά, δηλαδή με πράξεις πάνω σε πίνακες.

 

Οπότε μία πρώτη λύση είναι

>
for i=1:length(V)
 y(i,  = 4*K - M*V(i);
end

 

Μια πιο εξελιγμένη λύση είναι η εξής:

>
NO = ones(length(V), length(K));
NK = NO * diag(K); // κάθε γραμμή του πίνακα NK είναι το Κ
NM = NO * diag(M); // κάθε γραμμή του πίνακα NM είναι το M
NV = (NO' * diag(V))'; // κάθε στήλη του NV είναι το V
y = 4*NK - NM .*NV; // inner product κάθε γραμμής του NM με το NV αντικαθιστά το for

 

Δεδομένου ότι το matlab είναι βελτιστοποιημένο για πράξεις με πίνακες ΚΑΙ συνηθίζεται να γράφουμε με μαθηματικό τρόπο (και όχι με fors) αυτή είναι (μάλλον) η καλύτερη λύση.

Δημοσ.
Δεδομένου ότι το matlab είναι βελτιστοποιημένο για πράξεις με πίνακες ΚΑΙ συνηθίζεται να γράφουμε με μαθηματικό τρόπο (και όχι με fors) αυτή είναι (μάλλον) η καλύτερη λύση.

 

Συμφωνω. :-)

Δημοσ.

Απλα τωρα γνωριζω το matlab και ειμαι συνηθισμενος να χρησιμοποιω πολυ βρογχους επαναληψης απο την C++.Αλλα υπαρχουν και καλυτεροι τροποι οπως μου προτεινατε...Σας ευχαριστω πολυ ολους για την πολυτιμη βοηθεια σας!!

Δημοσ.

Πανω στο ιδιο θεμα θελω να κανω μια αλλh ερωτηση αυτην την φορα!!!

Για υπενθυμιση απλα Εχω μια συναρτηση για παραδειγμα y=4Κ-Μ*V.

το V ειναι V=-12:0.05:2.

Τα Κ,Μ ειναι 2 πινακες 1χ27 με διαφορες τιμες.Θελω αρχικα να παιρνει την 1η τιμη του Κ και την 1η του Μ και να υπολογιζει την y για ολες τις τιμες του V ομως.

Στην συνεχεια να παιρνει την 2η τιμη του Κ και την 2η του Μ και να υπολογιζει την y παλι για ολες τις τιμες του V,την 3η του Κ με την 3η του Μ κτλ.

Αν τωρα η εξισωση που εχω βρισκεται σε ενα αλλο M-file με ονομα deriv εδω αυτο δεν θα πρεπει να υλοποιηθει με for αναγκαστικα?Ποιον κωδικα θα μου προτεινατε σε αυτην την περιπτωση να χρησιμοποιησω και πως(στο περιπου)?

Δημοσ.

@theo2008

 

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

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

Δημοσ.

Εχεις δικιο insomniak.Βιβλια αριθμητικης αναλυσης εχω αρκετα αλλα ειναι παρα πολυ κακογραμμενα δυστυχως με πολυ δυσκολες μαθηματικες εννοιες.Απλα ολες αυτες οι αποριες που εχω και δημοσιευω συχνα χριζουν αμεσης επιλυσης γιαυτο και ζηταω συχνα την βοηθεια σας ως αρχαριος που ειμαι!

Οπως θα την χρειαστω και τωρα.Εχω 2 πινακες Α 280χ1και Β 280χ27.Πως μπορω να τους αφαιρεσω?Δηλαδη η καθε στηλη απο τις 27 να αφαιρειται απο την μοναδικη στηλη του πινακα Α?

Δημοσ.

Aν y είναι ο 280χ27 και x ο 280x1

 

d = y - x*ones(1,27)

δηλαδή

(280,27) = (280,27) -(280,1)*(1,27)

 

 

Αν κατάλαβα καλά..

Αν διαβάσεις και λίγο γραμμική άλγεβρα θα καταλάβεις πολλά, και θα τα λύνεις αρκετά εύκολα...

Δημοσ.

Τελικα μια απο τις λυσεις ειναι η εξης

C=repmat(A, 1,27)-Β;

Στην ουσια η repmat δημιουργει αντιγραφα του πινακα Α και ετσι αφαιρουν καθε στηλη του Β:-)

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

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

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