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

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

Δημοσ.

Έχουμε φτιάξει έναν πίνακα 15x8 με όνομα pina. Τον έχουμε σώσει στο αρχείο pinak.mat .

Πώς φτιάχνω ένα αρχείο script με το όνομα πχ scriptpin.m το οποίο θα εξάγει με αυτόματο τρόπο έναν υποπίνακα του pina, ο οποίος θα περιέχει όλες τις γραμμές αλλά τις στήλες 2 έως 8

και αυτός ο υποπίνακας θα ονομάζεται πχ yp ;

 

Κάνω load το pinak.mat και όντως πληκτρολογώντας pina μου εμφανίζει τον πίνακα.

Και μετά το χάος.

 

Σκέφτηκα να βάλω μια σειριακή ανάγνωση του στυλ

 

for i=1:15

for j=2:8

pina=pina(i,,j)

end

end

 

αλλά δεν νομίζω να γίνει κάτι.

 

Καμιά βοήθεια;

 

ΥΓ: Ο γράφων μόνο λίγη pascal γνωρίζει!

Δημοσ.

Έχουμε φτιάξει έναν πίνακα 15x8 με όνομα pina. Τον έχουμε σώσει στο αρχείο pinak.mat .

Πώς φτιάχνω ένα αρχείο script με το όνομα πχ scriptpin.m το οποίο θα εξάγει με αυτόματο τρόπο έναν υποπίνακα του pina, ο οποίος θα περιέχει όλες τις γραμμές αλλά τις στήλες 2 έως 8

και αυτός ο υποπίνακας θα ονομάζεται πχ yp ;

 

Κάνω load το pinak.mat και όντως πληκτρολογώντας pina μου εμφανίζει τον πίνακα.

Και μετά το χάος.

 

Σκέφτηκα να βάλω μια σειριακή ανάγνωση του στυλ

 

for i=1:15

for j=2:8

pina=pina(i,,j)

end

end

 

αλλά δεν νομίζω να γίνει κάτι.

 

Καμιά βοήθεια;

 

ΥΓ: Ο γράφων μόνο λίγη pascal γνωρίζει!

 

Καλησπέρα. Απο ποιο tutorial της MATLAB διαβάζεις ?

Δημοσ.

Κατέβασα 2 από το free-ebooks.gr ("Μια σύντομη εισαγωγή στο MATLΑB για μαθηματικούς" & "Εισαγωγή στο MATLAB")

και παιδεύομαι στο mathworks.com.

 

 

edit: Σκέφτηκα το εξής για να φτιάξω το καινούριο πίνακα που θα είναι ουσιαστικά ο αρχικός εκτός της πρώτης στήλης.

 

 

>for i=1:15
for j=2:8
yp(i,j-1)=pina(i,j)
end
end

 

Δουλεύει.

Αλλά πως δημιουργώ αρχείο script και ενσωματώνω τον κώδικα με αυτόματο τρόπο;

Δημοσ.

Κατέβασα 2 από το free-ebooks.gr ("Μια σύντομη εισαγωγή στο MATLΑB για μαθηματικούς" & "Εισαγωγή στο MATLAB")

και παιδεύομαι στο mathworks.com.

 

 

edit: Σκέφτηκα το εξής για να φτιάξω το καινούριο πίνακα που θα είναι ουσιαστικά ο αρχικός εκτός της πρώτης στήλης.

 

 

>for i=1:15
for j=2:8
yp(i,j-1)=pina(i,j)
end
end

 

Δουλεύει.

Αλλά πως δημιουργώ αρχείο script και ενσωματώνω τον κώδικα με αυτόματο τρόπο;

 

 

Τι εννοείς με αυτόματο τρόπο;

 

Στις νέες εκδόσεις του MATLAB, μετά το 2010, πας file->new και εκεί έχει επιλογές...

 

Αλλά κάτι μου λέει ότι δεν ψάχνεις αυτό.

Δημοσ.

Timon αυτό ψάχνω! Πόσο noob είμαι! :)

 

Αλλά οκ, τώρα τί γράφω μέσα στο script ώστε να κάνει αυτήν την δουλειά στον πίνακα pina ;

Δημοσ.

Λοιπον στην MATLAB για να εξάγεις έναν υποπίνακα απο μια γραμμή1 μέχρι μια γραμμή 2 και απο μια στήλη1 μέχρι μια άλλη 2 τότε το γενικό μοτιβο ειναι :

 

Α(γραμμή1:γραμμη2 ; στήλη1 : στήλη2)

 

Ένα παράδειγμα ειναι ο εξής (3x3) πίνακας :

 

> A =    1   2   3
       4   5   6
       7   8   9     

 

Άν θελήσω να πάρω έναν υποπίνακα ο οποίος αποτελείται απο τις 2 πρώτες γραμμές και στήλες θα δώσω την εξής εντολή :

 

>  A(1:2 , 1:2) 

 

Άν ήθελα όλες τις γραμμές (και ακομη τις 2 πρωτες στήλες τοτε θα μπορούσα να δώσω μονο το σύμβολο ( : )

 

> A(:,1:2)  

Δημοσ.

Τhx Star light.

Επομένως

>yp=pina(1:15,2:8)

το οποίο δουλεύει και είναι μια γραμμή κώδικας αντί για 5 που είναι αυτό που σκέφτηκα εγώ! (Άτιμη pascal!)

 

File->New->Script

γράφω τον κώδικα που είπαμε και σώζω το αρχείο ως scriptpin.m και τελείωσα;

Δημοσ.

Timon αυτό ψάχνω! Πόσο noob είμαι! :)

 

