theo2008 Δημοσ. 23 Ιανουαρίου 2009 Δημοσ. 23 Ιανουαρίου 2009 Καλησπερα. Εχω 2 μεταβλητες Κ,Μ μιας συναρτησης οι οποιες εχουν την εξης μορφη: Και οι 2 ειναι πινακες 1χ27 στο Matlab.Μαλιστα η μεταβλητη Μ εχει και στα8ερο βημα 0.05:0.018:0.5. Θελω η συναρτηση μου να παιρνει την 1η φορα την 1η τιμη της Κ και την 1η τιμη της Μ και να βγαζει αποτελεσμα.. Μετα την 2η τιμη Κ με την 2η της Μ και να βγαζει αποτελεσμα,μετα την 3η τησ Κ με την 3η της Μ κτλ. Πως μπορει να επιτευχθει αυτο?Ευχαριστω.
Crizzt Δημοσ. 23 Ιανουαρίου 2009 Δημοσ. 23 Ιανουαρίου 2009 Αν καταλαβα καλα, κατι τετοιο θελεις? >for i=1:1:length(K) Result(1,i) = K(1,i) + M(1,i); end
krss Δημοσ. 24 Ιανουαρίου 2009 Δημοσ. 24 Ιανουαρίου 2009 μπορεις πιο απλα να οριζεις ως νεα τιμη του κ,την παλια τιμη + το βημα,δηλαδη κ=κ+(το βημα σου)
theo2008 Δημοσ. 24 Ιανουαρίου 2009 Μέλος Δημοσ. 24 Ιανουαρίου 2009 για να σας δωσω ακριβως να καταλαβετε. Εχω μια συναρτηση για παραδειγμα y=4Κ-Μ*V. το V ειναι V=-12:0.05:2. Επισης οπως ειπα παραπανω τα Κ,Μ ειναι 2 πινακες 1χ27 με διαφορες τιμες.Θελω αρχικα να παιρνει την 1η τιμη του Κ και την 1η του Μ και να υπολογιζει την y για ολες τις τιμες του V ομως. Στην συνεχεια να παιρνει την 2η τιμη του Κ και την 2η του Μ και να υπολογιζει την y παλι για ολες τις τιμες του V,την 3η του Κ με την 3η του Μ κτλ. Αυτο θελω να κανω και μεχει ταλαιπωρησει καιρο...
insomniaK Δημοσ. 24 Ιανουαρίου 2009 Δημοσ. 24 Ιανουαρίου 2009 After Crizzt. > for i=1:1:length(K) for j=1:length(V) Result(j,i) = 4*K(1,i) - M(1,i)*V(1,j); end end Not tested.
dop Δημοσ. 24 Ιανουαρίου 2009 Δημοσ. 24 Ιανουαρίου 2009 Το καλύτερο για το 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) αυτή είναι (μάλλον) η καλύτερη λύση.
Dr.Fuzzy Δημοσ. 25 Ιανουαρίου 2009 Δημοσ. 25 Ιανουαρίου 2009 Δεδομένου ότι το matlab είναι βελτιστοποιημένο για πράξεις με πίνακες ΚΑΙ συνηθίζεται να γράφουμε με μαθηματικό τρόπο (και όχι με fors) αυτή είναι (μάλλον) η καλύτερη λύση. Συμφωνω.
theo2008 Δημοσ. 25 Ιανουαρίου 2009 Μέλος Δημοσ. 25 Ιανουαρίου 2009 Απλα τωρα γνωριζω το matlab και ειμαι συνηθισμενος να χρησιμοποιω πολυ βρογχους επαναληψης απο την C++.Αλλα υπαρχουν και καλυτεροι τροποι οπως μου προτεινατε...Σας ευχαριστω πολυ ολους για την πολυτιμη βοηθεια σας!!
Crizzt Δημοσ. 25 Ιανουαρίου 2009 Δημοσ. 25 Ιανουαρίου 2009 Σωστος ο dop, ατιμη C++ με τις κακες συνηθειες ...
theo2008 Δημοσ. 31 Ιανουαρίου 2009 Μέλος Δημοσ. 31 Ιανουαρίου 2009 Πανω στο ιδιο θεμα θελω να κανω μια αλλ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 αναγκαστικα?Ποιον κωδικα θα μου προτεινατε σε αυτην την περιπτωση να χρησιμοποιησω και πως(στο περιπου)?
dop Δημοσ. 31 Ιανουαρίου 2009 Δημοσ. 31 Ιανουαρίου 2009 Ακόμα και σε διαφορετικό αρχείο, ισχύουν ότι γράφτηκε παραπάνω.
insomniaK Δημοσ. 1 Φεβρουαρίου 2009 Δημοσ. 1 Φεβρουαρίου 2009 @theo2008 Επέτρεψε μου ένα μικρό σχόλιο, ο προγραμματισμός δεν είναι μία γλώσσα προγραμματισμού που αν την ξέρεις σου κάνει υπολογισμούς, αλλά είναι τρόπος σκέψης. Εφόσον λοιπόν θες να ασχοληθείς με το αντικείμενο και πολύ πιθανό να το χρειαστείς και στο μέλλον, η συμβουλή μου είναι ή να διαβάσεις ένα βιβλίο σχετικά με αριθμητική ανάλυση στην αρχή ή ένα βιβλίο εισαγωγικό σε αλγόριθμους. Προσωπικά, στη σχολή είχα αριθμητική ανάλυση, αλλά όταν άρχισα να προγραμματίζω πήρα και αυτό, που βοήθησε στην εξέλιξη του του τρόπου που αντιμετωπίζω το κάθε πρόβλημα, το οποίο και στο προτείνω.
theo2008 Δημοσ. 3 Φεβρουαρίου 2009 Μέλος Δημοσ. 3 Φεβρουαρίου 2009 Εχεις δικιο insomniak.Βιβλια αριθμητικης αναλυσης εχω αρκετα αλλα ειναι παρα πολυ κακογραμμενα δυστυχως με πολυ δυσκολες μαθηματικες εννοιες.Απλα ολες αυτες οι αποριες που εχω και δημοσιευω συχνα χριζουν αμεσης επιλυσης γιαυτο και ζηταω συχνα την βοηθεια σας ως αρχαριος που ειμαι! Οπως θα την χρειαστω και τωρα.Εχω 2 πινακες Α 280χ1και Β 280χ27.Πως μπορω να τους αφαιρεσω?Δηλαδη η καθε στηλη απο τις 27 να αφαιρειται απο την μοναδικη στηλη του πινακα Α?
worldcitizen Δημοσ. 3 Φεβρουαρίου 2009 Δημοσ. 3 Φεβρουαρίου 2009 Aν y είναι ο 280χ27 και x ο 280x1 d = y - x*ones(1,27) δηλαδή (280,27) = (280,27) -(280,1)*(1,27) Αν κατάλαβα καλά.. Αν διαβάσεις και λίγο γραμμική άλγεβρα θα καταλάβεις πολλά, και θα τα λύνεις αρκετά εύκολα...
theo2008 Δημοσ. 4 Φεβρουαρίου 2009 Μέλος Δημοσ. 4 Φεβρουαρίου 2009 Τελικα μια απο τις λυσεις ειναι η εξης C=repmat(A, 1,27)-Β; Στην ουσια η repmat δημιουργει αντιγραφα του πινακα Α και ετσι αφαιρουν καθε στηλη του Β
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.