Why are complex values obtained for the below function (x) in the if condition?
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Navid
 el 14 de Nov. de 2023
  
Hi there! I'm facing an issue with the below function. The function is supposed to generate values for x that are not imaginary. However, I'm getting a warning: "Imaginary parts of complex X and/or Y arguments ignored." To be more specific, unlike the output shown in the figure, when y is equal to 0, the function should calculate x=0. Can you please assist me in finding out what could be causing this issue?
clc
close all
clear all
a = 280;
b = 580;
c = 0.35;
d =1.71E5;
e = 7;
f = 1+(3.5*(a/b));
g = d/(1+(0.002*e*(d/a)));
y = (0:2.5:b);
if any(y <= a)
   x = (y/d)+(0.002*((y/a).^e));
   if any(y > a)
   x = 0.002+(a/d)+((y-a)/g)+(c.*(((y-a)/(b-a)).^f));
   end
end
plot(x,y)
xlabel('x')
ylabel('y')
0 comentarios
Respuesta aceptada
  Matt J
      
      
 el 14 de Nov. de 2023
        Because you are raising a negative number to a fractional power, e.g.,
(-2)^1.5
1 comentario
  Matt J
      
      
 el 14 de Nov. de 2023
				
      Editada: Matt J
      
      
 el 14 de Nov. de 2023
  
			Perhaps,
a = 280;
b = 580;
c = 0.35;
d =1.71E5;
e = 7;
f = 1+(3.5*(a/b));
g = d/(1+(0.002*e*(d/a)));
y = (0:2.5:b);
 x = (y/d)+(0.002*((y/a).^e));
 r=(y>a); 
 x(r)= 0.002+(a/d)+((y(r)-a)/g)+(c.*(((y(r)-a)/(b-a)).^f));
plot(x,y)
xlabel('x')
ylabel('y')
Más respuestas (1)
  Torsten
      
      
 el 14 de Nov. de 2023
        Maybe you mean
clc
close all
clear all
a = 280;
b = 580;
c = 0.35;
d =1.71E5;
e = 7;
f = 1+(3.5*(a/b));
g = d/(1+(0.002*e*(d/a)));
y = (0:2.5:b);
x = zeros(size(y));
idx = y<=a;
x(idx) = (y(idx)/d)+(0.002*((y(idx)/a).^e));
x(~idx) = 0.002+(a/d)+((y(~idx)-a)/g)+(c.*(((y(~idx)-a)/(b-a)).^f));
plot(x,y)
xlabel('x')
ylabel('y')
0 comentarios
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





