Проблема порождена делением на член x ^ 2 + y ^ 2, который в некоторых случаях фактически равен нулю, и неправильным использованием вами операторов Matlab. Наконец, функция plot
не подходит для построения трехмерной поверхности. Я бы порекомендовал использовать вычисления Symboli c для простоты:
syms x y;
z = ((x^4 + y^4 - 4 * x^2 * y^2)/(x^2 + y^2));
fsurf(z,[-15,15,-15,15])
Вы также можете использовать свою версию нумерации c (быстрее ), но позаботьтесь о том, чтобы использовать правильные операторы - вместо умножения матрицы *
используйте, например, поэлементное умножение .*
. Это относится и к ^
и /
.
[x,y] = meshgrid(-15:1:15, -15:1:15);
z = ((x.^4 + y.^4 - 4 .* x.^2 .* y.^2)./(x.^2 + y.^2));
surf(x,y,z)
Обратите внимание, что в этом случае источник не определен - из-за проблемы деления на ноль. Вы можете использовать другой диапазон, чтобы избежать этой проблемы, если хотите.
[x,y] = meshgrid(-15:0.17:15, -15:0.17:15);
z = ((x.^4 + y.^4 - 4 .* x.^2 .* y.^2)./(x.^2 + y.^2));
surf(x,y,z,'EdgeAlpha',0) % The above range is dense - so we remove the edge coloring for clarity.