myprotia logo Electrical and Computer Engineering Community
Ημερολόγιο
 Portal » Community » myprotia.gr magazine » Τεχνολογία - Eπιστήμη
Matlab ερώτηση
Συντονιστές: Apo_
Δημοσίευση νέας Θ.Ενότητας   Απάντηση στη Θ.Ενότητα Επισκόπηση προηγούμενης Θ.ΕνότηταςΕπισκόπηση επόμενης Θ.Ενότητας
Σελίδα 1 από 1 [18 Posts]  
Συγγραφέας Μήνυμα
alexgi Offline


Ένταξη: Πεμ 14 Ιαν 2010, 21:33
Δημοσιεύσεις: 211
 Matlab ερώτηση

Γεια σας παιδια
Θέλω να φτιάξω μια γραφικη παρασταση.Ο κωδικας ειναι αυτος
b=1:0.1:5
Cl=(1+b)*(1.56*10^-15)+0.12*10^-15;

Tp=0.345*Cl*13000*(1+1.6/ b)
plot(Tp,b)

Θέλω το β να παιρνει αυτες τις παραπανω τιμες απο [1.,5]τιμες.Οταν το τρέχω μου βγάζει το εξης μηνυμα
Error using ==> mldivide
Matrix dimensions must agree
είμαι kai ψιλοασχετος Razz

ΔημοσίευσηΔημοσιεύθηκε: Τετ 20 Μάϊος, 2015 10:37 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Αποστολή email
 Επιστροφή στην κορυφή 
prowler86 Offline
Super Moderator


Ένταξη: Πεμ 04 Μάρ 2004, 00:15
Δημοσιεύσεις: 2027
Τόπος: εδώ γύρω...
Mάλλον θες κάτι τέτοιο:

Κώδικας:
for i=0:50
b(i+1)=1+0.1*i;
Cl=(1+b(i+1))*(1.56*10^-15)+0.12*10^-15;
Tp(i+1)=0.345*Cl*13000*(1+1.6/b(i+1));
end
plot(b,Tp)

_________________
Screw you guys, i'm going home!
Θες να γίνεις μέλος στις ομάδες του myprotia.gr;

ΔημοσίευσηΔημοσιεύθηκε: Τετ 20 Μάϊος, 2015 11:38 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
fullmerme Offline

Ένταξη: Τετ 03 Νοέ 2010, 16:49
Δημοσιεύσεις: 7
στη σχεση που υπολογιζεις το Tp πρεπει να 'χεις .* και ./
δηλαδη ετσι Tp=0.345*Cl*13000.*(1+1.6./ b);

ειναι διανυσματα κι εσυ θες να κανεις πολλαπλασιαμους και διαιρεσεις στοιχειο προς στοιχειο. χωρις τελειες, προσπαθει να κανει πραξεις πινακων

ΔημοσίευσηΔημοσιεύθηκε: Τετ 20 Μάϊος, 2015 11:42 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Αποστολή email
 Επιστροφή στην κορυφή 
Nassos Offline


Ένταξη: Τρι 11 Ιαν 2011, 15:55
Δημοσιεύσεις: 1370
Τόπος: Στα Highlands των Γρεβενών...
Με κάθε επιφύλαξη (και χωρίς να το έχω τρέξει γιατί δεν έχω πρόχειρη matlab):

b = 1:0.1:5
Tp = zeros(41)
for i from 1 to 41 step 1 do
Cl=(1+b)*(1.56*10^-15)+0.12*10^-15;
Tp(i)=0.345*Cl*13000*(1+1.6/ b)
end
plot(Tp,b)
_________________
Venus γύρνα πίσω ή έστω τηλεφώνα!
--------------------------------------
http://ferozaclub.prophpbb.com/
--------------------------------------
Πάτα στη μαύρη διαφήμιση με τα κόκκινα γράμματα.

ΔημοσίευσηΔημοσιεύθηκε: Τετ 20 Μάϊος, 2015 11:42 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
hlektrologos_7 Offline

Ένταξη: Πεμ 28 Απρ 2011, 19:17
Δημοσιεύσεις: 174
b = 1:0.1:5;
sz = size(b);
A = ones(sz);
Cl = (1+b)*(1.56*(10^(-15))) + 0.12*(10^(-15));
Tp = 0.345*Cl*13000*(1 + (1.6*(A/b)));

