nikitak
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте, вопрос по программированию в Математике. Задача: Посчитать "гистограммную характеристику" неких свойств объекта. Объект состоит из множества координат точек. Позиция в гистограмме и интегральная характеристика, обновляемая в этой позиции формализуются отдельно. Моё решение: Код: (* Вычисление позиции в гистограмме, обновление для одной точки *) PointUpdateResult[res_, x_, y_, n_] := Block[ {offset = MyOffset[x, y, n] (* позиция в гистограмме *)}, ++res[[offset,1]]; (* количество *) res[[offset,2]] += Sqrt[x^2 + y^2]; (* "интегральное свойство" *) ]; SetAttributes[PointUpdateResult, {HoldFirst}]; (* итерация по точкам, накопление необходимого свойства *) UpdateResult[res, x_, y_, w_, r_] := Scan[PointUpdateResult[res, #[[1]], #[[2]], w] &, Table[{x, y + i}, {i, 0, r - 1}]]; SetAttributes[UpdateResult, {HoldFirst}]; (* функция, работающая с самим обьектом *) SectorFeatures[x_, Order_]:= Block[ { params=Runs[x], second_params = Mec[x], res=Table[{0,0},Order+1] (* "выделяем память" под гистограмму *)}, UpdateResult[res,second_params,Order+1,#] & /@ params; res // MatrixForm ]; | Таким образом, пришлось организовывать "передачу параметра по ссылке" для организации циклического накопления нужного мне свойства. Возможно существуют другие приёмы итеративного обхода, позволяющие решить задачу проще? | Всего записей: 109 | Зарегистр. 31-01-2006 | Отправлено: 10:15 04-08-2010 | Исправлено: nikitak, 10:19 04-08-2010 |
|