2009-05-28 5 views
1

Это тоже связано с математикой. Но это полезно и для вычислений.Создание функции плоскости/поверхности, что данный набор координат лежит на

Допустим, у вас есть 10 координат. (x1, y1) (x2, y2) ..... в 2D пространстве. (то есть на плоскости X-Y). Можем ли мы найти одну гладкую кривую, проходящую через каждую координату.

При расширении вопроса. Если пространство 3D, то можно ли найти уравнение гладкой поверхности, проходящее через заданный набор пространственных координат?

Существуют ли библиотеки (любой язык) \ инструменты для выполнения таких вычислений?

+0

Какой порядок кривой вы ищете рисовать? –

+0

Заказ не является проблемой. Я просто хотел узнать о существовании? –

ответ

2

Что вам нужно искать - это библиотека, реализующая NURBS (или Un Uniform Rational B-Splines). Это решит вашу проблему как в 2d, так и в 3d, поскольку 2d - это всего лишь частный случай 3d.

Грубо говоря, вас не интересует фактическое уравнение, вас интересует только получение точек, аппроксимированных плавными кривыми или поверхностями. Это делается путем нахождения «контрольных точек» в 2d или 3d пространстве, которые умножаются на базовые функции B-сплайна. Библиотека NURBS сделает это за вас.

Cheers!

Edit:

Посмотрите this one

1

Вы всегда можете поместить полином порядка-10 через точки. это не обязательно то, что вы хотите сделать, хотя - установка гладкой кривой через серию сплайнов даст вам более красивый результат. статья curve-fitting о википедии дает вам хороший обзор различных вариантов.

1

В 2D-корпусе вы запрашиваете установку кривой. Это действительно существует в excel, где вы строите свои очки (я обычно использую XY-разброс, если у вас есть x и y), а затем щелкните правой кнопкой мыши на кривой. Выберите «Добавить тренд». Там вы можете выбрать, какую функцию вы хотите поместить, и вы можете попросить excel отобразить ее на изображении (вкладка «Параметры», установите флажок «Отображать уравнение на диаграмме»). Приятно и быстро.

В противном случае вы можете использовать matlab и использовать метод lsqr (наименьший квадрат). Если вы хотите найти ближайший полином, который лучше всего описывает ваши данные, вы можете использовать функцию polyfit. Он использует метод наименьших квадратов, но возвращает коэффициенты. Matlab имеет целый ряд других алгоритмов для решения/нахождения «наилучших» приближений системам линейных уравнений. Я упоминаю lsqr, потому что это один из самых простых для реализации, если у вас нет MATLAB. С другой стороны, это решение множества линейных уравнений - я ничего не знаю о ваших данных.

+0

этот класс алгоритмов пытается построить кривую с несколькими коэффициентами (многочлен низкого порядка, экспоненциальный, лог-функция и т. Д.), Который проходит почти во всех точках, а не сколь угодно сложную кривую, проходящую через * через * все из них. –

0

Посмотрите на шлицы

Searching для 'сплайн интерполяции библиотеки' может дать некоторые полезные советы для реализации.

Смежные вопросы