plot(b,Tp);

(Φαντάζομαι το b θες στον άξονα των x, αν όχι άλλαξέ τα πάλι)

Το πρόβλημα είναι ότι πας να διαιρέσεις έναν αριθμό με ένα διάνυσμα και δεν μπορεί να το κάνει. Το Α που έχω φτιάξει είναι ένα διάνυσμα με μέγεθος όσο και το διάνυσμα b και πλάτος 1 για να μην επηρεάζει τις πράξεις σου, και τώρα μπορεί να βγάλει κανονικά το αποτέλεσμα.

ΔημοσίευσηΔημοσιεύθηκε: Τετ 20 Μάϊος, 2015 11:47 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
hlektrologos_7 Offline

Ένταξη: Πεμ 28 Απρ 2011, 19:17
Δημοσιεύσεις: 174
fullmerme έγραψε:
στη σχεση που υπολογιζεις το Tp πρεπει να 'χεις .* και ./
δηλαδη ετσι Tp=0.345*Cl*13000.*(1+1.6./ b);

ειναι διανυσματα κι εσυ θες να κανεις πολλαπλασιαμους και διαιρεσεις στοιχειο προς στοιχειο. χωρις τελειες, προσπαθει να κανει πραξεις πινακων

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

ΔημοσίευσηΔημοσιεύθηκε: Τετ 20 Μάϊος, 2015 11:51 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
agil Offline

Ένταξη: Σαβ 22 Νοέ 2008, 17:52
Δημοσιεύσεις: 502
Οτι ακριβως ειπε ο fullmerme κανε, ειναι και μερικως λαθος να βαλεις for loop γιαυτο το πραμα. Δουλευει προφανως αλλα δεν ειναι βελτιστο.

Καλο να τα μαθεις οπως σου ειπε και οχι με for loop, οπου μπορεις το αποφευγεις.

Ηλεκτρολογος7 δουλευει, μονο στην μεταβλητη Tp το κανεις αυτο.

b=1:0.1:5;
Cl=(1+b)*(1.56*10^-15)+0.12*10^-15;

Tp=0.345*Cl*13000.*(1+1.6./b);
plot(Tp,b)

ΔημοσίευσηΔημοσιεύθηκε: Τετ 20 Μάϊος, 2015 11:51 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
hlektrologos_7 Offline

Ένταξη: Πεμ 28 Απρ 2011, 19:17
Δημοσιεύσεις: 174
Α ναι δίκιο, απλά είχα ξεχάσει να βάλω και στο 13000 τελεία, γι αυτό μού βγαζε πάλι λάθος.

ΔημοσίευσηΔημοσιεύθηκε: Πεμ 21 Μάϊος, 2015 12:15 am
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
alexgi Offline


Ένταξη: Πεμ 14 Ιαν 2010, 21:33
Δημοσιεύσεις: 211
fullmerme έγραψε:
στη σχεση που υπολογιζεις το Tp πρεπει να 'χεις .* και ./
δηλαδη ετσι Tp=0.345*Cl*13000.*(1+1.6./ b);

ειναι διανυσματα κι εσυ θες να κανεις πολλαπλασιαμους και διαιρεσεις στοιχειο προς στοιχειο. χωρις τελειες, προσπαθει να κανει πραξεις πινακων


Kαταρχην ευχαριστω πολυ ολους για τις απαντησεις σας.
Τελικα ηταν αυτο που μου εγραψες!!!!!!!!!!

ΔημοσίευσηΔημοσιεύθηκε: Πεμ 21 Μάϊος, 2015 12:52 am
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Αποστολή email
 Επιστροφή στην κορυφή 
CRASH Offline


Ένταξη: Τρι 20 Μάϊος 2008, 12:25
Δημοσιεύσεις: 1562
Τόπος: Γεωμετρικός
Καλησπέρα παίδες έχω μία ερώτηση.

Θέλω να λύσω μία διαφορική στο matlab και να κάνω plot εκτός από τη λύση και κάποιες άλλες μεταβλητές. πχ.

tspan=...
x0=...
[t,x] = ode45(@fun,tspan,x0);

plot(t,x( : ));

function dxdt = fun(t,x)

...
...
...

dxdt = ...
K = ...(συναρτήσει του x);
end

