Some problems using map/container with if-else statement in nested for loops
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Voss
le 29 Juin 2024
Modifié(e) : Voss
le 29 Juin 2024
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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!