2014-11-07 4 views
0

Теперь у меня есть скалярное поле в трехмерном пространстве, которое являетсяРисование скалярного поля в MATLAB

v=-1*(1-(b./sqrt(x.^2+y.^2+z.^2)).^3).*z только для sqrt(x.^2+y.^2+z.^2)>b;

иначе v=0

Теперь я хочу обратить скалярное поле с помощью функции "среза"

Мой код:

[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) 

Но в конце концов я получаю эти ошибки:

Error using griddedInterpolant The grid vectors do not define a grid of points that match the given values.

Error in interp3 (line 142) F = griddedInterpolant(X, Y, Z, V, method,extrap);

Error in slice (line 100) vi = interp3(x,y,z,v,xi,yi,zi,method);

Error in Electromagnetism_graph2 (line 11) h=slice(x,y,z,v,[],[],-10:1:10);

Что случилось?

ответ

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); 
Смежные вопросы