Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Математика&Delphi] Построение сплайна, Вычисление коэффициентов сплайна 
:(
    Опции темы
Pakshin A. S.
Дата 14.11.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Строится интерполяционный кубический сплайн по N точкам интерполяции по таблице:

|_xi_||_x1_|...|_xN_|
|F(xi)||F(x1)|...|F(xN)|

Разумеется можно построить таблицу для вычисления значение коэффициентов методом Гаусса, но при больших N мы не сможем получить достаточно большую скорость.

Есть ли какие-то уже готовые формулы для вычисления коэффициентов интерполяционного кубического сплайна? Или может есть уже упрощенные системы для метода Гаусса или специальные алгоритмы?

P. S.
На алгоритмы желательны ссылки или примеры на Delphi.

Добавлено @ 11:09 
А может кто поделится кусочками кода своих программ? smile smile 
PM   Вверх
maxim1000
Дата 14.11.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 24
Всего: 110



в общем случае процедура Гаусса занимает порядка n^3 времени
но
насколько я припоминаю, сплайны ненулевые только на небольших областях
пусть m - количество точек, в которых каждый сплайн ненулевой
тогда если присмотреться к получаемой матрице, можно заметить, что у неё будет немало нулей, и заполненными будут лишь m диагоналей в середине
если реализовать метод Гаусса с учётом этого факта, то он будет уже требовать n*m^2 времени
m, обычно, довольно небольшое по сравнению с n и постоянно в задаче
так что получаем время порядка n

для m=3 это называется методом прогонки (оно используется в численном решении дифференциальных уравнений)

Это сообщение отредактировал(а) maxim1000 - 14.11.2006, 11:47


--------------------
qqq
PM WWW   Вверх
MBo
Дата 14.11.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 7
Всего: 18



PM MAIL   Вверх
Pakshin A. S.
  Дата 14.11.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Цитата(MBo @  14.11.2006,  13:34 Найти цитируемый пост)
http://alglib.sources.ru/interpolation/spline3.php 

Чет не хочет работать...  smile 

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  1.rar 33,34 Kb
PM   Вверх
MBo
Дата 14.11.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 7
Всего: 18



>Чет не хочет работать
Ну может, криво сделан межъязыковый перевод.
Возьми код в Numerical Recipes
PM MAIL   Вверх
Pakshin A. S.
Дата 14.11.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



А может есть готовый комопнентик, умеющий интерполировать?
PM   Вверх
Pakshin A. S.
Дата 14.11.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Вот кое-что нашел... 

Цитата(http://alex-xakep.narod.ru/file5.htm#bezier)

Для построения сплайнов в Windows есть функция PolyBezier: 

function PolyBezier(DC: HDC; const Points; Count: DWORD): BOOL;
Здесь параметр Points – это массив переменных типа TPoint, Count количество кривых, которые нужно построить. Первая точка в массиве Points определяет точку, из которой начнется построение первой кривой, следующие две точки – контрольные, четвёртая – конечная точка первой кривой. Далее для каждой последующей кривой нужно только три точки, первой точкой следующей кривой является последняя точка предыдущей. Линия строится текущим пером.


Есть и пример: http://alex-xakep.narod.ru/PolyBezier_demo.zip

Как можно все это прикрутить к моей программе? 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.2333 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.