Also in dem Thread geht es um Chlorid-Diffusion durch Beton.
Diese Diffusion soll mit Finiten Differenzen beschrieben werden.
Ich hab dies explizit diskretisiert.
In der beiliegenden PDF-Datei habe ich mal die Werte per Hand ausgerechnet.
Dabei beschreibt C1 die Konzentration direkt an der Betonoberfläche und geht dann in dx=0.05cm-Schritten weiter in den Beton rein.
Also liegt C2 0.05cm unter der Oberfläche und so weiter.
Außerdem beschreibt L die Zeitschritte. L0 ist am Anfang und dort ist die Randbedingung C1=0.5. Dann geht es in 1-Tagesschritten weiter
( 1Tag=86400Sekunden). Also L1 ist ein Tag nach L=0.
Wie sich die Konzentrationen entwickeln und wie die Formeln dafür sind, sieht man in der PDF-Datei. Im Grunde muss man die Werte zum jetzigen Zeitschritt nehmen,in die Gleichung einsetzten und dann den nächsten Wert ausrechnen.
Allerdings habe ich überhaupt keine Ahnung wie ich das in Matlab programmieren soll :D
Außerdem gibt es für verschiedene Punkte auch verschiedene Formeln
Aus der PDF-Datei wird das hoffentlich ersichtlich.
Hallo, das lässt sich mit den gegebenen Formeln gut hinschreiben.
Code:
C=zeros(5,6); % Array
C(:,1)=.5; % 1. Spalte = 0.5 -> Randbedingung
dt=86400;
dx=.05;
D1=10^-8;
D2=10^-9;
Ne=D1*dt/(dx^2);
Ke=D2*dt/(dx^2);
for L=1:4 for i=2:4
C(L+1,i)=Ne*C(L,i-1)+C(L,i)-2*Ne*C(L,i)+Ne*C(L,i+1);
% Ich hab jetzt auch i als Index genommen. Es gibt ja welche die finden das % nicht toll, weil i eigentlich für imagin#re Zahl steht. end end
n=6; % Anzahl der Spalten
C=zeros(5,n+1); % Array
C(:,1)=.5; % 1. Spalte = 0.5 -> Randbedingung
dt=86400;
dx=.05;
D1=10^-8;
D2=10^-9;
Ne=D1*dt/(dx^2);
Ke=D2*dt/(dx^2);
for L=1:4 for i=2:4
C(L+1,i)=Ne*C(L,i-1)+C(L,i)-2*Ne*C(L,i)+Ne*C(L,i+1);
% Ich hab jetzt auch i als Index genommen. Es gibt ja welche die finden das % nicht toll, weil i eigentlich für imagin#re Zahl steht. end end for L=1:4
C(L+1,5)=Ne*C(L,4)-Ne*C(L,5)-Ke*C(L,5)+Ke*C(L,6);
end for L=1:4 for i=6:n
C(L+1,i)=Ke*C(L,i-1)+C(L,i)-2*Ke*C(L,i)+Ke*C(L,i+1);
end end
Bei Gleichung ab C6 meinst du doch bestimmt Ke statt K oder?
Wenn man bei der Gleichung i=6 setzt, beziehst du dich mit dem Term Ke*C_L_i+1 ja auf das Element rechts von dem sechsten. Deshalb hab ich das Array ein größer gemacht, also 7 Spalten anstatt 6.
Achso das meintest du mit usw :D sorry ich bin ein ziemlicher Laie, wenn es um Matlab geht.
Aber vielen vielen Dank :)
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.