Ουσιαστικά θέλω να κάνω plot to K όσο αλλάζει το t(διάστημα ολοκλήρωσης).

Μία λύση είναι να βάλω εντολή plot κάτω από το Κ=... με hold on; αλλά το όταν κάνω RUN παίρνει πάααααααρα πολύ ώρα.
Θέλω το Κ να το κάνω plot από το κυρίως πρόγραμμα όπως το x( : ) και όχι από τη function.

Καμιά ιδέα???
_________________
Houston, we have a problem!

ΔημοσίευσηΔημοσιεύθηκε: Τρι 27 Οκτ, 2015 1:34 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του Συγγραφέα
 Επιστροφή στην κορυφή 
Kobe Offline

Ένταξη: Κυρ 30 Νοέ 2008, 15:51
Δημοσιεύσεις: 9
Μια εύκολη λύση είναι μέσα στην function να προσαυξήσεις το Xn βάζοντας μια n+1 στήλη που θα είναι το Κ

πχ function [dx]=fun(t,x,...)

z=[x(1);x(2);...;x(n)];
dz=f(z)
K=g(z);
..................
dx=[dz;K]; % K=x(n+1)

end

%main
plot(t,x(:,n+1))

θα πρέπει επίσης να αλλάξεις και το x0=[x0;K0];

ΔημοσίευσηΔημοσιεύθηκε: Τρι 27 Οκτ, 2015 2:36 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Αποστολή email
 Επιστροφή στην κορυφή 
CRASH Offline


Ένταξη: Τρι 20 Μάϊος 2008, 12:25
Δημοσιεύσεις: 1562
Τόπος: Γεωμετρικός
Kobe έγραψε:
Μια εύκολη λύση είναι μέσα στην function να προσαυξήσεις το Xn βάζοντας μια n+1 στήλη που θα είναι το Κ

πχ function [dx]=fun(t,x,...)

z=[x(1);x(2);...;x(n)];
dz=f(z)
K=g(z);
..................
dx=[dz;K]; % K=x(n+1)

end

%main
plot(t,x(:,n+1))

θα πρέπει επίσης να αλλάξεις και το x0=[x0;K0];


Το σκέφτηκα και εγώ αυτό.

Όμως το Κ όταν επστρέφει στο main() πρόγραμμα περνάει από τον ολοκληρωτή της ode45, δηλααδή αντί να πάρω το Κ παίρνω το ολοκλήρωμα Κ. Όπως και το Χ (όπου επιστρέφει το ολοκλήρωμα dx).
_________________
Houston, we have a problem!

ΔημοσίευσηΔημοσιεύθηκε: Τετ 28 Οκτ, 2015 11:23 am
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του Συγγραφέα
 Επιστροφή στην κορυφή 
hlektrologos_7 Offline

Ένταξη: Πεμ 28 Απρ 2011, 19:17
Δημοσιεύσεις: 174
Δοκίμασε να κάνεις καθολική μεταβλητή το Κ έτσι ώστε να βγαίνει στο workspace και να μπορείς να το χρησιμοποιείς όπου θές. Δές παρακάτω:

http://www.mathworks.com/help/matlab/ref/global.html

ΔημοσίευσηΔημοσιεύθηκε: Τετ 28 Οκτ, 2015 3:10 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
CRASH Offline


Ένταξη: Τρι 20 Μάϊος 2008, 12:25
Δημοσιεύσεις: 1562
Τόπος: Γεωμετρικός
hlektrologos_7 έγραψε:
Δοκίμασε να κάνεις καθολική μεταβλητή το Κ έτσι ώστε να βγαίνει στο workspace και να μπορείς να το χρησιμοποιείς όπου θές. Δές παρακάτω:

http://www.mathworks.com/help/matlab/ref/global.html


Το θέμα είναι ότι το Κ αλλάζει τιμές όσο μεταβάλλεται το t, οπότε και να το κάνω global θα κρατήσει μόνο την τελευταία τιμή. Εγώ θέλω το σύνολο τιμών που παίρνει το Κ, διάνυσμα δηλαδή.
_________________
Houston, we have a problem!

ΔημοσίευσηΔημοσιεύθηκε: Πεμ 29 Οκτ, 2015 11:48 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του Συγγραφέα
 Επιστροφή στην κορυφή 
