MATLAB Funktion

~DeD~

Lt. Commander
Registriert
Juni 2006
Beiträge
1.725
hi, ich bin gerade dabei zu lernen wie man in matlab programmiert.

function[] = leeren(Hoehe)
%Hoehe in mm
d1=1;
d2=0.02;
g=10;
A1=pi*(d1^2)/4;
A2=pi*(d2^2)/4;

for x = Hoehe-1;
Volumen = Hoehe/1000*pi*(d1^2)/4*1000;
v2 = sqrt(2*g*Hoehe/1000);
v1 = A2/A1*v2;
m_punkt=1000*v2*A2;
t = x/m_punkt
end

in der schleife steht, meiner meinung nach:

1. anfängliches volumen wird bestimmt
2. die geschwindiggeit der Flüssigkeit bei derzeitiger höhe
3. geschwindigkeit der flüssigkeit auf der oberfläche(derzeit unnötig)
4. massenstrom bei berechneter geschwindigkeit unter punkt 2(auch vorerst unnötig)
5. die insgesammt benötigte zeit.

und das ganze soll halt solange wiederhollt werden bis die Hoehe 0 ist. wird am anfang ja in mm eingegeben und pro schleife um1mm reduziert.

das ist quasie die formel, mit der man den austritt von wasser aus einem behlter beschreibt.

kennt sich einer mit Matlab aus? stimmt das was ich da zusammengemustert habe?

wenn ich mit einer behälterhöhe von 2000mm rechne kommen knap 1000 sec raus. das kommt mir etwas zu wenig vor, weil bei konstantem massenstrom immerhin bereits ~800sec wären. und das exakte integral finde ich gerade nicht.
 
Zuletzt bearbeitet:
Die Syntax ist richtig. Ob die Funktion das tut was sie soll hat jedoch nichts mit MATLAB zu tun :)
 
@flash

oben wahrscheinlich auch(zum teil) :D

in der schleife steht, meiner meinung nach:

1. anfängliches volumen wird bestimmt
2. die geschwindiggeit der Flüssigkeit bei derzeitiger höhe
3. geschwindigkeit der flüssigkeit auf der oberfläche(derzeit unnötig)
4. massenstrom bei berechneter geschwindigkeit unter punkt 2(auch vorerst unnötig)
5. die insgesammt benötigte zeit.

und das ganze soll halt solange wiederhollt werden bis die Hoehe 0 ist. wird am anfang ja in mm eingegeben und pro schleife um1mm reduziert.
 
Zuletzt bearbeitet:
Das Programm schaut lauffähig aus, macht aber noch nicht wirklich das richtige. Das Abflussproblem führt auf eine DGL zurück und ist deswegen auch als solche in Matlab zu implementieren. Da brauchst du dann auch keine analytische Lösung, weil Matlab die numerisch bestimmt.

Was du rechnest, schaut mir danach aus, als willst du in der for-Schleife diese Lösung machen. Die ist jedoch falsch, denn so implementiert wird die genau einmal durchlaufen.
 
for x = Hoehe:0
tu was
end

das hilft aber in dem Fall nix weil sich Hoehe nicht ändert in deinem code sondern x

was willst du eigentlich berechnen? die auslaufzeit?
 
Zuletzt bearbeitet:
Andere Lösung

Gleichung für Tankvolumen
V = h * A

Gleichung für Auslauf
V' = A1 * sqrt(2*g*h)

Zeitliche Ableitung von V
dv/dt = dh/dt * A

Mit auslauf koppeln
dv/dt = V'

dh/dt * A = A1 * sqrt(2*g*h)

Umstellen

dh/dt = A1/A * sqrt(2*g*h)


V = Tankvolumen
V'= Auslaufstrom
A = Tankgrundfläche
A1 = Auslaufquerschnitt
h = Höhe


Jetzt hast du ne DGL für das Problem

In Matlab kann man das als Funktion implementieren

function dhdt = dgl(h, t) %eventuell sind die argumente andersrum, weiss ich auswendig nicht)
dhdt = A1/A * sqrt(2*g*h);
end


dhdt kannst du jetzt auf einen ode solver loslassen, der das bis zum gewünschten t wert integriert.
dafür muss du dann einen startwert für h angeben.

Alternativ kannst du imho auch die DGL umtauschen und dann nicht über t sondern h integrieren und dann schauen wie es um t steht.
 
Code:
clear all

%Hoehe in m
Hoehe = 1;

d1=1;
d2=0.02;
g=9.81;
A1=pi*(d1^2)/4;
A2=pi*(d2^2)/4;

t = 0;
Rechenschritt = 1E-3;
Verlauf = [];

for x = Hoehe:-Rechenschritt:1E-3
    
v2 = sqrt(2*g*x);
v1 = A2/A1*v2;
t = t + Rechenschritt/v1;
Verlauf = [Verlauf; x, t];
end

% Create figure
figure1 = figure;
% Create axes
axes1 = axes('Parent',figure1);
box(axes1,'on');
hold(axes1,'all');
% Create plot
plot(Verlauf(:,2),Verlauf(:,1));
% Create xlabel
xlabel('Zeit / s');
% Create ylabel
ylabel('Füllstand / m');
 
Zurück
Oben