Вот это да! Если только не наврал. Получилась сумма квадратов отклонений по 38 точкам
. Это означает, что близость кривой к точкам даже очень. Сама кривая тут:
http://www.wolframalpha.com/input/?i=po ... D0..3.3%29Не могу не сказать, как была получена. Вот переход к полярным координатам. Колонки идут так:
Код:
0.105 0.029 0.26947 0.10893
0.184 0.088 0.44611 0.20396
0.251 0.163 0.57595 0.29928
0.301 0.255 0.70285 0.39449
0.339 0.364 0.82095 0.49741
0.356 0.464 0.91635 0.58484
0.360 0.527 0.97149 0.63822
0.347 0.649 1.07980 0.73594
0.314 0.753 1.17572 0.81585
0.247 0.866 1.29295 0.90054
0.180 0.937 1.38101 0.95413
0.088 0.987 1.48187 0.99092
0.000 1.000 1.57080 1.00000
-0.105 0.967 1.67896 0.97268
-0.188 0.891 1.77875 0.91062
-0.243 0.774 1.87500 0.81125
-0.264 0.628 1.96875 0.68123
-0.247 0.498 2.03123 0.55589
-0.192 0.310 2.12533 0.36464
-0.117 0.167 2.18192 0.20391
-0.063 0.084 2.21430 0.10500
0.079 -0.084 2.32553 0.11531
0.180 -0.167 2.39364 0.24554
0.280 -0.243 2.42682 0.37074
0.406 -0.310 2.48948 0.51082
0.544 -0.364 2.55190 0.65455
0.678 -0.393 2.61627 0.78367
0.753 -0.397 2.65640 0.85124
0.854 -0.385 2.71806 0.93677
0.933 -0.339 2.79308 0.99268
0.962 -0.268 2.86990 0.99863
0.925 -0.184 2.94524 0.94312
0.820 -0.096 3.02505 0.82560
0.682 -0.033 3.09324 0.68280
0.561 0.000 3.09324 0.56100
0.423 0.017 3.18176 0.42334
0.268 0.025 3.23461 0.26916
0.109 0.013 3.26030 0.10977
n=38
Программа такая
Код:
open #1,"data.txt","r"
open #2,"polar.txt","w"
for i=1 to 41
input #1 x,y
if i< 36 then
if x>0 and y>0 then t=atan(y/x):fi:fi
if i>36 then
if x>0 and y>0 then t=atan(y/x)+pi:fi:fi
if x>0 and y<0 then t=atan(y/x)+pi:fi
if x<0 then t=atan(y/x)+pi:fi
if x=0 and y>0 then t=pi/2:fi
if x=0 and y<0 then t=3*pi/2:fi
if x=0 and y=0 then t=0:fi
r=sqrt(x^2+y^2)
print #2,x using "##.###",y using "##.###",t using "##.#####",r using "##.#####"
next i
Три нулевые точки убрал, так как в них все автоматически выполняется. То есть работаю с 38-ю точками. Аппроксимация методом М-К:
Код:
open #1,"polar.txt","r"
open #2,"appr.txt","w"
dim t(100),r(100)
z=.0001
for i=1 to 38
input #1 x,y,t(i),r(i)
next i
s1=10^150:nn=10000000
a0=1:b0=1:c0=1:d0=1
for j=1 to nn
a=a0*(1+z*(ran()-.5))
b=b0*(1+z*(ran()-.5))
c=c0*(1+z*(ran()-.5))
d=d0*(1+z*(ran()-.5))
s=0
for i=1 to 38
t=t(i):r=r(i)
f=abs(sin(a*t^b+c*t^d))
s=s+(r-f)^2
next i
if s<=s1 then
print a,b,c,d,s
ak=a:bk=b:ck=c:dk=d:sk=s
s1=s
a0=a:b0=b:c0=c:d0=d
fi
next j
print #2,ak,bk,ck,dk,sk
Результаты после 10 минут счета:
Сопоставление с точками не делал, но вижу - все идет нормально. Интересно, что вторая степень - это практически 2. Есть ли в этом физика, говорить затрудняюсь. Возможно и совпадение.
ИСН! В принципе мы решаем одну и ту же тригонометрию, но разными выражениями. Самое смешное, что начал я с арксинуса, который так удачно помогал нам. Но ничего не вышло и стал играть с синусом. Вот так все переплетается. Файл данных - это не тривиально. Поскольку задача опять свелась к классической нелинейной регрессии. Только функция аппроксимирующая такова, что справится с ней может только Монте-Карло. Как бы Вы сей метод ни критиковали.