RE:AYUDA PLOT GUI GRACIAS!!
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