05.06.2013, 10:07 | #1 (permalink) |
4846АМ
Регистрация: 07.05.2010
Сообщений: 1,941
Записей в дневнике: 22
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 3 сообщениях
Репутация: 7564
|
Ряды Фурье
Ошибка: неверно вычисляет a0 b0 Код: Код:
Program ryad; const aa=-Pi; bb=Pi; nn=20; eps=1e-3; var a0,ak,bk:real; k:integer; a,b:array[1..nn] of real; function f(x:real):real; begin f:=x+Pi end; function integ (c,k:integer):real; var x, xn, dx, s, ss, e :real; i, n:integer; begin dx:=bb-aa; n:=1; repeat ss:=s; s:=0; n:=n*2; dx:=dx/2; x:=aa; for i:=1 to n do begin xn:=x+dx; case c of 0: s:=s+((1/Pi)*(f(x)+f(xn))/2*dx); 1: s:=s+((1/Pi)*(f(x)*cos(k*x)+f(xn)*cos(k*xn))/2*dx); 2: s:=s+((1/Pi)*(f(x)*sin(k*x)+f(xn)*sin(k*xn))/2*dx); end; x:=x+dx; end; if abs(s)>(1/1000) then e:=abs((ss-s)/s) else begin e:=0; s:=0; end; until e<eps; integ:=s end; begin a0:=integ (0,0); writeln(a0); for k:=1 to nn do begin a[k]:=integ(1,k); write('ak ', a[k]); b[k]:=integ(2,k); writeln(' bk ', b[k]); end; end.
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем |
05.06.2013, 10:07 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вашего прочтения ждут аналогичные топики Ряды: найти сумму, исследовать на сходимость |
05.06.2013, 10:33 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ничего не понял. Какие вообще могут быть ряды Фурье у непериодической (в данном случае - линейной) функции? Что-то новенькое.
|
05.06.2013, 13:50 | #3 (permalink) |
4846АМ
Регистрация: 07.05.2010
Сообщений: 1,941
Записей в дневнике: 22
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 3 сообщениях
Репутация: 7564
|
как объяснил препод должно быть нечто такое http://upload.wikimedia.org/wikipedi...y_function.gif . Но сейчас, после курения литературы, я уже начинаю думать, что я его не правильно понял. Ладно, в курсовой их делать больше не надо, так что тему можно закрывать за ненадобностью.
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем |
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
|
06.07.2013, 17:01 | #6 (permalink) |
Радиоинженер
Регистрация: 25.09.2012
Адрес: г.Дзержинск Нижегородской обл.
Сообщений: 25,308
Записей в дневнике: 7
Сказал(а) спасибо: 292
Поблагодарили 219 раз(а) в 70 сообщениях
Репутация: 110185
|
Ряды Фурье на столько всеобъемлющи, что с помощью них можно решить практически любую задачу. Даже посчитать мгновенную производительность насоса, разложив его в ряд.
Уточните пожалуйста, как именно Вы пранируете расчитать мгновенную производительность насоса при помощи рядов Фурье. Желательно расписать алгоритм. |
06.07.2013, 20:46 | #7 (permalink) |
4846АМ
Регистрация: 07.05.2010
Сообщений: 1,941
Записей в дневнике: 22
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 3 сообщениях
Репутация: 7564
|
Для первого графика (рис1) нужно построить такой же график как на рисунке 2 ряд 2 (на сколько я понял препода)
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|