Подгонка поверхности к набору точек 3D-данных в java

Привет, у меня есть облако точек данных XYZ. Я хочу оценить поверхность, которая лучше всего соответствует этим точкам, чтобы позже я мог ввести пару XY и получить обратно значение Z, где эта пара XY лежит на поверхности.

Существует ли существующая библиотека Java, которая оценит поверхность для меня?

Если нет, может ли кто-нибудь порекомендовать мне материал для чтения, в котором будут описаны методы расчета этого?

Если возможно, я хочу иметь возможность взвешивать точки (некоторые точки менее надежны и поэтому должны иметь меньшее влияние на готовую поверхность).


person ed Bevan    schedule 03.03.2013    source источник
comment
en.wikipedia.org/wiki/Regression_analysis   -  person Oliver Charlesworth    schedule 04.03.2013
comment
Если я не ошибаюсь, это, похоже, говорит только о 2D-регрессии. Модели регрессии включают следующие переменные: Неизвестные параметры, обозначаемые как β, которые могут представлять скаляр или вектор. Независимые переменные X. Зависимая переменная Y.   -  person ed Bevan    schedule 04.03.2013
comment
Да, это базовый случай. Затем он распространяется на многомерную регрессию. Но это не совсем моя область, поэтому я не могу дать никаких конкретных советов! (Однако вы можете найти лучшую помощь на stats.stackexchange.com).   -  person Oliver Charlesworth    schedule 04.03.2013
comment
Ахаааа, меня сбили с толку независимые от x и зависимые от y, думая, что они могут относиться только к значениям x и y. Если я правильно понял, я думаю, что могу отбросить значения Z в зависимых от y, а независимые от x представляют собой ряд {1, x, y, xy, xx, yy} для квадратичных или {1, x, y , xx, yy, xy, xxx, yyy, xxy, yyx} для кубических и т. д.?   -  person ed Bevan    schedule 04.03.2013


Ответы (1)


Такую проблему лучше всего решать с помощью линейного метода наименьших квадратов. Однако я бы не стал читать статью в Википедии, похоже, она написана для математиков.

Идея состоит в том, чтобы изменить задачу на задачу линейной оптимизации. В вашем случае я бы попытался подобрать двумерный многочлен. Это уравнение в виде:

z(x, y) = A + Bx + Cy + Dx^2 + Exy + Ey^2 + Fx^3 + Gx^2y + Hxy^2 + Iy^3 + ...

Вы поняли идею. Для данного набора данных задача сводится к поиску параметров от A до I, которые лучше всего соответствуют точкам данных. Такого рода задачи легко решаются методом наименьших квадратов.

Посмотрите на этот код для подгонки эллипсов к точкам трехмерных данных. Приложив некоторые усилия, вы можете приспособить его к полиномам в той форме, которую я описал выше.

Удачи!

person Hannesh    schedule 03.03.2013
comment
Действительно, статья в Википедии — не лучшее введение в тему. Но, вероятно, желательно получить некоторый базовый опыт в этом вопросе, прежде чем просто применять произвольные методы;) - person Oliver Charlesworth; 04.03.2013