2015-04-25 1 views
1

У меня есть поверхность в MATLAB, который строится с помощью следующего кода:Как можно сгладить поверхность в MATLAB?

[xi, yi] = meshgrid(S/K, days); 
vq = griddata(S/K, days, rbf/K, xi, yi,'natural'); 
mesh(xi,yi,vq) 

Полученное изображение является довольно грубым, и имеет множество линий сетки, поскольку есть около 200 точек данных в каждом векторе. Можно ли построить сетку, которая имеет меньшее количество точек сетки (например, 20), которая усредняет существующую поверхность сетки meshgrid, griddata?

+1

Без усреднения: 'mesh (xi (1: 20: end, 1: 20, end), yi (1: 20: end, 1: 20, end), vq (1: 20: end, 1 : 20, end)) ' –

+0

Это решение работает хорошо, но есть ли простой способ усреднить эти точки для получения более гладкой поверхности? –

ответ

2

Одним из вариантов является использование conv2 на данных vq сглаживать, а затем декодируют, как предложил @Ander:

n = 5; % averaging size 
vq_2 = conv2(vq, ones(n)/n.^2,'same'); 
mesh(xi(1:20:end,1:20,end),yi(1:20:end,1:20,end),vq_2(1:20:end,1:20,end)) 

Там будет немного краевого эффекта, как по умолчанию conv2 подушечки с нулями.