在matlab中绘制标量场

时间:2014-11-07 18:02:53

标签: matlab plot field scalar

现在我在三维空间中有一个标量场

v=-1*(1-(b./sqrt(x.^2+y.^2+z.^2)).^3).*z仅适用于sqrt(x.^2+y.^2+z.^2)>b;

否则v=0

现在我想通过使用" slice"来绘制标量字段。功能

我的代码:

[x,y,z]=meshgrid(-10:1:10);
b=1;
%v=-1*(1-(b./sqrt(x.^2+y.^2+z.^2)).^3).*z;
if ((x.^2+y.^2+z.^2)>=b)
    v=-1*(1-(b./sqrt(x.^2+y.^2+z.^2)).^3).*z;
else
    v=0
end
h=slice(x,y,z,v,[],[],-10:1:10);
set(h,'EdgeColor','none','FaceColor','interp')
alpha(.5)

但最终我得到了这些错误:

  

使用griddedInterpolant时出错网格矢量未定义网格   与给定值匹配的点数。

     

interp3错误(第142行)               F = griddedInterpolant(X,Y,Z,V,               方法,extrap);

     

切片出错(第100行)       vi = interp3(x,y,z,v,xi,yi,zi,method);

     

Electromagnetism_graph2中的错误(第11行)   H =切片(X,Y,Z,V,[],[], - 10:1:10);

出了什么问题?

1 个答案:

答案 0 :(得分:3)

我不确切知道你做了什么,但这似乎工作正常(没有错误)。我认为您的错误在if-else。如果条件失败,您将分配0(标量)。您应该只使v的元素等于零。

[x,y,z]=meshgrid(-10:1:10);
b=1;
v=-1*(1-(b./sqrt(x.^2+y.^2+z.^2)).^3).*z;
indMat=sqrt(x.^2+y.^2+z.^2)>b;
v(~indMat)=0;
h=slice(x,y,z,v,[],[],-10:1:10);