continue calc with pre result from loop

8 Ansichten (letzte 30 Tage)
e27h
e27h am 13 Apr. 2016
Hi, i want that after elseif (now only p_Z1(k)=100000) calculate my p_Z1(k) with the last result of elseif (p_Z1(k)=p_Z1(k-1)+dp_Z1(k-1);) for p_Umg that its calculate p_Z1(k)=p_Umg(--> should be last result of p_Z1 in elseif loop)/((V_Z1(k)/V_max)^kappa);
How can i do that?
How can i improve my code, because if i use more than 100 for ainput my computer calculate long time und sometimes give error because of program space.
Thank you in advance!
if true
ainput=input(['\n\n Anzahl Arbeitsspiele']);
kolbenwegmax=2*pi*0.057;
b_Z1=0.03;
h_Z1=0.03;
A_kolben=b_Z1*h_Z1;
V_max=kolbenwegmax*A_kolben;
p_Umg=101325; %Umgebungsdruck in pascal
T_Umg=293.75; %Umgebungstemperatur in Kelvin
kappa=1.4;
c_p=1005; %
c_v=718; %
R=287; %
T_w=50; %50 Kelvin ist T_Wand erhöht
VE_Z1_offen=330; %Ventil Zylinder 1->2 auf
VE_Z1_zu=350; %Ventil Zylinder 1 zu
A_VE1=0.00005; % Ventilquerschnitt in m^2
dt=1/(6*2400*100); % dt=1/6n * 100 für 1/100°KW
if isempty(ainput)
ainput=10;
end
alphai=0:0.01:(ainput*360);
kw = zeros(size(alphai));
for k = 1:numel(alphai)
if alphai(k)>360
kw_ungerundet=alphai(k)/360;
kw(k)=alphai(k)-(floor(kw_ungerundet)*360);
VE_Z1_o(k)=VE_Z1_offen+VE_Z1_offen*(floor(kw_ungerundet));
VE_Z1_z(k)=VE_Z1_zu+VE_Z1_zu*(floor(kw_ungerundet));
else
kw(k)=alphai(k);
VE_Z1_o(k)=VE_Z1_offen;
VE_Z1_z(k)=VE_Z1_zu;
end
s_k(k)=kolbenwegmax*(kw(k)/360); %Kolbenweg
if k > 32001
s_k2(k)=(kolbenwegmax*((kw(k-32000))/360)); %Kolbenweg 2
else
s_k2(k)=0.5;
end
V_Z1(k)=A_kolben*(s_k(k)-kolbenwegmax)*(-1);
V_Z2(k)=A_kolben*(s_k2(k));
dV_Z1=-8.953539062722324e-09; %diff(V_Z1);
dV_Z2=8.953539062722324e-09;
if alphai(k)<VE_Z1_offen
p_Z1(k)=p_Umg/((V_Z1(k)/V_max)^kappa);
T_Z1(k)=T_Umg/((p_Umg/p_Z1(k))^((kappa-1)/kappa));
p_Z2(k)=101325;
T_Z2(k)=293.15;
elseif alphai(k)>=VE_Z1_o(k) && alphai(k)<=VE_Z1_z(k)
p_Z1(k)=p_Z1(k-1)+dp_Z1(k-1); % Zeile 56
T_Z1(k)=T_Z1(k-1)+dT_Z1(k-1);
p_Z2(k)=p_Z2(k-1)+dp_Z2(k-1);
T_Z2(k)=T_Z2(k-1)+dT_Z2(k-1);
else
p_Z1(k)=100000; % Zeile 61
T_Z1(k)=800;
p_Z2(k)=50000;
T_Z2(k)=600;
end
pi_druck(k)=p_Z2(k)/p_Z1(k);
if pi_druck(k)<0.52
pi_druck(k)=0.52;
end
c_s(k)=sqrt(2*c_p*T_Z1(k)*(1-(pi_druck(k)^((kappa-1)/kappa)))); %Schallgeschwindigkeit
rho_1(k)=p_Z1(k)/(T_Z1(k)*R); % Dichte 1
rho_2(k)=p_Z2(k)/(T_Z2(k)*R); % Dichte 2
rho(k)=rho_1(k)*(pi_druck(k)^(1/kappa)); %Dichte Strömung 1->2
m1(k)=rho_1(k)*V_Z1(k); %Masse im Zylinder 1
m2(k)=rho_2(k)*V_Z2(k); %Masse im Zylinder 2
m_punkt(k)=c_s(k)*rho(k)*A_VE1;
dW_Z1(k)=dV_Z1*p_Z1(k); %Volumenänderungsarbeit Z1
dW_Z2(k)=dV_Z2*p_Z2(k); %Volumenänderungsarbeit Z2
dm(k)=m_punkt(k)*dt; %Masseveränderung 1->2
dH(k)=dm(k)*T_Z1(k)*c_p; %Enthalpieänderung
alpha_w(k)=127.93*(0.03^(-0.2))*((p_Z1(k)*10^-5)^0.8)*(T_Z1(k)^(-0.53))*(41.408^.8);
alpha_w2(k)=127.93*(0.03^(-0.2))*((p_Z2(k)*10^-5)^0.8)*(T_Z2(k)^(-0.53))*(41.408^.8);
dQw_Z1(k)=(2*b_Z1*h_Z1+4*b_Z1*(kolbenwegmax-s_k(k)))*alpha_w(k)*(273.15+T_w-T_Z1(k))*dt; %Wandwärmeverluste
dQw_Z2(k)=(2*b_Z1*h_Z1+4*b_Z1*(s_k2(k)))*alpha_w2(k)*(273.15+T_w-T_Z2(k))*dt; %Wandwärmeverluste
dT_Z1(k)=-(dH(k)+(c_v*T_Z1(k)*(-dm(k)))+dW_Z1(k)-dQw_Z1(k))/(m1(k)*c_v); %Temperaturänderung
dp_Z1(k)=((m1(k)*R*dT_Z1(k))+(R*T_Z1(k)*(-dm(k)))-dW_Z1(k))/V_Z1(k); %Druckänderung
dT_Z2(k)=(dH(k)-(c_v*T_Z2(k)*dm(k))-dW_Z2(k)+dQw_Z2(k))/(m2(k)*c_v);
dp_Z2(k)=((m2(k)*R*dT_Z2(k))+(R*T_Z2(k)*dm(k))-dW_Z2(k))/V_Z2(k); %Druckänderung
end end

Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by