在matlab中的L1范数等值线图

She*_*hew 4 matlab vector contour

我试图在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)
Run Code Online (Sandbox Code Playgroud)

Lui*_*ndo 5

根据L1规范定义,将第四行改为:

z = abs(xm)+abs(ym);
Run Code Online (Sandbox Code Playgroud)

你可以更有效地使用它bsxfun来避免生成矩阵xm,ym:

x = linspace(-1,1,10);
y = linspace(-1,1,10);
z = bsxfun(@plus, abs(x), abs(y).');
surfc(x,y,z)
Run Code Online (Sandbox Code Playgroud)

这两种方法中的任何一种都会产生:

在此输入图像描述

为了获得更好的图像,您应该增加采样,并可能删除表面边缘:

x = linspace(-1,1,100);
y = linspace(-1,1,100);
z = bsxfun(@plus, abs(x), abs(y).');
surfc(x,y,z,'edgecolor','none')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这是我最喜欢的问题之一:-)那是使用_transpose_而不是_conjugate transpose_.请参阅讨论[此处](http://stackoverflow.com/q/25150027/2586922) (2认同)