Matlab - AYUDA PLOT GUI GRACIAS!!

 
Vista:

AYUDA PLOT GUI GRACIAS!!

Publicado por Luis Miguel (15 intervenciones) el 21/11/2009 11:07:03
Buenas,
ANTE TODO GRACIAS, ME ESTAIS AYUDANDO MUCHISIMO.

Tengo un problema y no se como solucionarlo, os explico, en mi GUI cuando hago los calculos y le digo q me los ploteen, tengo el problema que si en mi primer plot le digo de color rojo el siguiente tambien me lo pone rojo aunque yo le especifique otro color y no se como solucionarlo, os pongo el codigo para que lo veias:
%--------------------------------------------------------------------------------------------------------------
function pushbutton1_Callback(hObject, eventdata, handles)

% HAGO LOS CALCULOS NECESARIOS

% CUANDO LE DIGO Q ME PLOTEE LAS DOS GRAFICAS LAS PONE DEL MISMO COLOR
% Y PONE LA PRIMERA EN LINEA FINA Y LA SEGUNDA GORDA, MUY RARO????

plot(handles.ejex,a,'LineWidth',2.5,'Color',[1 0 0]);
hold on;
plot(t,X1,'LineWidth',2.5,'Color',[0 0 1]);

xlabel('W*t'),ylabel('X=(C1*(exp(W1*t)) + C2*(exp(W2*t))+a/Wn^2*m)'),
% EL LEGEND TAMBIEN ME LOS PONE DEL MISMO COLOR?????
legend('Escalon','Respuesta');
grid on;
axis([0 T min_X1*1.2 max_X1*1.2]);
hold off;
%---------------------------------------------------------------------------------------------------------------------
¿COMO PODRÍA SOLUCIONARLO?

GRACIAS

SALUDOS!!!
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

RE:AYUDA PLOT GUI GRACIAS!!

Publicado por Luis Miguel (15 intervenciones) el 21/11/2009 17:29:53
Buenas,

He intentado solucionarlo de muchas formas pero mninguna me funciona, nose que mas probar. Si alguien pudiera solucionarlo se lo agredecería.

No sabia me iba a dar tanto porblema plottear dos variables en una grafica, pero tiene q ser algo de que sus prpiedades se modifican.
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

RE:AYUDA PLOT GUI GRACIAS!!

Publicado por gustavo (44 intervenciones) el 21/11/2009 18:02:14
asi rapido te digo que he copiado tu codigo .... y bueno he tenido que darle valores a las variables (pues no estan definidas ) y no me da problema me saca las graficas bien sin problema me da dos graficas una azul y otra roja e igual sus etiquetas con el mismo ancho de linea....

no se cual sea tu error si el codigo esta bien....

te aconsejo que trates por separado esa parte del codigo es decir que la pruebes como yo lo hice ponerlo en un archivo .m aparte para que veas mas claro asi veras si pudiera aver alguna interferencia de variables u otro problema.....pues te digo a mi me salio bien tu codigo.......
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

RE:AYUDA PLOT GUI GRACIAS!!

Publicado por Luis Miguel (15 intervenciones) el 22/11/2009 17:54:45
Buenas Gustavo,

Gracias por tu atención y dedicación, la verdad q sino fuera por tu ayuda no hubiera podido avanzar.

Yo lo he probado en un codigo aparte y funciona correctamente pero sin embargo en GUI no me funciona bien no se si es por el handle dentro de la función pushbutton que hace q tome valores por defecto y no se como modificarlo, si quieres uedo enviarte el codigo por correo o ponerlo aqui entero para que le eches un vistazo gracias.

Un Saludo.

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

RE:AYUDA PLOT GUI GRACIAS!!

Publicado por Luis Miguel (15 intervenciones) el 22/11/2009 21:49:04
Buenas Gustavo,

Pongo todo el codigo .m pero claro sin el .fig no funcionara. Te lo pongo por si supieras el fallo.

Gracias.

