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

Προγραμματιστικη ερωτηση Matlab


theo2008

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

Δημοσ.

καλημερα παιδια εχω μια ερωτηση για ενα βροχο στο matlab και θα ηθελα την βοηθεια σας.Εχω μια μεταβλητη την V που παιρνει τιμες απο -12:0.05:2.Αυτο το V μπαινει σε μια function και υπολογιζει μια παρασταση.Εγω αυτο που θελω ειναι το V να παιρνει ολες αυτες τις τιμες -12,-11.95 κτλ.χωρις να παιρνει την τιμή 0 ομως γιατι οταν παιρνει αυτην την τιμη κολλαει το προγραμμα.Να πηγαινει δηλαδη απο το -0.05 στο 0.05.Στον βροχο for εχω κανει το εξης που χρειαζομαι

for i=2:281

v(i)=-12+(i-1)*0.05;

μετα απο κει και περα το v(i)μπαινει στην function κτλ.Μπορει καποιος να μου πει τι να προσθεσω στον κωδικα μου για να μην παιρνει την τιμη 0?Ευχαριστω.

 

Υ.Γ.281 ειναι ολες οι τιμες που παιρνει το V -12,-11.95....2

Δημοσ.

Μπορείς κάθε φορά που μπαίνεις μέσα στο βρόγχο να ελέγχεις την τιμή του V και όταν είναι ίση με 0 να εκτελείς την εντολή continue προκειμένου να προχωρήσει στην επόμενη επανάληψη χωρίς να κάνει τπτ άλλο.

Δημοσ.

Μπορεις να δοκιμασεις το εξης:

 

>[i,j,V_nonzero]=find(V);

 

Οποτε στην αρχη του function βαλε αυτο και απο εκει και περα χρησιμοποιησε το V_nonzero, που ειναι ο καινουργιος πινακας χωρις το 0 μεσα! :-)

Δημοσ.

σκεφτηκα να κανω το εξης χρησιμοποιωντας while:

 

>
i = 2;
while i <= 281
  if -12+(i-1)*0.05 == 0
     i = i + 1;
  end
  v(i) = -12+(i-1)*0.05;
i = i + 1;
end

Σωστο μου φαινεται.Τι λετε?

Δημοσ.

Το Matlab περεχει functions γιαυτο που θες να κανεις, οπως αυτο που σου εδωσα! Αυτο που εχεις γραψει ειναι πολυ πιο αργο σε σχεση με τον τροπο που σου ειπα (δεν ειναι optimised) και δεν ειναι πολυ κομψος τροπος χρησης της γλωσσας Matlab.

 

Δεν βλεπω τον λογο να ανακαλυψεις τον τροχο απο την αρχη με χειροτερα μαλιστα αποτελεσματα! :-)

Δημοσ.

Α μαλιστα...DR Fuzzy εγω στην περιπτωση μου δεν εχω j.Μπορω να την αλλαξω σε

>
[i,V_nonzero]=find(V);

 

Επειδη δεν πολυγνωριζω τι κανει αυτη η function,αν καταλαβα καλα οταν τρεχει η for που εχω γραψει παιρνει ολες τις τιμες εκτος του 0?Δηλαδη μεσα στην for μου δεν χρειαζεται να γραψω τιποτα αλλο?Απλα να προσθεσω αυτην την μικρη function μεσα στην δικη μου function?Ωραια Ελληνικα χρησιμοποιησα...:-)

Τελος μια τελευταια ερωτηση:

Σκεφτηκα ακομα εναν τροπο:

>
v=linspace(-12,2,281)
v=setdiff(v,0)
.....
.....
.....

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

Δημοσ.
Α μαλιστα...DR Fuzzy εγω στην περιπτωση μου δεν εχω j.Μπορω να την αλλαξω σε

>
[i,V_nonzero]=find(V);

 

Επειδη δεν πολυγνωριζω τι κανει αυτη η function,αν καταλαβα καλα οταν τρεχει η for που εχω γραψει παιρνει ολες τις τιμες εκτος του 0?Δηλαδη μεσα στην for μου δεν χρειαζεται να γραψω τιποτα αλλο?Απλα να προσθεσω αυτην την μικρη function μεσα στην δικη μου function?Ωραια Ελληνικα χρησιμοποιησα...:-)

Τελος μια τελευταια ερωτηση:

Σκεφτηκα ακομα εναν τροπο:

>
v=linspace(-12,2,281)
v=setdiff(v,0)
.....
.....
.....

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

 

Ο πιο ταχυς τροπος ειναι αυτος που σου εδωσα! Τα i,j θα τα αφησεις οπως σου τα εδωσα (ή μετανομασε τα σε κατι αλλο αν κανουν conflict με τις μεταβλητες σου) και θα παρεις τον πινακα σου χωρις τα μηδενικα απο την τριτη μεταβλητη. :-)

 

Δηλαδη οπως σου εγραψα:

 

>
[i,j,V_nonzero]=find(V);

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

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

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