У меня проблема с командой fsurf:
Когда я использую
fsurf(@(x,y) ackleyfcn([x,y]),[-32 32 -32 32])
Я получил это предупреждение:
Предупреждение. Функция неожиданно ведет себя на входных данных массива. Чтобы повысить производительность, правильно векторизуйте свою функцию, чтобы возвращать выходные данные того же размера и формы, что и входные аргументы.
И эта картинка (спустя долгое время, около 20 сек):
Когда я использую
ezsurf(@(x,y) ackleyfcn([x,y]),[-32 32 -32 32])
Я не получил предупреждения и правильную (и быструю) картинку:
Где:
function z = ackleyfcn(xx)
% Ackley's function
% Search domain: [-32,32]
% Global minimum: f(x) = 0 | x = (0,...,0)
d = size(xx, 2);
xx = max(-32,min(32,xx));
z = -20*exp(-0.2*sqrt(1/d*sum(xx.^2,2))) - exp(1/d*sum(cos(2*pi*xx),2)) + 20 + exp(1);
end
Я думаю, что эта функция Экли правильно векторизована. Я прав?
В чем ошибка fsurf и почему изображение, сгенерированное им, выглядит странно и создается дольше?
Заранее спасибо!
Ps. Я использую версию R2017b.
MeshDensity
указано количество точек оценки на направление, указанное в виде числа. Значение по умолчанию — 35. Поскольку объекты fsurf используют адаптивную оценку, фактическое количество точек оценки больше. Я думаю, чтоfsurf
делает больше работы, чемezsurf
. 04.03.2018