Показать сообщение отдельно
Старый 06.07.2013, 16:36   #5 (permalink)
Матроскин
4846АМ
 
Аватар для Матроскин
 
Регистрация: 07.05.2010
Сообщений: 1,941
Записей в дневнике: 22
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 3 сообщениях
Репутация: 7564
По умолчанию

Возродим тему?
Есть задача, которая рассчитывает мгновенную производительность насоса. Есть задача, которая рассчитывает ряды фурье по определенной формуле. нужно преобразовать задачи так, чтобы ряды высчитывались для мгновенной производительности насоса. Подскажите, как мне это сделать?
ряды
Код:
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.
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем
Матроскин вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070