现在我在三维空间中有一个标量场
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);
出了什么问题?
答案 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);