nickrapan Δημοσ. 22 Μαρτίου 2012 Δημοσ. 22 Μαρτίου 2012 Καλησπερα σε όλους-ες, Έκανα τη γκάφα να πάρω διπλωματική στο matlab ενώ είμαι πολίτικος μηχανικός και δεν εχω τρέλες γνώσεις προγραμματισμόυ... Παρόλα αυτα κατάφερα και έβγαλα άκρη κύριως έπειτα από πολύ ψάξιμο στο διαδίκτυο και ακόμα περισσότερη μετάφραση αρχέιων και δημοσιεύσεων... Τώρα έχω σκαλώσει σε 2-3 διευκρινηστικά θέματα... Όποιος μπορεί παρακαλώ ας βοηθήσει... Το θέμα της διπλωματικής υπαγόρευε τη λύση ενός προβλήματος αρχικών τιμών (7 διαφορικές εξισώσεις 1ης τάξης) με τη χρήση του matlab... το function file ειναι αυτό: function dxdt = rapanis(t,x) %Εδώ τα, t,x και dxdt είναι μεταβλητές. %ΠΡΟΣΟΧΗ!!! Το t ειναι η ανεξάρτητη μεταβλητή, ενώ το x είναι το διάνυσμα %των εξαρτημένων μεταβλητών και το %dxdt ειναι το διάνυσμα των πρώτων παραγώγων με βάση την ανεξάρτητη %μεταβλητή %Ορίστε τις σταθερές: A1= 0.0513121236; A2= -0.00738763631; A3= 0.0000326214688; G= 981.0; L=1.20; TA=10; PA=0.999712357726800 ; OMEGA=1.206242668017560e+05; % Ορίστε τις μεταβλητές: % Υπενθυμίζουμε ότι x = [x,y,θ,T,u,b,ρ] %Παρατηρήστε ότι εδώ, το x είναι ένα 1 επί 7 διάνυσμα γραμμή και όχι ένας %μεγάλος πίνακας s = x(1); y = x(2); z= x(3); T= x(4); u= x(5); b= x(6); p= x(7); ae=0.055+0.089*sqrt(8*pi*L*L/(log(2)*(1+L^2)))*G*((PA-p)/PA)/(u^2); if ae>0.11 ae=0.11; end %[t,x] = ode45(@fname, tspan, xinit, options) % ο πίνακας dxdt έχει το ίδιο μήκος γραμμής με το διάνυσμα x dxdt=zeros(size(x)); dxdt(1) = cosd(z); dxdt(2) = sind(z); dxdt(3) = sqrt(2)*G*L/(u^2)*(PA-p)/PA*cosd(z); dxdt(4) = (-2*ae*T/(b*sqrt(pi)))+2*OMEGA*(PA-p)/(p*(u^4))*(sqrt(2)*G*L/u)*((PA-p)/PA)*sind(z)-2*ae*u/(b*sqrt(pi))-OMEGA*(PA-p)/((u^3)*b*p)*(4*ae/sqrt(pi)-(sqrt(2)*G*L*b/(u^2)))*(((PA-p)/PA)*sind(z))/(1-(OMEGA/p*(u^3))-T/p)*((A1+2*A2*(TA+T)+3*A3*((TA+T)^2))/1000); dxdt(5) = ((sqrt(2)*G*L/u)*((PA-p)/(PA))*sind(z))-2*ae*u/(b*sqrt(pi)); dxdt(6) = (4*ae/sqrt(pi))-(sqrt(2)*G*L*b/(u^2))*(((PA-p)/PA)*sind(z)); dxdt(7) = ((A1+2*A2*(TA+T)+3*A3*((TA+T)^2))/1000)*((-2*ae*T/(b*sqrt(pi)))+2*OMEGA*(PA-p)/(p*(u^4))*(sqrt(2)*G*L/u)*((PA-p)/PA)*sind(z)-2*ae*u/(b*sqrt(pi))-OMEGA*(PA-p)/((u^3)*b*p)*(4*ae/sqrt(pi)-(sqrt(2)*G*L*b/(u^2)))*(((PA-p)/PA)*sind(z))/(1-(OMEGA/p*(u^3))-T/p)*((A1+2*A2*(TA+T)+3*A3*((TA+T)^2))/1000)); end και λύνεται κανονικά με τον ode45 χωρίς κανένα κόλλημα ή πρόβλημα... και ιδού οι απορίες: οι αρχκές τιμές θα μπούν στην εντολή [t,x] = ode45(@fname, tspan, xinit, options) στο xinit οκ ως εδω αν δε γράψω στον κώδικα στα dxdt την πρώτη γραμμή δηλαδή dxdt=zeros(size(x)) μου βγάζει το σφάλμα: error dxdt must return a column vector. Η απορία μου ειναι η εξής: εγώ έβαλα ένα διάνυσμα για να τρέξει το πρόγραμμα με όλα τα στοιχεία ισα με 0 εφόσον όμως οι αρχικές τιμές μπαίνουν στο xinit του ode μπαίνουν και στο dxdt? ή εκεί θα μπουν άλλα νούμερα πχ οι αρχικές τιμές των πρώτων παραγώγων dxdt?
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα