Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика

Общая информация
Интерполирование по Эрмиту есть специальный вид многоинтервальной интерполяции, при котором интерполирующий многочлен Hn(х) обеспечивает не только равенство Hn(х) значениям f(x), но и совпадение некоторого количества производных в узлах интерполяции.
Многочлен Эрмита единственный, это следует из однозначности его построения.
Остаточный член интерполяционной формулы Эрмита равен:
Rn(x)=f(x)-Hn(x)=f(n+1)(ξ)*(x-x0)N0*...*(x-xm)Nm/(n+1)!, где ξ∈[x0,xm]
Алгоритм построения

Представим себе, что на плоскости в координатах x,y нарисовано несколько точек. Задача соединить их плавной кривой так чтобы в итоге получился график гладкой функции y=ƒ(x).
На каждом отдельном участке между соседними точками это должен быть многочлен третьей степени и при этом соседние многочлены должны каким-то образом гладко
сопрягаться.
Для того, чтобы решить эту задачу, сначала решим частную задачу: представим себе что на отрезке [0;1] у нас задана функция - многочлен третьей степени:ƒ(x)=а0+a1*x+a2*x2+a3*x3
Нам неизвестны коэффициенты a0,a1,a2,a3 и мы хотим определить их по следующим данным:ƒ(0)=y0,ƒ(1)=y1,ƒ' (0)=z0,ƒ'(1)=z1
Производная функции ƒ определяется следующим образом:ƒ'(x)=a1+2*a2*x+3*a3*x2
Запишем наши уравнения:f(0)=a0=y0f'(0)=a1=z0f(1)=a0+a1+a2+a3=y1
f'(1)=a1+2*a2+3*a3=z1

Было бы удобно записать эти уравнения в матричном виде:

Матричное представление системы уравнений

Правая часть системы линейных уравнений, это столбец с координатами y0,z0,y1,z1

столбец известных данных

Вектор-столбец неизвестных переменных обозначим

Вектор-столбец неизвестных переменных

Тогда нам нужно решить систему линейных уравнений P*A=B

В общем случае решением будет: A=P-1*B

Воспользуемся алгоритмом Гаусса:
для этого в левой части таблицы запишем матрицу P, a справа приписывается единичная матрица

решение системы методом Гаусса

Задача привести матрицу некоторыми преобразованиями к такому виду, чтобы слева оказалась единичная матрица, а то что будет в правой половине и будет обратной матрицей

(P│E)→ (E│P-1)

Итак,

обратная матрица

По значениям в концах отрезка [0,1] и их производных, мы восстановили всю функцию

a0=y0
a1=z0
a2=-3*y0-2*z0+3*y1-z1
a3=2*y0+z0-2*y1+z1
ƒ(x)=y0+z0*x+(-3*y0-2*z0+3*y1-z1)*x2+(2*y0+z0-2*y1+z1)*x3

Пусть нужно произвести интерполяцию на отрезке [x0;x1 ], тогда график функции необходимо сдвинуть на x0 и растянуть в x1-x0 раз, а поскольку z0,z1 в x1-x0 раз меньше, чем требуется, то их необходимо домножить.
Для удобства введем k=(x-x0)/(x1-x0) и h=x1-x0. Функция примет вид:

ƒ(k)=y0+z0*h*k+(-3*y0-2*z0*h+3*y1-z1*h)*k2+(2*y0+z0*h-2*y1+z1*h)*k3

Аналогичным образом определяется многочлен любой степени.
При добавлении значений производных (до некоторого порядка m) в точках добавляются дополнительные слагаемые.
Точность растет с увеличением количества известных значений производных в точках.