Αλλά οκ, τώρα τί γράφω μέσα στο script ώστε να κάνει αυτήν την δουλειά στον πίνακα pina ;

 

Τι γράφεις για να τρέξεις το αρχειο?

Δημοσ.

Timon αυτό ψάχνω! Πόσο noob είμαι! :)

 

Αλλά οκ, τώρα τί γράφω μέσα στο script ώστε να κάνει αυτήν την δουλειά στον πίνακα pina ;

 

 

ΟΚ!

 

Πάμε τα βασικά :)

 

 

Το MATLAB έχει πολλά παράθυρα. Εάν πας στο Desktop και επιλέξεις default για το layout, θα βλέπεις μπροστά σου τα εξής:

 

Command window

Command History

Workspace (ή current directory)

 

Το command window είναι, ας πούμε, το terminal του MATLAB. Εκεί γράφεις και αυτό κάνει. Το τι μεταβλητές έχεις δημιουργήσει, μπορείς να τις δεις από το workspace ή με την εντολή who ή whos (θα καταλάβεις την διαφορά αμέσως).

 

Τώρα... επειδή είναι χρήσιμο να φτιάχνεις "προγράμματα" σε MATLAB, αυτό μπορείς να το κάνεις με τον editor.

 

Τα "προγράμματα" του MATLAB χωρίζονται σε scripts και functions (φαντάζομαι θα είδες την επιλογή, έχουν και κάποιες άλλες μορφές... αλλά θα καταλάβεις σε λίγο).

 

Εν γένει, ότι μπορεί να χρησιμοποιήσει το MATLAB έχει κατάληξη .m

 

Εάν είναι variable τότε είναι .mat και εάν είναι κώδικας τότε είναι .m

 

Επειδή τα files του MATLAB έχουν κατάληξη .m, και είναι files λέγονται (και από το MATLAB) mfiles.

 

 

Το script που θες να κάνεις, είναι στην ουσία μία αυτόματη και σειριακή εκτέλεση κάποιων συγκεκριμένων εντολών. Άρα, θα πρέπει να φτιάξεις ένα mfile στο οποίο να έχεις τις εντολές μέσα, με την σειρά που θες.

 

Κάνεις λοιπόν File->New και εκεί μέσα γράφεις τις εντολές.

 

Μετά, μπορείς να πατήσεις Save&Run (είναι το πράσινο κουμπάκι στον editor).

 

 

NOTE BOLD: Όχι ελληνικά ονόματα, όχι ελληνικά directories, όχι κενά στα ονόματα στα ονόματα των mfiles (για τα ελληνικά directories νομίζω ότι το έχουν διορθώσει στις νέες εκδόσεις... αλλά δεν βάζω και το χέρι μου στη φωτιά) όχι σκουπίδια και πλαστικά σε θάλασσες και ακτές.

 

Πρόσεξε, για να τρέξεις ένα mfile είτε γράφεις το όνομά του στο matlab είτε το τρέχεις από τον editor

 

(κάπου εδώ θα πρέπει να μάθεις τι είναι το path του matlab.... αλλά ψιλοβαριέμαι να σου πω τώρα. Ψαξ' το. Path in MATLAB)

Δημοσ.

Τhx Star light.

Επομένως

>yp=pina(1:15,2:8)

το οποίο δουλεύει και είναι μια γραμμή κώδικας αντί για 5 που είναι αυτό που σκέφτηκα εγώ! (Άτιμη pascal!)

 

Μια χαρα!!!! Ναι ειναι σημαντικο να γράφεις efficient κώδικα :P μαζεμένο και να μην πλατιάζεις

οπου ειναι δυνατο και μπορεις προφανώς. Αλλα και αυτο που σκέφτηκες ηταν καλο ρε συ ειδικα αμα δεν

ασχολεισαι κιολας με τη MATLAB. θεμα ενασχολησης και συνηθειας ειναι ολα μην ανησυχεις.

Δημοσ.

Καλησπέρα και πάλι παίδες!

 

Στον ίδιο πίνακα pina διάστασης 15x8, πώς μπορώ με την εντολή mean να υπολογίσω τον μέσο όρο κάθε στήλης χωρίς όμως να λαμβάνονται υπόψιν τα στοιχεία της κάθε στήλης που είναι 0

και το αποτέλεσμα να το βάλω σε ένα πίνακα 1x8 με όνομα NIKOS;

 

πχ. Αν η πρώτη στήλη έχει 2 μηδενικά σε 2 γραμμές της, ο μέσος όρος να προκύπτει διαιρώντας με το 13 και όχι με το 15.

 

>
NIKOS=mean(pina)

Μου φτιάχνει όντως τον πίνακα NIKOS με διάσταση 1x8 αλλά υπολογίζει και τα μηδενικά στον μέσο όρο κάθε στήλης.

 

Καμιά ιδέα;

 

edit:

Σκέφτηκα το κάτωθι

>

for j=1:8
for i=1:15
if pina(i,j)==0
k=k+1
else
NIKOS(i,j)=mean(pina,j)/k
end
end
end

αλλά μου δίνει σφάλμα "Subscripted assignment dimension mismatch." και δεν καταλαβαίνω γιατί.

Δημοσ. (επεξεργασμένο)

>
nikos = zeros(1, size(pina, 2));
for indx = 1:size(pina, 2)
   nikos(indx) = mean(pina(pina(:,indx)~=0));
end

 

Ευχαριστώ αλλά χάθηκα! Υπάρχει δυνατότητα επεξήγησης;!

 

edit: Το κατάλαβα! :)

 

Υπάρχει αντίστοιχος κώδικας για να κάνουμε το ίδιο στις γραμμές ;

Επεξ/σία από nikoskon

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...