mmmellllllllll Offline


Ένταξη: Δευ 23 Νοέ 2009, 12:13
Δημοσιεύσεις: 492
Μία ιδέα (που δεν έχω ιδέα αν λειτουργεί) είναι να αποθηκεύεις το Κ κάθε φορά σε ένα μεταβλητού μεγέθους διάνυσμα, το μήκος του οποίου αυξάνεται κατά 1 με κάθε νέα τιμή του Κ (δεν ξέρω αν υπάρχει στη matlab αλλά θα πρεπε να υπάρχει φαντάζομαι) και στο τέλος του προγράμματος να κάνεις plot όλες τις τιμές αυτού του array.
_________________
http://mel--mel.deviantart.com/

ΔημοσίευσηΔημοσιεύθηκε: Παρ 30 Οκτ, 2015 1:01 am
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
georgedim86 Offline


Ένταξη: Σαβ 26 Αύγ 2006, 17:34
Δημοσιεύσεις: 102
Τόπος: Πάτρα
Για το τελευταίο:

K_all = [] %initialize. Maybe set it global
...
K_all = [K_all, K ];

ΔημοσίευσηΔημοσιεύθηκε: Παρ 30 Οκτ, 2015 2:10 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
hlektrologos_7 Offline

Ένταξη: Πεμ 28 Απρ 2011, 19:17
Δημοσιεύσεις: 174
Αν τα βάλεις όλα σε ενα πίνακα Κ και κάνειw αυτό στο τέλος global, δεν θα βγεί όλος ο πίνακας;

ΔημοσίευσηΔημοσιεύθηκε: Παρ 30 Οκτ, 2015 3:05 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος
 Επιστροφή στην κορυφή 
CRASH Offline


Ένταξη: Τρι 20 Μάϊος 2008, 12:25
Δημοσιεύσεις: 1562
Τόπος: Γεωμετρικός
Ευχαριστώ για τις απαντήσεις σας!

georgedim86 μέσα έπεσες. Αυτό που έγραψες είναι. Με μία επισήμανση:

georgedim86 έγραψε:
Για το τελευταίο:

K_all = [] %initialize. Maybe set it global
...
K_all = [K_all, K ];


Κάνεις ακριβώς το ίδιο και στον χρόνο t για να συμφωνούν οι διαστάσεις όταν εκτελεστεί το plot(t,K_all). Κοινώς:

function main

global K_all t_all
K_all = [] %initialize
t_all = [] %initialize
plot(t_all,K_all);
end

function [dx]=fun(t,x,...)
global K_all t_all

z=[x(1);x(2);...;x(n)];
dz=f(z)
K_all = [K_all, K ];
t_all = [t_all,t]
end
_________________
Houston, we have a problem!

ΔημοσίευσηΔημοσιεύθηκε: Κυρ 01 Νοέ, 2015 1:50 pm
 Επισκόπηση του προφίλ των χρηστών Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του Συγγραφέα
 Επιστροφή στην κορυφή 
Επισκόπηση όλων των Δημοσιεύσεων που έγιναν εδώ και:   Ταξινόμηση κατά:   
Σελίδα 1 από 1 [18 Posts]  
Δημοσίευση νέας Θ.Ενότητας   Απάντηση στη Θ.Ενότητα Επισκόπηση προηγούμενης Θ.ΕνότηταςΕπισκόπηση επόμενης Θ.Ενότητας
 Portal » Community » myprotia.gr magazine » Τεχνολογία - Eπιστήμη
Μετάβαση στη:  

Δεν μπορείτε να δημοσιεύσετε νέο Θέμα σ' αυτή τη Δ.Συζήτηση
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Δ.Συζήτησης
Δεν μπορείτε να επεξεργασθείτε τις δημοσιεύσεις σας σ' αυτή τη Δ.Συζήτηση
Δεν μπορείτε να διαγράψετε τις δημοσιεύσεις σας σ' αυτή τη Δ.Συζήτηση
Δεν έχετε δικαίωμα ψήφου στα δημοψηφίσματα αυτής της Δ.Συζήτησης
You cannot attach files in this forum
You can download files in this forum
You cannot post calendar events in this forum


myprotia.gr - myprotia@myprotia.gr - 2011

Forum with support of Syndicator RSS