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

Решение задачи интерполяции с помощью метода статистических испытаний рассмотрим на примере линейной интерполяции в многомерном кубе[1].

Пусть определена некоторая функция y = f (x 1,…, xn) в пространстве размерности n. Ее значения определены в вершинах ei, i = 1,2,…,2 n единичного куба G (x 1,…, xn) = [0,1] n, где eij = 0,1; j = 1,2,…, n, т.е. компоненты векторов могут принимать значения либо 0, либо 1. Задача состоит в нахождении путем линейной интерполяции значения функции f в произвольной точке (x 1,…, xn), лежащей внутри куба или на его границе.

Приведем формулы линейной интерполяции для одномерного и двумерного случаев:

,

(8)

Интерполяция функции в такой постановке становится проблемой в связи с тем, что количество слагаемых в интерполяционном выражении растет по закону 2 n и уже при n = 10 становится больше 103. Чтобы разрешить данное затруднение, воспользуемся методом статистических испытаний, придерживаясь следующего сценария.

По определенному правилу разыграем процесс выбора вектора из набора , находим значение функции в данной точке, далее повторяем процедуру достаточное количество раз, находим среднее значение, которое и будет являться искомым интерполирующим значением. Итак, пусть задана произвольная точка (x 1,…, xn) Î G. Построим случайный вектор e = (e 1,…, en), компоненты которого принимают значения 0 и 1 с вероятностями P (ei = 0) = 1 - xi, P (ei = 1) = xi, i = 1,…, n. Искомое интерполирующее значение будет найдено по формуле , где M — обозначает математическое ожидание или среднее значение функции в случайных вершинах единичного куба при повторных статистических испытаниях.

На листинге_№4 приведен пример решения задачи интерполяции методом Монте-Карло в двумерном случае. В данном случае задача линейной интерполяции осуществляется с помощью функции (8), которая и выступает в качестве аналитического решения.

Листинг_№4

%Программа моделирования линейной интерполяции в

%единичном квадрате G(x1,x2)=[0,1]x[0,1] с помощью

%метода Монте-Карло

function square

%Выбираем длину статистической серии для

%определения значения интерполирующей функции в

%некоторой точке внутри квадрата

N=1000;

%Определяем число узлов сетки по координатам x1 и x2

n1=21; n2=21;

%Определяем шаги сеток по координатам x1 и x2

h1=1.0/(n1-1); h2=1.0/(n2-1);

%Определяем сетки по координатам x1 и x2

x1=0:h1:1; x2=0:h2:1;

%Определяем значения интерполирующей функции (8) в

%узлах сетки

for i1=1:n1

for i2=1:n2

z(i1,i2)=f_interpl(x1(i1),x2(i2));

end

end

%Рисуем профиль точной интерполирующей функции (8)

subplot(1,2,1); surf(x2,x1,z);

%Организуем цикл расчета задачи интерполяции

%методом Монте-Карло в узлах сетки

for i1=1:n1

for i2=1:n2

s=0;

for n=1:N

e=rand(1,2)<=[x1(i1) x2(i2)];

s=s+f_vertex(e(1),e(2));

end

Monte_Carlo(i1,i2)=s/N;

end

end

%Рисуем результат моделирования задачи интерполяции

%методом Монте-Карло

subplot(1,2,2); surf(x2,x1,Monte_Carlo);

%Определение интерполируемой функции в узлах квадрата

function y=f_vertex(x1,x2)

y=(-1+x1+x2)^2;

%Аналитическая интерполирующая функция

function y=f_interpl(x1,x2)

y=(1-x1)*(1-x2)*f_vertex(0,0)+x1*(1-x2)*f_vertex(1,0)+...

(1-x1)*x2*f_vertex(0,1)+x1*x2*f_vertex(1,1);

Рис.4. Решение задачи линейной интерполяции методом Монте-Карло в
единичном квадрате

На рис.4 приведен итог работы кода программы листинга_№4. На левой фигуре построен профиль интерполирующей функции (8), заданной в программе листинга_№4 своими значениями в вершинах единичного квадрата. На правой фигуре построен интерполирующий профиль, полученный методом Монте-Карло. Выбиралась скромная серия статистических испытаний в количестве 103 в расчете на определение значения интерполирующей функции в одной точке.

На листинге_№5 приведен код программы интерполирования функции, заданной в вершинах многомерного куба (n = 100).

Листинг_№5

%Программа интерполяции в многомерном кубе

%функции, заданной в вершинах куба

function cube

%Определяем размерность куба

n=100;

%Определяем точку, в которую функция

%будет интерполирована

x=0.5*ones(1,n);

k=0;

%Организуем цикл статистических испытаний с

%различной длиной статистических серий

for N=2000:2000:100000

s=0; sd=0;

for i=1:N

e=rand(1,n)<=x;

fv=f_vertex(e);

s=s+fv; sd=sd+fv^2;

end

k=k+1;

%Вычисляем среднее Mf(e1,...,en) значение

%интерполируемой функции в выбранной точке x

Mf(k)=s/N;

%Определяем дисперсию Df(e1,...,en)

%интерполируемой функции в выбранной точке x

Df(k)=sd/N-Mf(k)^2;

lng(k)=N;

end

%Рисуем зависимость среднего значения интерполируемой

%функции от длины статистической серии N

subplot(1,2,1); semilogx(lng,Mf);

%Рисуем зависимость дисперсии интерполируемой

%функции от длины статистической серии N

subplot(1,2,2); semilogx(lng,Df);

%Определение интерполируемой функции в узлах

%многомерного куба

function y=f_vertex(e)

y=sum(e);

На рис.5 приведен итог работы кода программы листинга_№5. Решалась задача интерполирования методом Монте-Карло функции, заданной в вершинах 100-мерного куба. На левой фигуре изображено значение интерполирующей функции в точке (0.5,…,0.5) в зависимости от длины статистической серии. Видно, что колебания происходят вокруг значения 50 со средней амплитудой 0.05 при максимальной длине статистической серии 105. На правой фигуре изображена дисперсия интерполирующей функции в зависимости от длины статистической серии.

Рис.5. Результаты интерполяции методом Монте-Карло функции,
заданной в вершинах 100-мерного куба


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: