我正在尝试在matlab中绘制L1范数的等值线,但完全不起作用,我陷入了困境。 有什么帮助吗?
x = linspace(-1,1,10);
y = linspace(-1,1,10);
[xm,ym] = meshgrid(x,y);
z = sum(abs(xm-ym));
surfc(x,y,z)
根据L1范数的定义,将您的第四行更改为以下内容:
z = abs(xm)+abs(ym);
您可以更高效地使用bsxfun
,以避免生成矩阵xm
和ym
:
x = linspace(-1,1,10);
y = linspace(-1,1,10);
z = bsxfun(@plus, abs(x), abs(y).');
surfc(x,y,z)
两种方法中的任何一种都会产生:
为了获得更好的图像,您应该增加采样率,并可能删除表面边缘:
x = linspace(-1,1,100);
y = linspace(-1,1,100);
z = bsxfun(@plus, abs(x), abs(y).');
surfc(x,y,z,'edgecolor','none')