Matlab сглаживает график трехмерной сетки

Привет, у меня есть набор данных A, каждый элемент которого соответствует комбинации x и y. Когда я строю этот график с помощью сетки, я получаю график с множеством пиков на нем. Это не является неожиданным, но я хотел бы найти способ сгладить их, чтобы получить гладкую поверхность. Я пытался использовать команду smooth3, но не могу понять, как сделать подходящий ввод. Любая помощь будет оценена по достоинству. Спасибо

Вот как генерируются мои данные.

function v = f(x,y) % Not actual function
return x*rand()+y*rand()
end

x = 0.05:0.01:0.95;
y = 0.05:0.01:0.95;

o = zeros(length(x),length(y));
A = zeros(length(x), length(y));
for k = 1:5
    for i = 1:length(x)
        for j = 1:length(y)
            o(i,j) = f([x(i), y(j)]);
        end
    end
    A= A+o;
end
A = A/5;

Это то, что производит сюжет.

[X,Y] = meshgrid(x);
mesh(A)

person wookie1    schedule 11.03.2013    source источник
comment
Ваш пример кода не работает в текущей форме. f и Average не определены в вашем коде, A и o не инициализированы.   -  person Eitan T    schedule 11.03.2013
comment
Я знаю, я убрал большую часть материала, чтобы попробовать и просто показать, как будут выглядеть данные, f — функция, возвращающая одно число, Average = A, A и o инициализируются нулями (length (x), length (y). )).   -  person wookie1    schedule 11.03.2013
comment
Тогда, пожалуйста, поместите это в код, чтобы тем, кто попытается помочь вам, не пришлось возиться с такими вещами.   -  person Eitan T    schedule 11.03.2013
comment
Если вы не опубликуете используемую вами функцию, как кто-то сможет воспроизвести ваши результаты и решить вашу проблему? Кстати, opt тоже не определено.   -  person Eitan T    schedule 11.03.2013
comment
Я не могу опубликовать фактическую функцию, поскольку она использует несколько исполняемых файлов, некоторые из которых у меня нет разрешения на распространение. В любом случае проблема не в примере кода, а в том, как сгладить вывод на большую гладкую, возможно, квадратичную поверхность.   -  person wookie1    schedule 11.03.2013
comment
Что ж, вам, по крайней мере, придется показать характер проблемы, чтобы продолжить. Без какой-либо информации на этот вопрос нельзя дать правильный ответ.   -  person Eitan T    schedule 11.03.2013


Ответы (1)


возможно, вы можете попробовать свертку вашей переменной A с фильтром (ниже приведен пример фильтра Гаусса).

C = conv2(A,fspecial('гауссовский', hsize, sigma)); проверьте conv2 и fspecial в справке Matlab

person Cici    schedule 12.03.2013