Some problems using map/container with if-else statement in nested for loops
3 次查看(过去 30 天)
显示 更早的评论
Hi everyone, this is my following code with the use of map and container with if-else statement in nested for loops. I don't understand why the error Unrecognized function or variable 'Intensitysol1' appears, while there is no problem for Intensitysol2. How should I fix it?
theta=0.65;
J=0.08;
for ii = 0:1:49;
omega_y(ii+1) = 0 + (0.15/100)*(ii);
end
for jj = 0:1:100;
omega_z(jj+1) = 0 -(0.15/100)*(jj);
end
valueset_omega_y_vector = 1:1:(length(omega_y));
valueset_omega_z_vector= 1:1:(length(omega_z));
M_omega_y = containers.Map(omega_y,valueset_omega_y_vector);
M_omega_z = containers.Map(omega_z, valueset_omega_z_vector);
for ii = 1:1:49
for jj = 0:1:100
u = 0 : 2*pi/1000 : 2*pi;
E_minus = 2*J*cos(theta).*cos(u) - (sqrt(omega_y(ii+1)^2 + omega_z(jj+1)^2 + 4*(J^2)*((sin(theta))^2).*((sin(u)).^2) -4*J*omega_z(jj+1)*sin(theta).*sin(u)));
TF = islocalmin(E_minus);
a=u(TF);
if size(a)==2
Intensitysol1(M_omega_y(omega_y(ii+1)),M_omega_z(omega_z(jj+1)))=a(1);
Intensitysol2(M_omega_y(omega_y(ii+1)),M_omega_z(omega_z(jj+1)))=a(2);
elseif size(a)==1
Intensitysol2(M_omega_y(omega_y(ii+1)),M_omega_z(omega_z(jj+1)))=a(1);
end
end
end
figure(1)
surf(omega_z, omega_y, Intensitysol1)
xlabel('\omega_z')
ylabel('\omega_y')
zlabel('k')
figure(2)
surf(omega_z, omega_y, Intensitysol2)
xlabel('\omega_z')
ylabel('\omega_y')
zlabel('k')
0 个评论
采纳的回答
Voss
2024-6-29
编辑:Voss
2024-6-29
Intensitysol1 is not defined because the condition "if size(a)==2" is never true. size() returns a vector, and comparing a vector to a scalar in an if statement evaluates to true only if the condition is true for all elements of the vector, which is not the case here since the size of "a" will be 1-by-something (since "a" is a row vector). That is, size(a) is never a vector of all 2's.
You probably mean "if isequal(size(a),[1 2])", or, simpler, "if length(a)==2" or "if numel(a)==2".
Note that "if size(a)==1" works because "a" would be of size 1x1, so size(a)==[1 1], and that condition is considered true since all elements of the size are equal to 1. But here as well it is clearer to use length() or numel() instead of size().
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!