使用meshgrid

时间:2015-07-09 16:33:32

标签: matlab indexing

我正在尝试构建一个代码,其中不计算某些特定值的等式。我有一个带有几个x和y值的meshgrid,我想要包含一个for循环,它将为meshgrid中的大多数点计算一些值,但我试图在该循环中包含一个条件,如果这些点有一个如果指定了索引,则不会计算该值。在我的第二组for / if循环中,我想说对于i和k(行和列)的所有值,除了指定的i和k值之外,计算z和phi的值(在if中)环)。我现在正在做的事情不起作用......

我得到的错误是: The expression to the left of the equals sign is not a valid target for an assignment.

这是我目前的代码。我真的很感激任何关于此的建议!提前致谢

U_i = 20;            
a = 4;               

c = -a*5;            
b = a*10;           
d = -20;             
e = 20;               

n = a*10;           

[x,y] = meshgrid([c:(b-c)/n:b],[d:(e-d)/n:e]');

for i = 1:length(x)
    for k = 1:length(x)
        % Zeroing values where cylinder is
        if sqrt(x(i,k).^2 + y(i,k).^2) < a
            x(i,k) = 0; 
            y(i,k) = 0;
        end 
    end
end

r = sqrt(x.^2 + y.^2);  
theta = atan2(y,x);
z = zeros(length(x));
phi = zeros(length(x));

for i = 1:length(x)
    for k = 1:length(x)
         if (i > 16 && i < 24 && k > 16 && k <= length(x))
             z = 0;
             phi = 0;
         else
             z = U_i.*r.*(1-a^2./r.^2).*sin(theta);         % Stream function   
             phi = U_i*r.*(1+a^2./r.^2).*cos(theta);        % Velocity potential 
         end
    end
end

1 个答案:

答案 0 :(得分:0)

问题中的原始代码可以重写,如下所示。请注意与ind(17:24,:)一致,因为您的编辑现在排除了24,原始问题包括24。

U_i = 20;            
a = 4;               

c = -a*5;            
b = a*10;           
d = -20;             
e = 20;               

n = a*10;           

[x,y] = meshgrid([c:(b-c)/n:b],[d:(e-d)/n:e]');

ind = find(sqrt(x.^2 + y.^2) < a);
x(ind) = 0;
y(ind) = 0;

r = sqrt(x.^2 + y.^2);  
theta = atan2(y,x);

ind = true(size(x));
ind(17:24,17:length(x)) = false;

z = zeros(size(x));
phi = zeros(size(x));
z(ind)   = U_i.*r(ind).*(1-a^2./r(ind).^2).*sin(theta(ind));   % Stream function   
phi(ind) = U_i.*r(ind).*(1+a^2./r(ind).^2).*cos(theta(ind));   % Velocity potential