Matlab - Escoger axes en un bucle

 
Vista:
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 20/09/2013 22:21:53
Tengo dos gráficas en una GUI y tengo que graficar diferentes datos en cada una según un numero de iteraciones que haga, mi problema es que esta todo dentro de un while y no puedo definir dentro del while en que gráfica quiero que grafique el dato, por lo tanto me toca definirlo fuera del while pero no funciona solo me grafica una sola gráfica tengo algo parecido a esto:

axes(handles.axes1); % se elige el axes 1
axes(handles.axes2); % se elige el axes 2

while(xxxxxxxxxxxxx)


plot(x,y,'*r');
plot(x1,x2,'*r');

hold on


end


x,y deberia graficarse en la primera grafica y x1,x2 en la segunda, pero no se como solucionarlo ya que si elijo el axes dentro del while matlab me dice que el rendimiento bajara y eso pasa ya que si pongo unas mil iteraciones se va a demorar mucho haciendolas, y me da la sugerencia de ponerlo fuera del while pero no me funciona. Alguna idea? gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Escoger axes en un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 21/09/2013 02:12:16
Todo depende que es lo quieres hacer. Pero en términos generales si vas a graficar dentro de un bucle en dos axis diferentes dependiendo de una iteración, obviamente a demorarse pero no tanto. YO obtengo los 1000 iteraciones en aproximadamente en 1 minuto.
Deberías ser mas preciso en tu pregunta, además poner tu código completo, de repente viendo tu código completo puedo deducir exactamente que es lo quiere hacer.
Tu pregunta hasta ahorita se parece a: "Un chofer de autos se va a un mecánico y le dice que su auto no arranca, pero sin embargo solamente le dice que su auto es de color blanco y 4 llantas y no ha llevado el auto al mecánico para que lo vea, pero con ese información que le da el chofer al mecánico de autos, simplemente el mecánico no le podría dar una respuesta adecuada"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function varargout = axis_dentro_while1(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @axis_dentro_while1_OpeningFcn, ...
                   'gui_OutputFcn',  @axis_dentro_while1_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
 
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
 
function axis_dentro_while1_OpeningFcn(hObject, eventdata, handles, varargin)
i=1;
n=200;
tic;
 while i<=1000
 
x=1:n;
y=rand(1,n);
axes(handles.axes1)
plot(x,y,'*b');
 
axes(handles.axes2);
x1=1:n;
y1=rand(1,n);
plot(x1,y1,'*r');
i=i+1;
 end
 final=toc
 
handles.output = hObject;
guidata(hObject, handles);
 
function varargout = axis_dentro_while1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;




Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 21/09/2013 03:47:22
Gracias Jose, disculpame si no me explique bn es exactamente el codigo que pusiste, a grandes rasgos, lo que pasa es que en mi codigo hay muchas cosas inncesarias entonces crei que habia una forma generica de resolver mi problema.

Lo que pasa es que estoy usando 300000 iteraciones, porque estoy haciendo una aplicacion de redes neuronales, y ps si a ti se te demora un minuto con mil imaginate con 300000, si yo solo defino un solo axes fuera del while no se me demora ni 30 segundos en hacer las 300000 iteraciones y me grafica bn.

Si tu escoges el axes a graficar dentro del while matlab te da un warning que dice que se va a demorar mas el proceso y da un ejemplo de como ponerlo fuera del while pero no me funciona. Dime si es necesario que ponga la parte de mi codigo y te lo comento todo. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Escoger axes en un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 21/09/2013 04:04:23
Es muy simple. Si los usuarios fueran claras y pusieran toda la informacion posible. Entonces tendrían respuestas mas precisas y adecuadas a sus preguntas. En eso incluye muchas veces el poner sus códigos. Pero muchos usuarios no hacen eso, por cuestión de proteger sus códigos. Pero este es un foro para compartir conocimientos de Matlab, y cierta manera hago eso, pongo códigos completos y la forma de ejecutar.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 21/09/2013 04:55:12
Bien, no tengo ningun problema en poner mi codigo completo, es un poco extenso pero ahi va

function varargout = interfaz(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @interfaz_OpeningFcn, ...
'gui_OutputFcn', @interfaz_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

function interfaz_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = interfaz_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

function edit1_Callback(hObject, eventdata, handles)

function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit2_Callback(hObject, eventdata, handles)

function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit3_Callback(hObject, eventdata, handles)

function edit3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit4_Callback(hObject, eventdata, handles)

function edit4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

%%AQUI LO IMPORTANTE

function pushbutton1_Callback(hObject, eventdata, handles)

a=get(handles.uitable1,'Data');
g=str2double(a(:,:)) ;
c1=str2double(a(:,1)); % Datos de la primera entrada
c2=str2double(a(:,2)); % Datos de la segunda entrada
b=max(max(c1));
c=max(max(c2));
d=min(min(c1));
e=min(min(c2));
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)


f=str2double(get(handles.edit1,'String')); %Optención k (número de patrones)
alpha=str2double(get(handles.edit2,'String')); %Optención ritmo de aprendizaje
niu=str2double(get(handles.edit3,'String')); %Optención niu coeficiente de momento
ed=str2double(get(handles.edit4,'String')); %Optención erro min promedio


%Obtención salida deseada


A=zeros(f,3);

for i=1:f

A(i,1)= ((2*g(i,1))/(b-d))+(1-((2*b)/(b-d))); %Normalización de datos primera entrada

end

for i=1:f

A(i,2)= ((2*g(i,2))/(c-e))+(1-((2*c)/(c-e))); %Normalización de Datos Segunda entrada

end

yd=zeros(f,1);

for i=1:f
if A(i,1)>0 && A(i,2)>0
yd(i,1)=1;
elseif A(i,1)<0 && A(i,2)<0
yd(i,1)=-1;
else
yd(i,1)=-1;
end
end

%Inicialización de pesos de forma random dentro de un rango de []

a0=1;

% Primero se preguntará si el enrtenamiento ha de hacerse por lotes o de patron en patron
modo=get(handles.online,'value');


w0=0.002/f;
w1=0.1/f;
w2=0.5/f;

want1=0.8/f;
want2=0.2/f;
want0=0.3/f;

if modo==1 %Online

w=[w1 w2];


eprom=[1 1 1];
cont=0;
cont1=1;% Repeticiones
eq0=0;
eq1=0;
eq2=0;
y=zeros(f,3);
yf=zeros(f,3);



axes(handles.axes2); % se elige el axes 2
cla;

while ((eprom(1,1)>ed)||(eprom(1,2)>ed)||(eprom(1,3)>ed))

for j=1:f

%Multiplica los pesos por las entrada


y0=w0*a0;
y1=(A(j,1)*w(1,1));
y2=(A(j,2)*w(1,2));

y(j,:)=[y0 y1 y2];

yf(j,:)=(1-exp(-y(j,:)))/(1+exp(-y(j,:)));

e((j+(cont*f)),1)=yd(j,:)-yf(j,1);
e((j+(cont*f)),2)=yd(j,:)-yf(j,2);
e((j+(cont*f)),3)=yd(j,:)-yf(j,3);


% Error cuadrático

ex0=(e((j+(cont*f)),1))^2;
ex1=(e((j+(cont*f)),2))^2;
ex2=(e((j+(cont*f)),3))^2;

eq0=eq0+ex0;
eq1=eq1+ex1;
eq2=eq2+ex2;

eprom(1,1)=(1/(cont1))*(eq0);%Error promedio Gráfica 2
eprom(1,2)=(1/(cont1))*(eq1);%Error promedio Gráfica 2
eprom(1,3)=(1/(cont1))*(eq2)%Error promedio Gráfica 2


epromt=sqrt(eprom(1,1)^2+eprom(1,3)^2+eprom(1,3)^2);

%Posterior mente se calcula el nuevo peso W
%1. Se calcula la derivada de la función de activación dada por 1- phi^2

dev_phi_1=1-((yf(j,2))^2);
dev_phi_2=1-((yf(j,3))^2);
dev_phi_0=1-((yf(j,1))^2);


%plot(eprom,cont1)

wp3=w0;

w1=w(1,1)+(alpha*e((j+(cont*f)),2)*dev_phi_1*A(j,1))+ niu*(w(1,1)-want1)
w2=w(1,2)+(alpha*e((j+(cont*f)),3)*dev_phi_2*A(j,2))+ niu*(w(1,2)-want2)
w0=w0+(alpha*e((j+(cont*f)),1)*dev_phi_0*1)+ niu*(w0-want0)


want1=w(1,1);
want2=w(1,2);
want0=wp3;


w=[w1 w2];


end
cont=cont+1;
cont1=cont1+1;
if(cont==300000)

break;
end

plot(w1,w2,'*r');
%plot(cont1,epromt,'*r');
hold on


end


else %Por Lotes

eprom=[1 1 1];
dev_phi_1=zeros(f,1);
dev_phi_2=zeros(f,1);
dev_phi_0=zeros(f,1);
cont=0;
cont1=1;% Repeticiones
eq0=0;
eq1=0;
eq2=0;
e=zeros(f,3);
y=zeros(f,3);
y1=zeros(f,1);
y2=zeros(f,1);
yf=zeros(f,3);
w0=w0*ones(f,1);
w1=w1*ones(f,1);
w2=w2*ones(f,1);
want0=want0*ones(f,1);
want1=want1*ones(f,1);
want2=want2*ones(f,1);
eqprom=[0 0 0];
axes(handles.axes2); % se elige el axes 2
cla
while ((eprom(1,1)>ed)||(eprom(1,2)>ed)||(eprom(1,3)>ed))


%Multiplica los pesos por las entrada fx1*1xf

y0=a0*w0;
for i=1:f
y1(i,1)=(A(i,1)*(w1(i,1)));
y2(i,1)=(A(i,2)*(w2(i,1)));
end


y(:,1)= y0;
y(:,2)= y1;
y(:,3)= y2;

for i=1:f
for k=1:3
yf(i,k)=(1-exp(-y(i,k)))/(1+exp(-y(i,k)));
end
end

e(:,1)=yd-yf(:,1);
e(:,2)=yd-yf(:,2);
e(:,3)=yd-yf(:,3);

% Error cuadrático

for i=1:f

ex0=(e(i,1))^2;
ex1=(e(i,2))^2;
ex2=(e(i,3))^2;

eq0=eq0+ex0;
eq1=eq1+ex1;
eq2=eq2+ex2;

eq(cont1,1)=eq0;
eq(cont1,2)=eq1;
eq(cont1,3)=eq2;

end


eprom(1,1)=(1/(cont1))*(eq0);%Error promedio Gráfica 2
eprom(1,2)=(1/(cont1))*(eq1);%Error promedio Gráfica 2
eprom(1,3)=(1/(cont1))*(eq2)%Error promedio Gráfica 2
epromt=sqrt(eprom(1,1)^2+eprom(1,3)^2+eprom(1,3)^2);

%Posterior mente se calcula el nuevo peso W
%1. Se calcula la derivada de la función de activación dada por 1- phi^2
for i=1:f
dev_phi_1(i,1)=1-((yf(i,2))^2);
dev_phi_2(i,1)=1-((yf(i,3))^2);
dev_phi_0(i,1)=1-((yf(i,1))^2);
end

wp3=w0;
wp1=w1;
wp2=w2;

for i=1:f
w1(i,1)=w1(i,1)+(alpha*e(i,2)*dev_phi_1(i,1)*A(i,1))+ niu*(w1(i,1)-want1(i,1));
w2(i,1)=w2(i,1)+(alpha*e(i,3)*dev_phi_2(i,1)*A(i,2))+ niu*(w2(i,1)-want2(i,1));
w0(i,1)=w0(i,1)+(alpha*e(i,1)*dev_phi_0(i,1)*1)+ niu*(w0(i,1)-want0(i,1));
end

want1=wp1;
want2=wp2;
want0=wp3;


w=[w1 w2]
w0

cont=cont+1;
cont1=cont1+1;
if(cont==300000)

break;
end

plot(w1,w2,'+');
%plot(cont1,epromt,'+');
hold on


end
end

Bien como puedes ver yo defino el axes que voy a trabajar antes del while, y grafico w1 y w2 y tengo comentado cont1, epromt1 porque no puedo hacer que se grafiquen los dos datos al tiempo, como puedes ver tengo 300000 iteraciones y apenas se cumplan se para el proceso y ps todo se hace cuando pulso un boton
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Escoger axes en un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 21/09/2013 05:04:29
Mándame tu guide a mi correo tango el interfaz.fig y interfaz.m para poder verlo. Pues reproducir tu código implica tiempo.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Escoger axes en un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 24/09/2013 16:13:22
Estuve esperando que me enviaras tu codigo a mi correo para revisarlo, ya que reproducir todo el guide implica tiempo.
Bueno no haz enviado.
Lo siento.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 24/09/2013 17:26:27
Si yo te lo envie el mismo dia a [email protected] pensaba que estabas corto de tiempo y no me habias respondido, que raro ya te lo reenvio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 26/09/2013 22:28:09
Si te llego?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Escoger axes en un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/09/2013 23:29:27
Anteriormente tu ya me habías escrito a mi correo? Es decir antes que te pida el guide vía correo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 26/09/2013 23:30:40
no, es la primera vez que te envio algo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Escoger axes en un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/09/2013 23:36:26
Bueno te digo, que la dirección de tu correo ya esta en mi base de datos, y esta en la base de correos bloqueados. Es decir seguro mandataste propagandas o algo a mi correo anteriormente, de repente años anteriores en algún tiempo. Y era propaganda lo que provenía de tu correo, y por eso simplemente se bloqueo tu correo para evitar futuras propagandas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 26/09/2013 23:43:21
Que raro es la primera vez que tengo tu correo, pero bueno, entonces te lo envio otra vez?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Escoger axes en un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/09/2013 23:49:30
Bueno te he desbloqueado la dirección tu correo para que puede llegar tu correo a mi correo.
Pero seguro alguien tomo tu correo y me escribió y mando información no pertinente y por tal razón se llegó a bloquear tu correo. No es bueno que nisiquiera nuestros amigos íntimos conozcan nuestro contraseña.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por Elvis (13 intervenciones) el 27/09/2013 00:01:00
Listo ya te lo reenvie gracias por la recomendacion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Escoger axes en un bucle

Publicado por xavi (2 intervenciones) el 19/11/2014 08:12:51
Jose, tengo un problema, se que se soluciona con un par de lineas de codigo pero la verdad busque por toda la web y no puedo encontrar respuesta a mi problema, lo k sucede es que estoy realizando un control de almacen y son muchas cajas (axes) donde debo cambiar el color para ver si esta disponible (color verde) .... cambiar el color no es nada dificil, mi problema es que quiero crear un ciclo para que me recorra la matriz con un for y que el valor de x sea el numero de caja(axes), por ejemplo :
[m,n] = size(cajafind);
for x=1:1:m
..........
set('handles.axes(numero de caja x )','color','green'); %esta es la linea importante que necesito saber
..........
end


espero me puedas ayudar...... te lo agradeceria bastante!
asd
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar