Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Інтерполяція методом обернених середньозважених відстаней





Для даної теми «Інтерполяція спостережених полів (по нерегулярній мережі)» було обрано середовище програмування Pascal, яке використовується в оболочці Delphi. В ході роботи був обраний метод обернених середньозважених відстаней.

Використання цього методу в даній роботі полягає в тому, що на початку ми маємо набір нерівномірно розкиданих точок, з якими в процесі дослідження ми будемо працювати. Виходячи з того, що сітка нерівномірна, а нам треба отримати рівномірну, ми маємо знайти мінімальне і максимальне значення масиву для того, щоб визначити крок, з яким ми будемо розбивати рівномірну сітку:

Xmax:= PGeoPoint(FSrcData[0])^.X;

Xmin:= PGeoPoint(FSrcData[0])^.X;

Ymax:= PGeoPoint(FSrcData[0])^.Y;

Ymin:= PGeoPoint(FSrcData[0])^.Y;

Hmax:= PGeoPoint(FSrcData[0])^.H;

Hmin:= PGeoPoint(FSrcData[0])^.H;

for i:= 1 to FSrcData.Count - 1 do begin

if Xmax < PGeoPoint(FSrcData[i])^.X then Xmax:= PGeoPoint(FSrcData[i])^.X; if Xmin > PGeoPoint(FSrcData[i])^.X then Xmin:= PGeoPoint(FSrcData[i])^.X;

if Ymax < PGeoPoint(FSrcData[i])^.Y then Ymax:= PGeoPoint(FSrcData[i])^.Y if Ymin > PGeoPoint(FSrcData[i])^.Y then Ymin:= PGeoPoint(FSrcData[i])^.Y; if Hmax < PGeoPoint(FSrcData[i])^.H then Hmax:= PGeoPoint(FSrcData[i])^.H;

if Hmin > PGeoPoint(FSrcData[i])^.H then Hmin:= PGeoPoint(FSrcData[i])^.H; StatusBar.Panels[0].Text:= 'Знаходимо мін. і макс. точки ' + IntToStr(i);

Application.ProcessMessages;

end;

 

 

Вивід максимальних і мінімальних даних:

a1:= floattostr (Xmax);

a2:= floattostr (Xmin);

a3:= floattostr (Ymax);

a4:= floattostr (Ymin);

Label6.Caption:=a1;

Label7.Caption:=a2;

Label8.Caption:=a3;

Label9.Caption:=a4;

 

Знайшовши мінімальне і максимальне значення, ми повинні розбити наш масив на рівномірну сітку з певним кроком, використовуючи наступні формулу:

 

Xdelta:= Xmax - Xmin;

Ydelta:= Ymax - Ymin;

Hdelta:= Hmax - Hmin;

Xcount:= Round(Int(Xdelta / CellWidth));

Ycount:= Round(Int(Ydelta / CellWidth));

StatusBar.Panels[0].Text:= 'Розрахунок закінчений '

 

Наступний блок програми стосується безпосередньо реалізації обраного методу.Використовуємо основну формулу методу обернених середньозважених відстаней:

;

Маємо:

SetLength(ResData, Xcount);

for i:= 0 to XCount - 1 do SetLength(ResData[i], Ycount);

for i:= 0 to Xcount - 1 do for j:= 0 to YCount - 1 do begin

StatusBar.Panels[0].Text:= 'Розраховуємо вузли регулярної сітки (розмір ' + IntToStr(Xcount) + 'x' + IntToStr(Ycount) + '): X=' + IntToStr(i) + ', Y=' + IntToStr(j);

Application.ProcessMessages;

Summ1:= 0;

Summ2:= 0;

for z:= 0 to FSrcData.Count - 1 do begin

d:= sqr((i * CellWidth + Xmin) - PGeoPoint(FSrcData[z])^.X) +

sqr((j * CellWidth + Ymin) - PGeoPoint(FSrcData[z])^.Y);

h:= sqrt(d + sqr(Delta));

Summ1:= Summ1 + PGeoPoint(FSrcData[z])^.H / Power(h, Beta);

Summ2:= Summ2 + 1 / Power(h, Beta);

end;

ResData[i][j]:= Summ1 / Summ2;

hh:= Summ1 / Summ2;

stringGrid1.Cells[3,k+1]:=floattostr(hh);

StringGrid1.RowCount:=k+2;

k:=k+1;

writeln(fout,xx:3:4,' ', yy:5:5,' ', hh:5:5);

end;

