:: Курилка
Не вижу ошибки, снова про фрактал
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.
Что-то тут не так.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика