我正在尝试构建一个代码,其中不计算某些特定值的等式。我有一个带有几个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
答案 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