closeFile(fout);

 

Для контролю розрахованих вузлів інтерполяції виводимо їх та розраховані по них значення у таблицю:

stringGrid1.Cells[0,0]:='№'; //введення шапки таблиці

stringGrid1.Cells[1,0]:='x=';

stringGrid1.Cells[2,0]:='y=';

stringGrid1.Cells[3,0]:='h=';

stringGrid1.Cells[0,k+1]:+=intTostr(k+1); //заповнення табл. даними про точки

stringGrid1.Cells[1,k+1]:=floattostr(xx);

stringGrid1.Cells[2,k+1]:=floattostr(yy);

stringGrid1.Cells[3,k+1]:=floattostr(hh);

stringGrid1.RowCount:=k+2;

 

Після цього вже відбувається виведення на екран регулярної сітки:

rHmax:= Round(ResData[0][0]);

rHmin:= Round(ResData[0][0]);

for i:= 0 to Xcount - 1 do for j:= 0 to YCount - 1 do begin

if rHmax < Round(ResData[i][j]) then rHmax:= Round(ResData[i][j]);

if rHmin > Round(ResData[i][j]) then rHmin:= Round(ResData[i][j]);

end;

rHdelta:= rHmax - rHmin;

Image.Picture.Bitmap.Width:= Xcount;

Image.Picture.Bitmap.Height:= Ycount;

for i:= 0 to Xcount - 1 do for j:= 0 to YCount - 1 do

begin

c:= Round(Int((ResData[i][j] - rHmin) * 256 / rHdelta));

Image.Picture.Bitmap.Canvas.Pixels[Xcount - i + 1, j]:= RGB(c, c, c);

StatusBar.Panels[0].Text:= 'Виводим на екран регулярну сітку';

Application.ProcessMessages;

end;

 

Схожим чином виводимо на екран вихідні точки:


for i:= 0 to FSrcData.Count - 1 do

begin

Image.Picture.Bitmap.Canvas.Pixels[Xcount + 1 - Round(Int((PGeoPoint(FSrcData[i])^.X - Xmin) / CellWidth)),

Round(Int((PGeoPoint(FSrcData[i])^.Y - Ymin) / CellWidth))]:= RGB(0, 0, 255);

StatusBar.Panels[0].Text:= 'Виводимо на екран вихідні точки...';

Application.ProcessMessages;

end;

end;

 

Для перевірки використаного та запрограмованого алгоритму були обрані дані, які отримали в результаті дослідження на Рівненській атомній електорстанції, а саме стан ґрунтів, рівень ґрунтових вод (РГВ), процесів карстоутворення та суфозії. Дані представляють собою усередненні значення за рівнем грунтових вод(96 точок).

В результаті ми провели серію дослідів, де отримали проінтерпольовану карту (як приклад взяли біля 50000 нових точок).

 

Рис.2 Проінтерпольвана карта з даними


ВИСНОВКИ

Під час написання курсової роботи було розроблено і реалізовано алгоритм і проведено інтерполяцію за даними Рівненської атомної електростанції, а саме рівнем грунтових вод, процесу карстоутворення і суфозії.

В ході нашої роботи обраний один з найбільш широко використовуваних методів інтерполяції – метод обернених середньозважених відстаней (Inverse Distance Weighting). В цьому методі вплив кожної конкретної точки визначається відстанню до вузла сітки, тобто її вагою.

В роботі автор наочно переконалась в недоліках методу обернених середньозважених відстаней. Серед них: низька швидкість роботи на великих обсягах даних: обчислення інтерполянта має трудомісткість; алгоритм надає занадто багато ваги віддаленим вузлам, їх сумарна вага може виявитися більше, ніж вага вузлів, розташованих поряд з точкою інтерполяції тощо.

Автор вбачає, що основні недоліки цього методу можуть бути усунені, якщо застосувати модифікацію Шеперда.

 

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ:

1. Дэвис Дж. Статистический анализ данных в геологии В 2 кн., Кн.1. / Дж. Дэвис. – М.: Недра, 1990. – 319 с.

2. Никитин А. А. Теоретические основы обработки геофизической информации: учебник для вузов / А. А. Никитин. – М., 1986. – 342 с.

3. Лященко М. Я., Головань М. С. Чисельні методи: Підручник.- К.: Либідь, 1996.-288 с.

4.http://www.emsi.com/smshelp/Data_Module/Interpolation/Inverse_Distance_Weighted.htm

 







Date: 2016-07-25; view: 259; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию