Показать сообщение отдельно
Старый 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.
Где я допустил ошибку?
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем
Матроскин вне форума   Ответить с цитированием
Ads

Яндекс

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