Местами при реализации некоторых специальных функций, которые представлены разложением в степенной ряд, у меня случаются вообще тотальные дефекты, как дело доходит до построения графика написанной функции… Так вышло у меня с функцией Вейерштрасса (зачетная вещь, не имеющая производной на всей области определения), с которой я некоторое время мучился и получал вместо фракталоподобного графика рисунок, похожий на узор капроновых колготок (да, да, именно так и получалось)! Но потом все-таки (путем тотальной детализации расчетов) я таки разложил её в ряд на Icon!
И вот как это выглядит:
procedure weer(a,b,x) local i,k,m,s i:=0 s:=0 while i<10 do { k:=cos(&pi*x*(a^i)) m:=b^i s+:=k*m i+:=1 } return s end
А вот что получается, если применить команду weer(2,0.5,i/200.0):
На всякий случай выкладываю полную версию кода, в которой помимо этой забавной функции вложен еще и один из интегралов Френеля:
link graphics,factors procedure main() local W,l,i,k W:=WOpen("size=500,500") grid_coord() i:=-250 while i<250 do { Fg("red") DrawPoint(i+250,250-100*weer(2,0.5,i/200.0)) i+:=0.01 } WDone() end procedure grid_coord() local i Fg("lightgray") every i:=0 to 500 by 10 do { DrawLine(i,0,i,500) DrawLine(0,i,500,i) } Fg("black") DrawLine(0,250,500,250) DrawLine(250,0,250,500) end procedure weer(a,b,x) local i,k,m,s i:=0 s:=0 while i<10 do { k:=cos(&pi*x*(a^i)) m:=b^i s+:=k*m i+:=1 } return s end procedure frenel_s(x) local s,i,a,b,c s:=0 i:=0 while i<10 do { a:=(-1)^i b:=4*i+3 c:=a*(x^b) d:=factorial(2*i+1)*b s+:=c/d i+:=1 } return s end