Не вижу ошибки, снова про фрактал | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Когда долго занимаешься программированием,
на обычную математику мозги дуреют. Есть двумерное множество, каталог событий Японии. Предложенный Королевым алгоритм расчета фрактальности давно реализован, дал ожидаемый результат. Но пробую и другие алгоритмы. Вместо того чтобы расчитать небольшую выборку и посмотреть что будет, сидел 3-4 суток считал, а стал смотреть -получается что то странное. И так, в чем дело. Сделал все в два этапа. Первая часть расчета может быть остановлена по esq Обычно попадает около 10000 событий со всеми оставшимися. Копирую в командном окне в таблицу Потом второй программой считаю уже то, что нужно. Немного о сути. Если взять случайное 2 мерное множество, его размерность около 2. А из природных множеств чаще всего получается дробная размерность от 2 до 1 У меня вышло очень близко к 1, похоже на ошибку, но в чем дело не вижу И так первая часть программы ********************** Close Tables All Set Escape On *!* Use d:\Japan\Japan.Dbf In 0 Again Alias Japan Shared *!* Use d:\Japan\Japan.Dbf In 0 Again Alias Japan1 Shared mglim = Val(Inputbox('Маг','2.5')) mglim1 = Val(Inputbox('Маг','2.5')) lnr = Val(Inputbox('Радиус','4')) Select Val(lat) As lat, Val(lon) As lon, 0000000 rn From Japan ; Where Val(Japan.cmag)>=mglim And Val(Japan.cmag)<=mglim1 And Japan.ymd > '20000000' ; INTO Cursor jap Readwrite Index On rn Tag rn Replace All rn With Recno() In jap GO TOP IN jap ?_Tally Use Dbf('jap') Again Alias jap1 In 0 Create Cursor curres (distt Float(8,3), cntt Float) Index On distt Tag distt Select jap jk = 0 Do While Not Eof('jap') Select Int(getradius(jap.lat,jap1.lat,jap.lon,jap1.lon)) As dr, ; Count(*) As cntr From jap1 Where jap.rn <jap1.rn Group By 1 ; INTO Cursor curtm Do While Not Eof('curtm') If Not Seek(curtm.dr ,'curres','distt') Insert Into curres Select dr, cntr From curtm Else Replace cntt With cntt + curtm.cntr In curres Endif Skip 1 In curtm Enddo jk = jk+1 If Mod(jk,5000)=0 ?jk Endif Skip 1 In jap Enddo select curres COPY TO crres ( тут имена разные, а не одно) ************************************************ Что тут происходит. Вначале выбираем некий диапазон событий по силе. Встаем на первое, смотрим расстояния до всех оставшихся и запоминаем их. Потом встаем на второе итд. Когда надоедает, нажимаю esq и копирую во внешний dbf Насчтал 6 выборок за 3 суток. Теперь второй программой считаю окончательно fln = Getfile('dbf') Close Tables All Use (fln) In 0 Shared Alias tbl newfln ='sfract'+ Juststem(fln) Dimension lar[1] lar[1] = 0 Create Cursor curres ( dst Float(12,2), smr B(2)) Select Max(distt) From tbl Into Array lar jk = Int(lar[1]) For ii = 1 To MIN(2000,jk) Insert Into curres ; SELECT ii , Sum(cntt) From tbl Where distt <= ii IF MOD(ii,100)=0 ?ii endif Endfor Go Top In curres Do While Not Eof('curres') lcmag = Alltrim(Padl(curres.dst,10,' '))+ ' ' + Alltrim(Padr(curres.smr,18,' '))+Chr(13)+ Chr(10) =STRTOFILE(lcmag , (newfln), .t.) Skip 1 In curres Enddo Рисую все это в двойном логарифмическом масштабе, и вместо 2 или дробной величины получаю нечто чуть больше 1. Что-то тут не так. |
© 2000-2024 Fox Club  |