|
Апроксимация сплайнами, оптимизация размещения контрольных точек |
|
|
|
Jan 23 2011, 13:26
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
Эта тема является логическим продолжением вот этой, но может быть интересна и сама по себе, поэтому выношу в отдельный типик. На картинках изображена характерная кривая (1 - общий план, 2 - приближенное начало), которую нужно представить сплайнами или любым другим способом, занчительно снижающим объем памяти, требуемый для ее хранения, но при этом допускающий сравнительно простое восстановление по точкам, не разжимя всей кривой сразу (то-есть запаковать ее ZIP-ом нельзя  ). Проблема в автоматическом определении положения контрольных точек. Очевидно, что равномерное расположение не выгодно, так как в начале есть сильные осциляции, а в конце график почти прямой. В идеале нужен алгоритм, который позволит по заданному числу контрольных точек определть их положение так, чтобы СКО было минимальным. Или наоборот, по заданному СКО определить требуемое число точек и их положение. Есть еще одна небольшая проблема - данные немного зашумлены, отчего точное определение локальных экстремумов затруднено. Можно конечно его зафильтровать пока не получится приемлемый результат, но хотелось-бы этого избежать.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Mar 3 2011, 00:52
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-12-10
Пользователь №: 61 695

|
Цитата(Taradov Alexander @ Jan 23 2011, 14:26)  В идеале нужен алгоритм, который позволит по заданному числу контрольных точек определть их положение так, чтобы СКО было минимальным. Или наоборот, по заданному СКО определить требуемое число точек и их положение. Если Вам необходимо найти оптимальные распределения точек для сплайн аппроксимации k-ой степени в l2 норме, можно поступить так: вначале аппроксимируете Вашу функцию сплайном k+2 степени s_{k+2}(x). Далее ищите разбиение x_0 < ... < x_i < ... < x_n так, чтобы \int_{x_i}^{x_{i+1}} \left(\frac{\delta^{k+1} s_{k+2}(x)}{\delta x^{k+1}}\right)^{\frac1{k+1}} dx было одинакого на всех отрезках. Если запутаетесь или не сможете сами, постораюсь формулы выложить, но, очень надеюсь, что сами справитесь. От себя хочу по самой задаче добавить. Кажется, если я правильно понял, есть желание аппроксимировать несколько (около 100) функций, у которых есть схожие формы, то есть вначале много осцилляций, в конце - все гладко и есть желание чуток поиграться с шумом. Моя идея - запишите эти функции (n штук) вначале на очень мелкой сетке с кусочно-постоянными или кусочно-линейными базисными функциями, чтобы шаг такой сетки был существенно меньше минимальной осцилляции. У Вас будет n векторов, образуйте из них матрицу. Сделайте этой матрице сингулярное разложение и выбросьте все сингулярные вектора, сингулярные значения которых будут меньше точности оцифровки вашого сигнала. Примените то, что я описал к оставшимся левым сингулярным векторам. Есть большая уверенность, что после всего этого Вы сильно сожмете эти данные, распаковка их будет съедать только несколько операций на точку, да и шум Вы тоже погасите.
Сообщение отредактировал igorchem - Mar 3 2011, 09:37
|
|
|
|
|
Mar 3 2011, 02:17
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 30-11-10
Пользователь №: 61 268