function varargout = escalon_amortiaguado(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @escalon_amortiaguado_OpeningFcn, ...
'gui_OutputFcn', @escalon_amortiaguado_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(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


%CARGAMOS LA IMAGEN AMORTIGUADOs EN LA VARIABLE BACKGROUND Y ETIQUETAMOS AXES EN EL
%CAMPO TAG COMO BACKGROUND
axes1 = imread('escalon.jpg'); %Leer no_amortiguados
axes(handles.axes1); %Carga la amortiguados en background
axis off;
imshow(axes1); %Presenta la imagen amortiguados


handles.output = hObject;

guidata(hObject, handles);


function varargout = escalon_amortiaguado_OutputFcn(hObject, eventdata, handles)


varargout{1} = handles.output;

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit1_Callback(hObject, eventdata, handles)

function edit2_CreateFcn(hObject, eventdata, handles)

if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit2_Callback(hObject, eventdata, handles)


function edit3_CreateFcn(hObject, eventdata, handles)

if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit3_Callback(hObject, eventdata, handles)


function edit4_CreateFcn(hObject, eventdata, handles)


if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit4_Callback(hObject, eventdata, handles)

function edit5_CreateFcn(hObject, eventdata, handles)

if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit5_Callback(hObject, eventdata, handles)

function edit6_CreateFcn(hObject, eventdata, handles)

if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


function edit6_Callback(hObject, eventdata, handles)


function pushbutton1_Callback(hObject, eventdata, handles)

%global m c k X0 V0
%CALCULOS
%Datos
% Si introducimos un valor de m=0 el sistema te da un aviso y vuelve al
% comienzo del programa esperando que le introducas un valor diferente de
% cero
m=str2double(get(handles.edit1,'String'));
c=str2double(get(handles.edit2,'String'));
k=str2double(get(handles.edit3,'String'));
%condiciones iniciales
X0=str2double(get(handles.edit4,'String'));
V0=str2double(get(handles.edit5,'String'));
a=str2double(get(handles.edit6,'String'));

%La funcion isnan() te devuelve un 1 si es un caracter nonumerico, vale
%para detectar letras
if(isnan(a) |isnan(m) | isnan(c) | isnan(k) | isnan(X0) | isnan(V0))
errordlg('DEBES INTRODUCIR UN NUMERO','Error');
return
end

%La funcion isempty() te devuelve un 1 si es el campo edit text esta vacio
if(isnan(a) |isempty(m) | isempty(c) | isempty(k) | isempty(X0) | isempty(V0))
errordlg('DEBES INTRODUCIR UN NUMERO','ERROR');
return
end

if m==0 |a==0
warndlg('INTRODUCE UN VALOR DISTINTO DE CERO','AVISO');
return
end


%guardamos los valores que hemos introducido en el Workspace en datos.mat
%save datos.mat m c k X0 V0;

%frecuencia natural y periodo
Wn=sqrt((k/m));
factor_amortiguamiento=(c/(2*Wn*m));
T=(2*pi/Wn);
% escribimos los resultados en pantalla
set(handles.text16,'String',factor_amortiguamiento);
set(handles.text17,'String',Wn);

if factor_amortiguamiento > 1,
set(handles.text22,'String','SISTEMA SOBREAMORTIGUADO');

W1=-Wn*(factor_amortiguamiento+sqrt(factor_amortiguamiento^2 - 1));
W2=-Wn*(factor_amortiguamiento-sqrt(factor_amortiguamiento^2 - 1));


% Ahora calcularemos C1 y C2 con las condiciones iniciales.
%y=c1*exp(w1t)+c2*exp(w2t) + a/Wn^2, y(o)=c1 + c2 +a/Wn^2 , dy(0)/dt=W1*c1 + W2*c2;

A=[1 1; W1 W2];
%DATOS
B=[(X0-(a/(Wn^2*m))); V0]; %B=[X0 V0]'
C=linsolve(A,B);
C1=C(1);
C2=C(2);
t=[0:pi/360:T];
%RESPUESTA DEL SISTEMA
X=(C1*(exp(W1*t)) + C2*(exp(W2*t))+ (a/Wn^2*m)); %SISTEMA SOBREAMORTIGUADO

axes(handles.axes2)
handles.ejex=t;
min_X1=min(X);
max_X1=max(X);
if a>max_X1
max_X1=a;
end
if a<min_X1
min_X1=a;
end

plot(handles.ejex,a);

hold on;
plot(t,X,'LineWidth',2.5,'Color',[1 0 0]););

xlabel('W*t'),ylabel('X=(C1*(exp(W1*t)) + C2*(exp(W2*t))+a/Wn^2*m)'),
legend('Escalon','Respuesta');
grid on;
axis([0 T min_X1*1.2 max_X1*1.2]);
hold off;


elseif factor_amortiguamiento == 1,
set(handles.text22,'String','SISTEMA CRITICAMENTEAMORTIGUADO');

%La solucion a la ec. dif. es del tipo y=c1*exp(w1t)+c2*t*exp(w1t)+a/Wn^2
%calculamos la raiz real y repetida
%W1=-factor_amortiguamiento*(Wn+sqrt(actor_amortiguamiento^2-1)) al ser
%Factor_amortiguamiento=1 la W1,W2=-factor_amortiguamiento*Wn,
%EIGENVALORES REALES Y REPETIDOS

W1=-factor_amortiguamiento*Wn;
% Ahora calcularemos C1 y C2 con las condiciones iniciales.
%y=c1*exp(w1t)+c2*t*exp(w1t)+a/Wn^2, y(0)=c1+a/Wn^2, dy(0)/dt=W1*c1 + c2;
A=[1 0; W1 1];
B=[(X0-a/(Wn^2*m)); V0];
C=linsolve(A,B);
C1=C(1);
C2=C(2);
t=[0:pi/360:T];

%RESPUESTA DEL SISTEMA
X= C1*exp(W1*t) + C2.*t.*exp(W1*t)+a/(Wn^2*m); %SISTEMA CRITICAMENTEAMORTIGUADO
%X2=eval(X);
%GRAFICAR
axes(handles.axes2)
handles.ejex=t;
min_X2=min(X);
max_X2=max(X);
if a>max_X2
max_X2=a;
end
if a<min_X2
min_X2=a;
end

plot(handles.ejex,a,'LineWidth',2.5,'Color',[0 1 0]);

hold on;
plot(t,X,'LineWidth',2.5,'Color',[1 0 0]);

xlabel('W*t'),ylabel('X= C1*exp(W1*t) + C2.*t.*exp(W1*t)+a/Wn^2*m'),
legend('Escalon','Respuesta');
grid on;
axis([0 T*1.2 min_X2*1.2 max_X2*1.2]);
hold off;

elseif (0 < factor_amortiguamiento & factor_amortiguamiento < 1),
set(handles.text22,'String','SISTEMA SUBAMORTIGUADO');

%La solucion a la ec. dif. es del tipo
%y=((c1*cos(W*t)+c2*sen(W*t))*exp(-real*t)+a/Wn^2*m
%Tambien se puede poner y=C*cos(W*t + phi)*exp(-real*t);
%Ya que C*cos(W*t + phi)=C*[cos(W*t)*cos(phi) - sin(W*t)*sin(phi)]
%calculamos las raices compleja y conjugada
%W1,W2=-Wn*(factor_amortiguamiento+sqrt( 1-factor_amortiguamiento^2))
%W1=-real + imaginaria ,W2=-real - imaginaria
%EIGENVALORES COMPLEJOS CONJUGADOS
real=Wn*factor_amortiguamiento;
imaginaria=Wn*sqrt(1- factor_amortiguamiento^2);

% Ahora calcularemos C1 y C2 con las condiciones iniciales.
%X=((C1.*cos(Wd*t)+C2.*sin(Wd*t)).*exp(-real*t)+a/(Wn^2*m));
%C1=X0-a/(Wn^2*m),
%dy(0)/dt=(-real*c1*cos(W1*t))*exp(-real*t) +(c2*W2*sen(W2*t))*exp(-real*t)
%-real*C1 + W2*C2=V0 despejamos C2=(VO + real*X0)/W2
%C1=X0-(a/(Wn^2*m));
%C2=( V0 + (real*X0))/imaginaria;
%C=sqrt(C1^2 + C2^2);
%phi=atan(-C2/C1);
%frecuencia circular amortiguada
Wd=Wn*sqrt(1- factor_amortiguamiento^2);

phi=atan((-(V0/(X0*Wd-(a*Wd/Wn^2*m)))-(real/Wd)));
C=(X0/cos(phi)-(a/(Wn^2*m*cos(phi))));
Td=(2*pi/Wd);
t=[0:pi/360:Td*1.2];
%Respuesta del sistema
X= ((C.*cos(Wd*t - phi))).*exp(-real*t)+ a/(Wn^2*m); % SISTEMA SUBAMORTIGUADO

%GRAFICAR
axes(handles.axes2)

min_X3=min(X);
max_X3=max(X);
if a>max_X3
max_X3=a;
end
if a<min_X3
min_X3=a;
end



plot(t,a,'LineWidth',2.5,'color',[0 1 0]);



hold on;
plot(t,X,'LineWidth',2.5,'color',[0 0 1]);

xlabel('W*t'),ylabel('X= (C*cos(Wd*t + phi))*exp(-real*t)+a/Wn^2*m'),
legend('Escalon','Respuesta');

grid on;
axis([0 Td*1.2 min_X3*1.2 max_X3*1.2]);

hold off;


elseif factor_amortiguamiento == 0,

set(handles.text22,'String','SISTEMA NO AMORTIGUADO');
close gcf;
prueba_no_amortiguados;

elseif factor_amortiguamiento < 0,
set(handles.text22,'String','SISTEMA INESTABLE');


end

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --- Executes during object creation, after setting all properties.

close gcf;
forzado_amortiguado;

% --- Executes during object creation, after setting all properties.

%------------------------------------------

GRACIAS!!

No consigo saber donde esta el fallo.


Saludos
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

RE:AYUDA PLOT GUI GRACIAS!!

Publicado por gustavo (44 intervenciones) el 23/11/2009 20:09:45
hola voy a checar tu codigo a ver si encuentro la falla lo checare y posiblemente te mande una respuesta el miercoles ya que me he quedado sin conexion en casa .....si quieres mandame los dos archivos por si no le hallo solo con el .m

sale nos vemos el miercoles o jueves...

mi correo es [email protected]
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