|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.04.2011, 20:32 | #1 |
Пользователь
Регистрация: 23.03.2011
Сообщений: 15
|
Интерполяция полиномами второго порядка графически заданных функций
"Интерполяция полиномами второго порядка графически заданных функций." - собственно так звучит тема моей курсовой. Как объяснил преподаватель - точки тыкаем сами - далее рисуется сплайн линия, при том при большом кол-ве точек сплайн должен быть более менее гладкий.
Всё это в Delphi. Делать за меня курсовую не надо. Мне лишь нужна "наводка" по алгоритмам - кои будут между 2мя, 3мя ... N введенных точек прорисовывать между ними сплайн. Погуглив - понял что существуют разные версии формул/алгоритмов по разным сплайнам, да и по методу тоже какие-то разные. В общем - дайте/посоветуйте пожалуйста мне алгоритм - который подойдет под поставленную задачу. |
27.04.2011, 11:22 | #2 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239
|
Мне кажется Вы немного путаете интерполяцию и аппроксимацию.
При интерполяции порядок полинома должен совпадать с количеством узлов (точек), а при апроксимации можно задавать степень полинома, но не больше числа узлов. Собственно интерполяция является частным случаем апроксимации. Обычно апроксимирующая функция это степенной полином Ai*Xi^i, но можно взять и экспоненциальную Ai*exp(i*Xi). Общий алгоритм такой: 1 По узлам составляется матрица грамма 2 Методом Гаусса находятся коэффициенты Ai 3 строится апроксимирующая функция с использованиев вычисленных коэфициентов. Вот тут можно почитать http://matlab.exponenta.ru/spline/book1/10.php
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
Последний раз редактировалось KobolD; 27.04.2011 в 11:25. |
04.05.2011, 20:20 | #3 |
Пользователь
Регистрация: 23.03.2011
Сообщений: 15
|
Спасибо за ответ, но препод мне объяснил что мне нужно лишь будет строить уравнения типа a*(x^2)+b*x+c=f(x) для каждой линии, условную "гладкость" будет обеспечивать уравнение касательной в конце каждой линии, и коэффициенты с уравнения касательной будут связным звеном между линиями, так есть будет строится слау из
a*(x1^2)+b*x1+c=y1 a*(x2^2)+b*x2+c=y2 2*a*x1+b=y1 уравнение касательной. пока сам не до конца понял суть, но как то так. А точнее кажись я до сих пор нифига не понял какой ваще будет алгоритм этого сплайна. Даже книжку одну прочел про интерполяцию, аппроксимацию и сплайны - но ни хера не понятно. =( Последний раз редактировалось HotDogich; 05.05.2011 в 15:05. |
06.05.2011, 14:13 | #4 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239
|
Ну тогда смотри, ты будешь строить параболы для каждой пары точек. Через две точки можно провести бесконечное множество парабол, но если задать условие касательности для первой точки то парабола будет только одна. В твоем примере, для первой точки, касательная равна y1 т.е. она касательна к линии паралельной оси Х.
Решая матрицу x1^2 x1 1 | y1 x2^2 x2 1 | y2 2*x1 1 0 | K ,где для первых двух точек K=y1 находишь коэффициенты a1 b1 c1 потом строишь матрицу для второй и третей точки x2^2 x2 1 | y2 x3^2 x3 1 | y3 2*x2 1 0 | K где К уже равно 2*a1*x2+b1 - потому что касательные для первой и второй параболы во второй точке должна быть равны. решаешь матрицу находишь коэффициенты a2 b2 c2 строишь матрицу для следующих двух точек где K=2*a2*x3+b2 и т.д.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
|
09.05.2011, 09:57 | #5 |
Пользователь
Регистрация: 23.03.2011
Сообщений: 15
|
Спасибо большое, только что проверил данный алгоритм, решая слау в моей проге, сделанной уже давно для лабораторок, и найдя коэффициенты в ней, подставил их в прогу из другой лабораторки по решению полиномов - получилось на бумажке нечто вроде сплайна. Осталось только запрограммировать - круто однако что надо лишь прописать чтение тыкнутой точки/точек на канвасе - скопипастить 2 процедурки из лаб - и прорисовать всё это.
Последний раз редактировалось HotDogich; 09.05.2011 в 10:29. |
16.05.2011, 19:41 | #6 |
Пользователь
Регистрация: 23.03.2011
Сообщений: 15
|
Дописал прогу, у вас тут ошибка была, или опечатка
"где К уже равно 2*a1*x2+b1" там x1 надо, у меня сначала прога была с x2 - там сплайны росли, бешено росли, с каждый разом все выше/ниже, уходили за края экрана уже после 3-4 точки =) |
16.05.2011, 19:54 | #7 |
Пользователь
Регистрация: 23.03.2011
Сообщений: 15
|
Вот кому интересно =) на форме в Events - онмаусдаун - пишем onclick и далее копипастим код - и вуаля прога должна работать
Код:
|
17.05.2011, 12:13 | #8 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239
|
Так как у тебя всегда матрица будет 3х3 причем с 1 и нулем на определенных местах то можно один раз на бумажке вывести формулу для нахождения a, b, c и не решать каждый раз матрицу. У меня получилось так (но лучше перепроверить)
Код:
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
|
19.05.2011, 19:46 | #9 |
Пользователь
Регистрация: 23.03.2011
Сообщений: 15
|
По сути да, можно и без всего этого, ведь меньше длина кода - меньше шанс ошибок в нем.
Кстати я уже много чего добавил/изменил в проге. Только вот программа щас рисует чуток не правильно например каждая новая тыкнутая точка была правее прошлой - всё норм, одну сделал левее - и например сплайн заканчивался в прошлой точке сверху вниз - тогда новый сплайн не продолжает его плавно - сверху вниз перерастая плавно к новой точке, они сразу снизу вверх продолжает сплайн, ща вот пытаюсь как-нить в коде повернуть эту параболу на 180гр - ток не получается. Пытаюсь повернуть при том - отзеркалив относительно горизонтали и вертикали(сам придумал =)) |
20.05.2011, 08:48 | #10 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239
|
чесно говоря не очень понял как там получается на самом деле, но суть проблеммы уловил. Попробуй делать так: если координата Х вновь введеной точки меньше чем координата предыдущей то перед вычислением меняешь точки местами Xi <-> X(i-1),
а в матрице в последнюю строку 2*x 1 0 | K подставляешь значение Х точки которая до перестановки была Х(i-1), т.е. чтобы касательность была к нужной точке.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отрезки времени графически | silvestr | PHP | 8 | 15.04.2011 12:02 |
Интерполяция изображений(Сплайн интерполяция)?????) | Danyla | Помощь студентам | 0 | 13.04.2010 09:08 |
вывести на экран в виде таблицы значения функций,заданной графически, на интервале от Хнач до Хкон с шаго | Masiasia | Помощь студентам | 1 | 25.11.2009 10:06 |
Поверхности второго порядка (Delphi) | Казанцев Андрей | Помощь студентам | 2 | 10.05.2009 16:12 |
Тестирующая программа "КРИВЫЕ ВТОРОГО ПОРЯДКА" | ivp88 | Помощь студентам | 3 | 13.03.2007 11:47 |