|
Цитата(igorchem @ Mar 3 2011, 04:52)  Если Вам необходимо найти оптимальные распределения точек для сплайн аппроксимации k-ой степени в l2 норме, можно поступить так: вначале аппроксимируете Вашу функцию сплайном k+2 степени s_{k+2}(x). Далее ищите разбиение x_0 < ... < x_i < ... < x_n так, чтобы \int_{x_i}^{x_{i+1}} \left(\frac{\delta^{k+1} s_{k+2}(x)}{\delta x^{k+1}}\right)^{\frac1{k+1}} dx было одинакого на всех отрезках. Если запутаетесь или не сможете сами, постораюсь формулы выложить, но, очень надеюсь, что сами справитесь.
От себя хочу по самой задаче добавить. Кажется, если я правильно понял, есть желание аппроксимировать несколько (около 100) функций, у которых есть схожие формы, то есть вначале много осцилляций, в конце - все гладко и есть желание чуток поиграться с шумом.
Моя идея - запишите эти функции (n штук) вначале на очень мелкой кусочно-постоянной или кусочно линейной сетке, чтобы шаг такой сетки был существенно меньше минимальной осцилляции. У Вас будет n векторов, образуйте из них матрицу. Сделайте этой матрице сингулярное разложение и выбросьте все сингулярные вектора, сингулярные значения которых будут меньше точности оцифровки вашого сигнала. Примените то, что я описал к оставшимся левым сингулярным векторам. Есть большая уверенность, что после всего этого Вы сильно сожмете эти данные, распаковка их будет съедать только несколько операций на точку, да и шум Вы тоже погасите. help polyfit POLYFIT Fit polynomial to data. P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of degree N that fits the data Y best in a least-squares sense. P is a row vector of length N+1 containing the polynomial coefficients in descending powers, P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1). [P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and a structure S for use with POLYVAL to obtain error estimates for predictions. S contains fields for the triangular factor ® from a QR decomposition of the Vandermonde matrix of X, the degrees of freedom (df), and the norm of the residuals (normr). If the data Y are random, an estimate of the covariance matrix of P is (Rinv*Rinv')*normr^2/df, where Rinv is the inverse of R. [P,S,MU] = POLYFIT(X,Y,N) finds the coefficients of a polynomial in XHAT = (X-MU(1))/MU(2) where MU(1) = MEAN(X) and MU(2) = STD(X). This centering and scaling transformation improves the numerical properties of both the polynomial and the fitting algorithm. Warning messages result if N is >= length(X), if X has repeated, or nearly repeated, points, or if X might need centering and scaling. Class support for inputs X,Y: float: double, single See also poly, polyval, roots, lscov.
|
|
|
|
|
Mar 3 2011, 09:27
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-12-10
Пользователь №: 61 695

|
Цитата(Andrey_1 @ Mar 3 2011, 03:17)  help polyfit POLYFIT Fit polynomial to data. ... Уважаемый Андрей, очень хочу поинтересоваться смыслом Вашего ответа на мой топик, мне не понятно несколько моментов: 1. зачем копировать текст от матворкса без ссылки - Ваша копия получилась с не очень красивой визуализацией математических формул, поэтому, на мой вгляд, было бы правильннее дать ссылку на полифит, например так: http://www.mathworks.com/help/techdoc/ref/polyfit.html2. как полифит согласуется с вопросом топикстартера? 3. как полифит может быть ответом на мой текст об оптимальном разбиении сплайн-аппроксимации? 4. Вы хоть раз пробовали вписывать такие функции как у топикстартера в полиномы высоких степеней сами, и видели, какая ошибка хоть в l1, хоть в l2 или l_{\infty} получается не говоря об устойчивости такого вписывания? Если нет, то не советуйте то, что не знаете, а если да, очень рад буду от Вас увидеть такие результаты (мне даже достаточно ссылки на Вашу публикацию в нормальном цитируемом журнале), с радостью просвещусь Вашими знаниями! С уважением ИИ
|
|
|
|
|
Mar 3 2011, 09:39
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (igorchem @ Mar 3 2011, 12:27)  очень хочу поинтересоваться смыслом Вашего ответа на мой топик, мне не понятно несколько моментов: Не обращайте внимания, человек то-ли самоутверждается, то-ли посты копит для становления своим. По теме: в формуле с помощью \delta - это обычная производная так странно записана или это какая-то особая производная? Выбор числа k: при степенях полинома больше 10 получается уже не очень хорошо, много осциляций. Каков физический смысл подинтегрального выражения? Вообще исходную задачу удалось свести к хранению быстро меняющейся части и представления плавной части экспонентами, но исходный вопрос все-еще интересен.
|
|
|
|
Сообщений в этой теме
Taradov Alexander Апроксимация сплайнами Jan 23 2011, 13:26 Tanya Цитата(Taradov Alexander @ Jan 23 2011, 16... Jan 23 2011, 14:12 Taradov Alexander QUOTE (Tanya @ Jan 23 2011, 17:12) Мне ка... Jan 23 2011, 14:18 Andrey_1 Цитата(Tanya @ Jan 23 2011, 18:12) Мне ка... Jan 23 2011, 14:19  Taradov Alexander QUOTE (Andrey_1 @ Jan 23 2011, 17:19) Пос... Jan 23 2011, 14:23   Andrey_1 Цитата(Taradov Alexander @ Jan 23 2011, 18... Jan 23 2011, 14:29    Taradov Alexander QUOTE (Andrey_1 @ Jan 23 2011, 17:29) Вам... Jan 23 2011, 14:30     Andrey_1 Цитата(Taradov Alexander @ Jan 23 2011, 17... Jan 24 2011, 03:44 АНТОН КОЗЛОВ Использование метода наименьших квадратов в подобн... Jan 24 2011, 05:41 TSerg Для Вашего случая моделировать надо не результат, ... Jan 24 2011, 07:15 Tanya Цитата(TSerg @ Jan 24 2011, 10:15) Для Ва... Jan 24 2011, 08:14  Andrey_1 Цитата(Tanya @ Jan 24 2011, 12:14) Наверн... Jan 26 2011, 00:51 Taradov Alexander QUOTE (TSerg @ Jan 24 2011, 10:15) Для Ва... Jan 24 2011, 11:16  Tanya Цитата(Taradov Alexander @ Jan 24 2011, 14... Jan 24 2011, 11:55   Taradov Alexander QUOTE (Tanya @ Jan 24 2011, 14:55) Вот и ... Jan 24 2011, 12:04    petrov Цитата(Taradov Alexander @ Jan 24 2011, 15... Jan 24 2011, 12:10     Taradov Alexander QUOTE (petrov @ Jan 24 2011, 15:10) А где... Jan 24 2011, 12:31      petrov Цитата(Taradov Alexander @ Jan 24 2011, 15... Jan 24 2011, 12:45       Taradov Alexander QUOTE (petrov @ Jan 24 2011, 15:45) Вот и... Jan 24 2011, 14:12    Tanya Цитата(Taradov Alexander @ Jan 24 2011, 15... Jan 24 2011, 14:35     Taradov Alexander QUOTE (Tanya @ Jan 24 2011, 17:35) Если е... Jan 24 2011, 15:10 _Pasha Обратите внимание, что регрессионный полином не об... Jan 24 2011, 07:49 scifi В порядке бреда: коль скоро это звуки (если я не о... Jan 24 2011, 08:04 GetSmart Цитата(Taradov Alexander @ Jan 23 2011, 18... Jan 24 2011, 08:57 _Pasha Цитата(GetSmart @ Jan 24 2011, 12:57) Для... Jan 24 2011, 09:10 petrov Почему бы просто не использовать более высокую час... Jan 24 2011, 11:45 Taradov Alexander QUOTE (petrov @ Jan 24 2011, 14:45) Почем... Jan 24 2011, 11:55  petrov Цитата(Taradov Alexander @ Jan 24 2011, 14... Jan 24 2011, 12:01 thermit ЦитатаTaradov Alexander:
Я так понимаю линейное пр... Jan 24 2011, 14:29 GetSmart Цитата(thermit @ Jan 24 2011, 19:29) Что ... Jan 24 2011, 14:31 thermit ЦитатаGetSmart:
Если это Фурье-коэффициенты, то им... Jan 24 2011, 15:00    igorchem Написал Вам ответ и прикрепил свой первый пост в ф... Mar 3 2011, 10:35     Taradov Alexander QUOTE (igorchem @ Mar 3 2011, 13:35) Напи... Mar 3 2011, 10:54      igorchem Цитата(Taradov Alexander @ Mar 3 2011, 11... Mar 3 2011, 11:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|