Функция Вейерштрасса

Местами при реализации некоторых специальных функций, которые представлены разложением в степенной ряд, у меня случаются вообще тотальные дефекты, как дело доходит до построения графика написанной функции… Так вышло у меня с функцией Вейерштрасса (зачетная вещь, не имеющая производной на всей области определения), с которой я некоторое время мучился и получал вместо фракталоподобного графика рисунок, похожий на узор капроновых колготок (да, да, именно так и получалось)! Но потом все-таки (путем тотальной детализации расчетов) я таки разложил её в ряд на 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


Добавить комментарий