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

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

Δημοσ.

Καλησπερα σε όλους-ες,

 

Έκανα τη γκάφα να πάρω διπλωματική στο 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?

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

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

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

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

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

Σύνδεση

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

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