Datei:Animation Diagramm Carnotprozess.ogv
aus Wikipedia, der freien Enzyklopädie
Animation_Diagramm_Carnotprozess.ogv (Dateigröße: 2,61 MB, MIME-Typ: application/ogg)
Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.
Inhaltsverzeichnis
Beschreibung
BeschreibungAnimation Diagramm Carnotprozess.ogv |
Deutsch: Animation zum Carnot-Prozess |
Datum | |
Quelle | Eigenes Werk |
Urheber | Menner |
Lizenz
Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
Diese Datei wird unter der Creative-Commons-Lizenz CC0 1.0 Verzicht auf das Copyright zur Verfügung gestellt. | |
Die Person, die das Werk mit diesem Dokument verbunden hat, übergibt dieses weltweit der Gemeinfreiheit, indem sie alle Urheberrechte und damit verbundenen weiteren Rechte – im Rahmen der jeweils geltenden gesetzlichen Bestimmungen – aufgibt. Das Werk kann – selbst für kommerzielle Zwecke – kopiert, modifiziert und weiterverteilt werden, ohne hierfür um Erlaubnis bitten zu müssen.
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse |
Source code
Required tools:
- GNU octave with GNU plot
- png2yuv
- unix shell
- ffmpeg2theora
batch_processing
#!/bin/sh
start=`date`;
framerate=20
% framerate=2
name="carnot"
rm ./svg -rf
mkdir ./svg
octave ./carnot_p_V.m
rm ./png -rf
mkdir ./png
cd svg
mogrify -format png *svg
mv *png ../png
cd ..
rm ./yuv
mkdir ./yuv
png2yuv -j ./png/$name-%04d.png -f $framerate -I p -b 0 > ./yuv/out.yuv
rm ./$name.ogv
./ffmpeg2theora-0.29.linux32.bin ./yuv/out.yuv -F $framerate -v 9 -o ./$name.ogv;
end=`date`;
echo Start: $start;
echo End: $end;
carnot.m
#!/usr/bin/octave -qf
%
% 2014
%
%
% Hintergrund_Plot
%
function Hintergrund_Plot()
global parameters;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
Druck_1 = parameters.Druck_1;
Druck_2 = parameters.Druck_2;
Druck_3 = parameters.Druck_3;
Druck_4 = parameters.Druck_4;
kappa = parameters.kappa;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
Volumen = 0:0.1:parameters.PlotSize; % 2..4 / 4..9
% 1 -> 2 Isotherm
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, 1, 2);
Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
Druck_1_2_iso = Druck_1 * Volumen_1 ./ Volumen;
% 2 -> 3 Isentrop
Volumen_2_3 = Volumen_a_b(Volumen_2, Volumen_3, 1, 2);
Druck_2_3 = Druck_2 * (Volumen_2 ./ Volumen_2_3) .^ kappa;
Druck_2_3_iso = Druck_2 * (Volumen_2 ./ Volumen) .^ kappa;
% 3 -> 4 Isotherm
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, 1, 2);
Druck_3_4 = Druck_3 * Volumen_3 ./ Volumen_3_4;
Druck_3_4_iso = Druck_3 * Volumen_3 ./ Volumen;
% 4 -> 1 Isentrop
Volumen_4_1 = Volumen_a_b(Volumen_4, Volumen_1, 1, 2);
Druck_4_1 = Druck_4 * (Volumen_4 ./ Volumen_4_1) .^ kappa;
Druck_4_1_iso = Druck_4 * (Volumen_4 ./ Volumen) .^ kappa;
ylim([0,15]);
xlim([0,10]);
xlabel("Volumen", "FontSize", FontSize);
ylabel("Druck", "FontSize", FontSize);
axis("tic", "labeloff");
%axis("square"); % Vermeide ausrücken des y-Beschriftung
plot(Volumen, Druck_1_2_iso/1e5,"color", "b");
plot(Volumen, Druck_2_3_iso/1e5, "color", "k");
plot(Volumen, Druck_3_4_iso/1e5, "color", "r");
plot(Volumen, Druck_4_1_iso/1e5, "color", "k");
plot(Volumen_1_2, Druck_1_2/1e5, ";Isotherm kalt;", "linewidth", 2, "color", "b");
plot(Volumen_3_4, Druck_3_4/1e5, ";Isotherm warm;", "linewidth", 2, "color", "r");
plot(Volumen_2_3, Druck_2_3/1e5, ";Isentrop;", "linewidth", 2, "color", "k");
plot(Volumen_4_1, Druck_4_1/1e5, "linewidth", 2, "color", "k");
legend("location", "NorthEast");
copied_legend = findobj(gcf(),"type","axes","Tag","legend"); % thanks to http://stackoverflow.com/questions/3938348/matlab-how-to-obtain-all-the-axes-handles-in-a-figure-handle
set(copied_legend, "FontSize", FontSize);
outerposition = get(copied_legend, 'OuterPosition'); % thanks to http://stackoverflow.com/questions/9589793/matlab-latex-interpreter-font-spacing
delta_h = 0.25*outerposition(4);
outerposition(2) = outerposition(2) - delta_h;
outerposition(4) = outerposition(4) + delta_h;
set(copied_legend, 'OuterPosition', outerposition)
set (gca(), "linewidth", 1.5);
plot(Volumen_1, Druck_1/1e5, "o", "color", "k");
text(Volumen_1, Druck_1/1e5 + 0.25, "1", "color", "k", "FontSize", FontSize);
plot(Volumen_2, Druck_2/1e5, "o", "color", "k");
text(Volumen_2, Druck_2/1e5 + 0.25, "2", "color", "k", "FontSize", FontSize);
plot(Volumen_3, Druck_3/1e5, "o", "color", "k");
text(Volumen_3, Druck_3/1e5 + 0.25, "3", "color", "k", "FontSize", FontSize);
plot(Volumen_4, Druck_4/1e5, "o", "color", "k");
text(Volumen_4, Druck_4/1e5 + 0.25, "4", "color", "k", "FontSize", FontSize);
endfunction
%
% Hintergrund_Plot_T_S
%
function Hintergrund_Plot_T_S()
global parameters;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
% Entropie
% Temperatur
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
kappa = parameters.kappa;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
Temperatur_1_2 = parameters.Temperatur_1_2;
Temperatur_3_4 = parameters.Temperatur_3_4;
Volumen_1 = parameters.Volumen_1;
Temperatur_1_2 = parameters.Temperatur_1_2;
Faktor = parameters.Faktor;
% 1->2 Isotherm
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, 1, 2);
Entropie_1_2 = Berechne_SpezifischeEntropie(Volumen_1_2/Volumen_1, Temperatur_1_2) * Faktor;
% 3->4 Isotherm
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, 1, 2);
Entropie_3_4 = Berechne_SpezifischeEntropie(Volumen_3_4/Volumen_1, Temperatur_3_4) * Faktor;
ylim([0, 1.15 * Temperatur_3_4]);
xlim([0.95 * Entropie_2_3, 1.025 * Entropie_4_1]);
xlabel("Entropie", "FontSize", FontSize);
ylabel("Temperatur", "FontSize", FontSize);
axis("tic", "labeloff");
Temperatur_1_2_A = ones(size(Entropie_1_2)) * Temperatur_1_2;
Temperatur_3_4_A = ones(size(Entropie_3_4)) * Temperatur_3_4;
plot(Entropie_1_2, Temperatur_1_2_A, ";Isotherm kalt;", "linewidth", 2, "color", "b");
plot(Entropie_3_4, Temperatur_3_4_A, ";Isotherm warm;", "linewidth", 2, "color", "r");
plot([Entropie_2_3, Entropie_2_3], [Temperatur_1_2, Temperatur_3_4], ";Isentrop;", "linewidth", 2, "color", "k");
plot([Entropie_4_1, Entropie_4_1], [Temperatur_3_4, Temperatur_1_2], "linewidth", 2, "color", "k");
legend("location", "NorthEast");
copied_legend = findobj(gcf(),"type","axes","Tag","legend"); % thanks to http://stackoverflow.com/questions/3938348/matlab-how-to-obtain-all-the-axes-handles-in-a-figure-handle
set(copied_legend, "FontSize", FontSize);
set (gca(), "linewidth", 1.5);
plot(Entropie_4_1, Temperatur_1_2, "o", "color", "k");
text(Entropie_4_1, Temperatur_1_2 * 1.025, "1", "color", "k", "FontSize", FontSize);
plot(Entropie_2_3, Temperatur_1_2, "o", "color", "k");
text(Entropie_2_3, Temperatur_1_2 * 1.025, "2", "color", "k", "FontSize", FontSize);
plot(Entropie_2_3, Temperatur_3_4, "o", "color", "k");
text(Entropie_2_3, Temperatur_3_4 * 1.025, "3", "color", "k", "FontSize", FontSize);
plot(Entropie_4_1, Temperatur_3_4, "o", "color", "k");
text(Entropie_4_1, Temperatur_3_4 * 1.025, "4", "color", "k", "FontSize", FontSize);
endfunction
%
% Volumen_a_b
%
function ret = Volumen_a_b(Volumen_a, Volumen_b, Zaehler, Laenge)
Steps = 20;
Vorzeichen = +1;
delta = (Volumen_b-Volumen_a)*Zaehler/(Laenge-1);
if(delta == 0)
if(Volumen_b > Volumen_a)
delta = +0.01;
else
delta = -0.01;
endif
endif
ret = Volumen_a:delta/Steps:Volumen_a+delta;
endfunction
%
% SeqPause
%
function retZaehler = SeqPause(Zaehler)
global parameters;
for Zaehler_Pause = Zaehler:(Zaehler-1+parameters.FrameRate*parameters.Pause)
filename = ["./svg/carnot-", num2str(Zaehler_Pause, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
endfor
retZaehler = Zaehler_Pause + 1;
endfunction
%
% Carnot_Process_1_2
%
function retZaehler = Carnot_Process_1_2(Zaehler)
global parameters;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
SequenzLaenge = parameters.SequenzLaenge;
Druck_1 = parameters.Druck_1;
Temperatur_1_2 = parameters.Temperatur_1_2;
Entropie_4_1 = parameters.Entropie_4_1;
Entropie_2_3 = parameters.Entropie_2_3;
Faktor = parameters.Faktor;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
subplot(1,2,2); % p-V-Diagram
hold("on");
Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
area(Volumen_1_2, Druck_1_2/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_1_2(end), Druck_1_2(end)/1e5, "x", "color", "k")
text(Volumen_2 + (Volumen_1-Volumen_2)/5, Druck_1/(1e5*2), "W₁₂=∫p·dV<0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % T-S-Diagramm
hold("on");
Entropie_1_2 = Berechne_SpezifischeEntropie(Volumen_1_2/Volumen_1, Temperatur_1_2) * Faktor;
Temperatur_1_2_A = ones(size(Entropie_1_2)) * Temperatur_1_2;
area(Entropie_1_2, Temperatur_1_2_A, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_1_2(end), Temperatur_1_2_A(end), "x", "color", "k")
text(Entropie_2_3 + (Entropie_4_1-Entropie_2_3)/5, Temperatur_1_2/2, "Q₁₂=∫T·dS<0", "color", "k", "FontSize", FontSize);
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Process_2_3
%
function retZaehler = Carnot_Process_2_3(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FontSize = parameters.FontSize;
FrameRate = parameters.FrameRate;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Druck_2 = parameters.Druck_2;
kappa = parameters.kappa;
Temperatur_1_2 = parameters.Temperatur_1_2;
SequenzLaenge = parameters.SequenzLaenge;
Faktor = parameters.Faktor;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_2_3 = Volumen_a_b(Volumen_2, Volumen_3, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
Druck_2_3 = Druck_2 * (Volumen_2 ./ Volumen_2_3) .^ kappa;
subplot(1,2,2); % p-V-Diagram
hold("on");
area(Volumen_2_3, Druck_2_3/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_2_3(end), Druck_2_3(end)/1e5, "x", "color", "k")
text(Volumen_3 + (Volumen_2-Volumen_3)/5, Druck_2/(1e5*2), "W₂₃=∫p·dV<0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % p-V-Diagram
hold("on");
Temperatur = Temperatur_1_2 * (Volumen_2 ./ Volumen_2_3).^(kappa - 1); % Isentrop
Entropie_2_3_A = ones(size(Temperatur)) * Entropie_2_3;
area(Entropie_2_3_A, Temperatur, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_2_3_A(end), Temperatur(end), "x", "color", "k")
text(Entropie_2_3 - (Entropie_4_1-Entropie_2_3)/5, Temperatur_1_2/2, "Q₂₃=∫T·dS=0", "color", "k", "FontSize", FontSize);
hold("off");
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print(filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Process_3_4
%
function retZaehler = Carnot_Process_3_4(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
Druck_3 = parameters.Druck_3;
Druck_4 = parameters.Druck_4;
FrameRate = parameters.FrameRate;
Faktor = parameters.Faktor;
Temperatur_1_2 = parameters.Temperatur_1_2;
Temperatur_3_4 = parameters.Temperatur_3_4;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
%Druck_4 = InnereEnergie_3_4 ./ Volumen_4;
%Druck_3_4 = InnereEnergie_3_4 ./ Volumen_3_4;
%Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
Druck_3_4 = Druck_3 * Volumen_3 ./ Volumen_3_4;
subplot(1,2,2); % p-V-Diagram
hold("on");
area(Volumen_3_4, Druck_3_4/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_3_4(end), Druck_3_4(end)/1e5, "x", "color", "k")
text(Volumen_3 + (Volumen_4-Volumen_3)/5, Druck_4/(1e5*2), "W₃₄=∫p·dV>0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % T-S-Diagram
hold("on");
Entropie_3_4 = Berechne_SpezifischeEntropie(Volumen_3_4/Volumen_1, Temperatur_3_4) * Faktor;
Temperatur_3_4_A = ones(size(Entropie_3_4)) * Temperatur_3_4;
area(Entropie_3_4, Temperatur_3_4_A, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_3_4(end), Temperatur_3_4_A(end), "x", "color", "k")
text(Entropie_2_3 + (Entropie_4_1-Entropie_2_3)/5, Temperatur_3_4/2, "Q₃₄=∫T·dS>0", "color", "k", "FontSize", FontSize);
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Process_4_1
%
function retZaehler = Carnot_Process_4_1(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
Volumen_4 = parameters.Volumen_4;
Volumen_1 = parameters.Volumen_1;
Entropie_2_3 = parameters.Entropie_2_3;
Entropie_4_1 = parameters.Entropie_4_1;
kappa = parameters.kappa;
Druck_1 = parameters.Druck_1;
Temperatur_3_4 = parameters.Temperatur_3_4;
% Zaunpfahlproblem 0 - 100% in hundert Schritten
for Zaehler_Seq = Zaehler:(Zaehler+FrameRate*SequenzLaenge-1)
close();
Volumen_4_1 = Volumen_a_b(Volumen_4, Volumen_1, Zaehler_Seq-Zaehler, FrameRate*SequenzLaenge);
% ₃
hold("on");
subplot(1,2,2); % p-V-Diagram
hold("on");
Druck_4_1 = Druck_1 * (Volumen_1 ./ Volumen_4_1) .^ kappa;
area(Volumen_4_1, Druck_4_1/1e5, "FaceColor", "c");
Hintergrund_Plot();
plot(Volumen_4_1(end), Druck_4_1(end)/1e5, "x", "color", "k")
text(Volumen_4 + (Volumen_1-Volumen_4)/5, Druck_1/(1e5*2), "W₄₁=∫p·dV>0", "color", "k", "FontSize", FontSize);
hold("off");
subplot(1,2,1); % T-S-Diagram
hold("on");
Temperatur = Temperatur_3_4 * (Volumen_4 ./ Volumen_4_1).^(kappa - 1); % Isentrop
Entropie_4_1_A = ones(size(Temperatur)) * Entropie_4_1;
area(Entropie_4_1_A, Temperatur, "FaceColor", "c");
Hintergrund_Plot_T_S();
plot(Entropie_4_1_A(end), Temperatur(end), "x", "color", "k")
text(Entropie_4_1 - (Entropie_4_1-Entropie_2_3)/5, Temperatur_3_4/2, "Q₄₁=∫T·dS=0", "color", "k", "FontSize", FontSize);
hold("off");
filename = ["./svg/carnot-", num2str(Zaehler_Seq, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
hold("off");
endfor
Zaehler = Zaehler_Seq + 1;
Zaehler = SeqPause(Zaehler);
retZaehler = Zaehler;
close();
endfunction
%
% Carnot_Delta
%
function retZaehler = Carnot_Delta(Zaehler)
global parameters;
SequenzLaenge = parameters.SequenzLaenge;
FrameRate = parameters.FrameRate;
FontSize = parameters.FontSize;
Volumen_1 = parameters.Volumen_1;
Volumen_2 = parameters.Volumen_2;
Volumen_3 = parameters.Volumen_3;
Volumen_4 = parameters.Volumen_4;
Druck_1 = parameters.Druck_1;
Druck_2 = parameters.Druck_2;
Druck_3 = parameters.Druck_3;
Druck_4 = parameters.Druck_4;
kappa = parameters.kappa;
Entropie_4_1 = parameters.Entropie_4_1;
Entropie_2_3 = parameters.Entropie_2_3;
Temperatur_1_2 = parameters.Temperatur_1_2;
Temperatur_3_4 = parameters.Temperatur_3_4;
Volumen = 0:0.1:parameters.PlotSize; % 2..4 / 4..9
% 1 -> 2 Isotherm
Volumen_1_2 = Volumen_a_b(Volumen_1, Volumen_2, 1, 2);
Druck_1_2 = Druck_1 * Volumen_1 ./ Volumen_1_2;
% 2 -> 3 Isentrop
Volumen_2_3 = Volumen_a_b(Volumen_2, Volumen_3, 1, 2);
Druck_2_3 = Druck_2 * (Volumen_2 ./ Volumen_2_3) .^ kappa;
% 3 -> 4 Isotherm
Volumen_3_4 = Volumen_a_b(Volumen_3, Volumen_4, 1, 2);
Druck_3_4 = Druck_3 * Volumen_3 ./ Volumen_3_4;
% 4 -> 1 Isentrop
Volumen_4_1 = Volumen_a_b(Volumen_4, Volumen_1, 1, 2);
Druck_4_1 = Druck_4 * (Volumen_4 ./ Volumen_4_1) .^ kappa;
subplot(1,2,2); % p-V-Diagram
hold("on");
Volumen = [Volumen_1_2, Volumen_2_3, Volumen_3_4, Volumen_4_1 ];
Druck = [Druck_1_2, Druck_2_3, Druck_3_4, Druck_4_1 ];
fill(Volumen, Druck/1e5, "c");
Hintergrund_Plot();
plot([(Volumen_2+Volumen_4)/2, Volumen_4+0], [(Druck_2+Druck_4)/(1e5*2), Druck_4/1e5+1], "color", "k", "linewidth", 2);
text(Volumen_4+0, Druck_4/1e5+1, "ΔW = ΔQ", "FontSize", FontSize);
subplot(1,2,1); % T-S-Diagram
hold("on");
Temperatur = [Temperatur_1_2, Temperatur_1_2, Temperatur_3_4, Temperatur_3_4 ];
Entropie = [Entropie_4_1, Entropie_2_3, Entropie_2_3, Entropie_4_1];
fill(Entropie, Temperatur, "c");
Hintergrund_Plot_T_S();
text((Entropie_2_3+Entropie_4_1)/2, (Temperatur_1_2+Temperatur_3_4)/2, "ΔQ", "FontSize", FontSize);
hold("off");
for Zaehler_Final = Zaehler:1:Zaehler + SequenzLaenge*FrameRate - 1
filename = ["./svg/carnot-", num2str(Zaehler_Final, "%04i"), ".svg"]
print (filename, "-dsvg", parameters.Dimensions);
endfor
retZaehler = Zaehler_Final + 1;
close();
endfunction
%
% Berechne_Volumen_4
%
function Volumen = Berechne_Volumen_4()
global parameters;
% Volumen = ( parameters.Entropie_4_1 / parameters.InnereEnergie_3_4)^(1/(parameters.kappa-1)); % Schnittpunkt
Volumen_3 = parameters.Volumen_3;
Volumen_1 = parameters.Volumen_1;
Druck_1 = parameters.Druck_1;
Druck_3 = parameters.Druck_3;
kappa = parameters.kappa;
% V_4 / V_3 = p_3 / p_4 % Isotherm
% p_4 = p_1 * (V_1 / V_4) ^ kappa % Isentrop
temp = Volumen_3 / Volumen_1^kappa * (Druck_3 / Druck_1);
Volumen = temp^(1/(1-kappa));
endfunction
%
% Berechne Druck in N / m^2
%
function Druck = Berechne_SpezifischenDruck(Volumen, Temperatur)
global parameters;
R_S = parameters.R_S;
Druck = R_S * 1000. * Temperatur ./ Volumen;
endfunction
%
% Berechne spezifische Entropie in kJ / K
%
function S_spez = Berechne_SpezifischeEntropie(Volumen, Temperatur)
global parameters;
S_Std = parameters.S_Std;
R_S = parameters.R_S;
T_Std = parameters.T_Std;
p_Std = parameters.p_Std;
Druck = Berechne_SpezifischenDruck(Volumen, Temperatur);
C_p = parameters.C_p;
C_V = parameters.C_V;
Delta_Entropie = R_S * (C_p * log(Temperatur/T_Std) - log(Druck/p_Std));
S_spez = S_Std + Delta_Entropie;
endfunction
%
% Berechne spezifische InnereEnergie
%
function InnereEnergie = Berechne_SpezifischeInnereEnergie(Entropie, Temperatur, Volumen)
global parameters;
Druck = Berechne_SpezifischenDruck(Volumen, Temperatur);
InnereEnergie = Entropie * Temperatur - Druck * Volumen/1000; % kJ
endfunction
%
% Testberechnungen
%
function Testberechnungen()
global parameters;
Druck_1 = parameters.InnereEnergie_1_2 ./ parameters.Volumen_1 % Druck der spezifischen Masse
Druck_2 = parameters.InnereEnergie_1_2 ./ parameters.Volumen_2;
Druck_3 = parameters.Entropie_2_3 ./ (parameters.Volumen_3 ^ parameters.kappa);
delta_W_1_2 = Druck_1 * parameters.Volumen_1 * log(parameters.Volumen_1 / parameters.Volumen_2)
delta_S_1_2 = delta_W_1_2 / parameters.Temperatur_1_2
delta_T_2_3 = parameters.Temperatur_1_2 * (Druck_3/Druck_2)^((parameters.kappa - 1)/parameters.kappa)% Isentrop
V_spez = 1;
T_std = 50. + 273.
S_spez = Berechne_SpezifischeEntropie(V_spez, T_std) * 9;
S_spez
U_spez = Berechne_SpezifischeInnereEnergie(S_spez, T_std, V_spez) * 9;
U_spez
endfunction
%
%
% M A I N
%
%
begin_cputime = cputime();
global parameters;
% Arbeitsgas: ARGON
% U_mol = T * S_mol - R * T % molare Innere Energie
% R_S = R / M_Argon % spezifische Gaskonstante Argon
% U_S = T * S_S - R_S * T % spezifische Innere Energie Argon
% S_S = 3,875 % kJ/K pro kg % spezifische Entropie Argon
parameters.M_S = 0.03995; % kg/mol spezifische Masse für Argon
parameters.R_S = 8.3145e-3 / parameters.M_S; % kJ / kg * K spezifische Gaskonstante für Argon
parameters.S_Std = 3.876; % kJ / K spezifische Entropie Argon bei 1 bar und 25°C (siehe Joensson)
parameters.T_Std = 25 + 273; % Temperatur für Standard-Entropie
parameters.p_Std = 1.e5; % Druck für Standard-Entropie
parameters.C_p = 5 / 2; % isobare Wärmekapazität zweiatomiges Gas
parameters.C_V = 3 / 2; % isochore Wäremkapazität zweiatomiges Gas (Wasserstoff)
parameters.kappa = 5 / 3; % C_p / C_V = 7/5 % zweiatomiges Gas
% R = p * V / n * T
% R_S = V * p / T
% R_S = R / M_Argon
% U = S * T - p * V @ Masse x kg
% spezifische Referenzentropie im Punkt 1
% p * V * T = Const
% p * V = const. % isotherm
% p_1/p_2 = V_2/V_1 % des selben Gases
% p * V^kappa = const.
% p_1/p_2 = ( V_2 / V_1 ) ^ kappa
% PARAMETER
parameters.FrameRate = 20; % pro Sekunde
% parameters.FrameRate = 2; % Debug
parameters.Pause = 3; % in Sekunden
parameters.SequenzLaenge = 10;
parameters.FinalLaenge = 10;
parameters.Dimensions = "-S4800,2700"; % odd scale facotr
parameters.FontSize = 18;
parameters.PlotSize = 20;
% VOLUMEN
parameters.Faktor = 9.;
parameters.Volumen_1 = parameters.Faktor; % 9 * V_S spezifisches Volumen
parameters.Volumen_2 = 2.6;
parameters.Volumen_3 = 1.;
% Volumen_4 resultiert aus den anderen drei Werten
parameters.Temperatur_1_2 = 273 + 50; % 50°C
% ENTROPIE
% parameters.InnereEnergie_1_2 = 6.045; % Startwert % spezifische Innere Energie
spez_Entropie_4_1 = Berechne_SpezifischeEntropie(1., parameters.Temperatur_1_2);
parameters.Entropie_4_1 = spez_Entropie_4_1 * parameters.Faktor;
parameters.Druck_1 = Berechne_SpezifischenDruck(1., parameters.Temperatur_1_2);
parameters.Temperatur_3_4 = parameters.Temperatur_1_2 * (parameters.Volumen_2/parameters.Volumen_3)^(parameters.kappa - 1); % Isentrop
spez_Entropie_2_3 = Berechne_SpezifischeEntropie(parameters.Volumen_3/parameters.Volumen_1, parameters.Temperatur_3_4);
parameters.Entropie_2_3 = parameters.Faktor * spez_Entropie_2_3;
% DRUCK
parameters.Druck_2 = parameters.Druck_1 * parameters.Volumen_1 / parameters.Volumen_2;
parameters.Druck_3 = parameters.Druck_2 * (parameters.Volumen_2 / parameters.Volumen_3) ^ (parameters.kappa);
parameters.Temperatur_3_4 = parameters.Temperatur_1_2 * (parameters.Volumen_2/parameters.Volumen_3)^(parameters.kappa - 1); % Isentrop
parameters.Volumen_4 = Berechne_Volumen_4();
parameters.Druck_4 = parameters.Druck_1 * (parameters.Volumen_1 / parameters.Volumen_4) ^ (parameters.kappa);
spez_Entropie_2_3 = Berechne_SpezifischeEntropie(parameters.Volumen_2/parameters.Volumen_1, parameters.Temperatur_1_2); % Falsifikation
spez_Entropie_2_3 * parameters.Faktor
%Testberechnungen();
parameters
%
% Carnot-Kreisprozess
%
Zaehler = 0;
printf("Carnot_Process_1_2()\n");
Zaehler
Zaehler = Carnot_Process_1_2(Zaehler);
printf("Carnot_Process_2_3()\n");
Zaehler
Zaehler = Carnot_Process_2_3(Zaehler);
printf("Carnot_Process_3_4()\n");
Zaehler
Zaehler = Carnot_Process_3_4(Zaehler);
printf("Carnot_Process_4_1()\n");
Zaehler
Zaehler = Carnot_Process_4_1(Zaehler);
printf("Carnot_Process_Delta()\n");
Zaehler
Zaehler = Carnot_Delta(Zaehler);
Zaehler
%Hintergrund_Plot()
printf("Total cpu time: %f seconds\n", cputime()-begin_cputime);
printf("Finished\n");
In dieser Datei abgebildete Objekte
Motiv
Einige Werte ohne einen Wikidata-Eintrag
19. Juni 2014
application/ogg
7effed8b78ef4ec74eca09c9419e56158f422d5b
2.736.713 Byte
62 Sekunde
1.296 Pixel
2.304 Pixel
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Maße | Benutzer | Kommentar | |
---|---|---|---|---|
aktuell | 12:51, 19. Jun. 2014 | (2,61 MB) | wikimediacommons>Menner | User created page with UploadWizard |
Dateiverwendung
Die folgenden 2 Seiten verwenden diese Datei: