Перейти к содержанию
  • записей
    20
  • комментариев
    78
  • просмотров
    27 595

Интерполяция

марклар

2 489 просмотров

Тем, кто всё ещё не знаком с такой замечательной и полезной вещью, объясняю два способа на примере дзета-функции Римана:

800px-Zeta_function_graph.png

Суть в том, что ничего о самой дзета-функции вам знать не надо.

Допустим, у нас есть некая закономерность, которая описывается очень сложной математической функцией y(x). Для не математиков такие функции обычно аппроксимированы в табличные значения. Интерполяция позволяет работать с этими данными, когда вам необходимо получить промежуточное значение, которого нет в таблице.

Аппроксимированный участок функции (точками показаны табличные данные):

b3cb019be31a653d087f2765e7283b19.png

Обозначим искомое значение y0, а саму точку, в которой функция y(x) его принимает – x0.

d55cff4dc7a48a99dd901fd6161e4ddb.png

Дано: y1, y2, x1, x2, x0.

Требуется найти: y0.

Аналитический метод

Представим отрезок аппроксимированной функции между точками (x1; y1) и (x2; y2) в виде отрезка линейной функции y = kx+b.

Тогда имеем систему уравнений:

y1 = kx1+b;

y2 = kx2+b.

Решая её, находим k и b.

Для этого из первого уравнения выражаем b через k:

b = y1 – kx1.

Подставляем значение b во второе уравнение:

y2 = kx2+ y1 – kx1.

Выражаем k через известные y1, y2, x1, x2:

k = (y2 – y1) / (x2 – x1).

Подставляем найденное k в выражение b:

b = y1 – [(y2 y1) / ( x2 – x1)] × x1.

Подставляем найденные коэффициенты b, k и заданное x0 в уравнение y = kx+b:

y0 = kx0+b = [(y2 – y1) / (x2 – x1)] × x0+ y1 – [(y2 – y1) / (x2 – x1)] × x1.

Геометрический метод

Геометрический метод основан на простом и понятном принципе подобия треугольников. Для начала вычтем из большей ординаты меньшую. Получим два подобных прямоугольных треугольника:

5463b4af6ff072a14714289be2008288.png

- большой x1А12x2 с катетами x2А12 длиной (x2x1) и А12x1 длиной (y1 – y2);

- малый x2А0x0 с катетами x2A0 длиной (x2x0) и A0x0 неизвестной длины y01.

Из подобия треугольников следует соотношение:

(y1 – y2) / y01 = (x2 – x1) / (x2 – x0).

Откуда выражаем неизвестную y01:

y01 = (y1 – y2) × (x2 – x0) / (x2 – x1).

Тогда искомая ордината будет равна:

y0 = y2 + y01 = y2 + (y1y2) × (x2 – x0) / (x2 – x1).


×