Matlab中的L1范数等高线图

4

我正在尝试在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)
1个回答

5

根据L1范数的定义,将您的第四行更改为以下内容:

z = abs(xm)+abs(ym);

您可以更高效地使用bsxfun,以避免生成矩阵xmym

x = linspace(-1,1,10);
y = linspace(-1,1,10);
z = bsxfun(@plus, abs(x), abs(y).');
surfc(x,y,z)

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

enter image description here

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

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

enter image description here


我认为它应该是 z = abs(xm) - abs(ym); - kaz
@kaz 规范不能为负数 :-) - Luis Mendo
但是从其他参考资料中我看到,轮廓是矩形的。但是这里不是矩形的。 - Shew
为什么要使用"abs(y)."而不是"abs(y)"?"."有什么作用? - Shew
2
这是我最喜欢的问题之一 :-) 这是使用 转置 而不是 _共轭转置_。在这里可以看到讨论 here - Luis Mendo
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接