Возродим тему?
Есть задача, которая рассчитывает мгновенную производительность насоса. Есть задача, которая рассчитывает ряды фурье по определенной формуле. нужно преобразовать задачи так, чтобы ряды высчитывались для мгновенной производительности насоса. Подскажите, как мне это сделать?
ряды
Код:
const ee=0.001; aa=0; bb=Pi; period=bb-aa; II=0.003;
var kk,nn:integer; f1,f2:text; a0,t,dt,St,Ampl,phi,I,I2:real; ak,bk:array [1..100] of real;
function f(t:real):real;
begin
if (t>=0) and (t<1) then f:=t;
if (t>=1) and (t<2) then f:=1;
if (t>=2) then f:=6-2*t;
end;
function Si(c,kk:integer):real;
var t,dt,e,ss,s:real; z:integer;
begin
dt:=(bb-aa)/50;
repeat
ss:=s;
dt:=dt/2;
case c of
1: s:=f(aa)+f(bb);
2: s:=f(aa)*cos(2*Pi*kk*aa/period)+f(bb)*cos(2*Pi*kk*bb/period);
3: s:=f(aa)*sin(2*Pi*kk*aa/period)+f(bb)*sin(2*Pi*kk*bb/period);
4: s:=f(aa)*f(aa)+f(bb)*f(bb);
end;
t:=aa+dt;
z:=-1;
while t<bb do
begin
z:=-z;
case c of
1: s:=s+f(t)*(3+z);
2: s:=s+f(t)*cos(2*Pi*kk*t/period)*(3+z);
3: s:=s+f(t)*sin(2*Pi*kk*t/period)*(3+z);
4: s:=s+f(t)*f(t)*(3+z);
end;
t:=t+dt;
end;
s:=2*s*dt/3/period;
if abs(s)<ee then begin
s:=0;
e:=0;
end
else e:=abs((ss-s)/s);
until e<=ee;
Si:=s;
end;
begin
a0:=Si(1,0);
I:=Si(4,kk)/2-sqr(a0)/4;
writeln(' k a[k] b[k] I Amplituda phi');
assign(f1,'F:\af.txt');
rewrite(f1);
repeat
nn:=nn+1;
ak[nn]:=Si(2,nn);
write(nn:2,ak[nn]:9:4);
bk[nn]:=Si(3,nn);
write(bk[nn]:9:4);
I2:=sqr(ak[nn])+sqr(bk[nn]);
Ampl:=sqrt(sqr(ak[nn])+sqr(bk[nn]));
if (ak[nn]>0) and (bk[nn]>0) then phi:=arctan(ak[nn]/bk[nn]);
if (ak[nn]>0) and (bk[nn]<0) then phi:=arctan(ak[nn]/bk[nn])+pi;
if (ak[nn]>0) and (bk[nn]=0) then phi:=pi/2;
if (ak[nn]<0) and (bk[nn]>0) then phi:=arctan(ak[nn]/bk[nn])+2*pi;
if (ak[nn]<0) and (bk[nn]<0) then phi:=arctan(ak[nn]/bk[nn])+pi;
if (ak[nn]<0) and (bk[nn]=0) then phi:=3*pi/2;
if (ak[nn]=0) and (bk[nn]>0) then phi:=0;
if (ak[nn]=0) and (bk[nn]<0) then phi:=pi;
if (ak[nn]=0) and (bk[nn]=0) then writeln('net');
I:=I-I2/2; write(I:8:4);
write(Ampl:9:2);
writeln(phi*180/pi:8:0);
writeln(f1,nn:2,ak[nn]:8:4,bk[nn]:8:4,Ampl:7:2,phi*180/pi:9:0);
until I<=II;
dt:=(period)/(40*nn);
t:=aa;
assign(f2,'F:\furie.txt');
rewrite(f2);
while t<=bb do
begin
St:=a0/2;
for kk:=1 to nn do
St:=St+ak[kk]*cos(2*pi*kk*t/period)+bk[kk]*sin(2*pi*kk*t/period);
writeln(f2,' ',t:0:5,' ',f(t):0:5,' ',St:0:5);
t:=t+dt;
end;
close(f1); close(f2);
writeln('n=',nn);
end.
Производительность насоса
Код:
program practica1;
var fi, fik,delFi,C2,q,min,sig,max,dp,hmax:real;
k:integer;
txt:text;
const z=9;qsr=20;n=3000;v=qsr*1000/n;omg=Pi*n/30;kh=1.1;B=2*Pi/z;
begin
assign (txt, 'C:\Users\user\Desktop\ïðàêòèêà\result4.txt');
rewrite (txt);
dp:=power(((4*v)/(kh*Pi*z)),1/3);
hmax:=kh*dp;
C2:=(Pi*sqr(dp)/4)*(hmax/2)*omg;
delFi:=2*Pi/(2*z*40);
min:=1000;
fi:=0;
while fi <=2*Pi do
begin
q:=0;
for k:=1 to z do
begin
Fik:=fi+(k-1)*B;
if sin(fik)>=0 then q:=q+sin(fik);
end;
q:=q*C2;
writeln(fi*180/pi,' ',q);
write(txt, fi*180/pi, ' ',q);
writeln (txt);
if q > max then max:=q;
if min > q then min:=q;
fi:=fi+delFi;
end;
sig:=((max-min)/max)*100;
writeln (sig);
close (txt);
end.