Autor Tema: Punto de corte

0 Usuarios y 1 Visitante están viendo este tema.

22 Julio, 2023, 07:35 am
Leído 489 veces

susojuarez

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 66
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Buenos días, tengo una pequeña aplicación en Matlab que compara dos vectores de números complejos (que corresponden a dos funciones de transferencia) y me da el punto de cruce entre ellos. La cosa es que quiero que coja el primer punto de intersección y pare, pero claro el sigue comparando y coge el siguiente punto de corte, y luego el siguiente. Podría alguien decirme como parar en el primer punto, el más exterior. Dejo la imagen en el fichero adjunto. Gracias.

anteresta=0.1 + 0i;
resta=0 + 0i;
ptoy=0 + 0i;
ptox=0;

kp=0.5;
t=2.1;
L=0.9;

w1=0.1*(0.1:0.1:150);
G=(kp./(t*1i*w1+1)).*exp(-L*1i*w1);
plot(G,'r'); hold on

Kc=1.5;
Pr=0.25;
Ti=0.2;
w2=0.1*(0.1:0.1:150);
DF=-1./((Kc*(1i*(w2*Ti+(4*Pr/pi))+1)./(1i*w2*Ti)));
plot(DF, 'g') ;

% Buscamos la mínima diferencia entre las dos funciones
n=length(w1);
m=length(w2);
for i=1:n
    for j=1:m
        resta = abs(G(i)-DF(j));
        if (resta < anteresta)
            ptoy = G(i);
            ptox = i;
            anteresta = resta;
        end
    end
end
disp(ptoy);

22 Julio, 2023, 08:10 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

 No recuerdo la sintaxis exacta del MatLab pero si simplemente quieres que al encontrar un punto de corte se detenga no uses bucles for, sino while..

 Algo del tipo:

 encontrado=0
 i=0
 j=0

 while(i<=n&&encontrado=0)
      i=i+1;
 ...
 while(j<=m&&encontrado=0)
      j=j+1;
 ...

 y cuando encuentre el punto hacer encontrado=1.

Saludos.

22 Julio, 2023, 12:07 pm
Respuesta #2

susojuarez

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 66
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Gracias. Tuve que añadir una condición para poner a 1 la variable "encontrado", pero me sirvió :)