jueves, 5 de abril de 2012

Ecuaciones Diferenciales ode45

Estoy trabajando con el comando ode45, el cual requiere la asignación de una función en un archivo .m. Me encuentro definiendo dicha función f.m donde aparece la ecuación diferencial a resolver por ode45, pero ahora necesito que en esta ecuación aparezca el valor de una variable de entrada definida en el Command Window principal, como por ejemplo 'a'.
function ode45caballero5
global a
a=input('ingrese el valor de a:');
% Ejemplo
% y'=a+2t+y 1<=t<=5
% y(1)=0.5
[T,Y]=ode45(@f,[1,5],0.5);
plot(T,Y)
function dydt=f(t,y)
global a
dydt=a+2*t+y;
EJECUCION EN MATLAB
>> ode45caballero5
ingrese el valor de a:10



function ode45caballero6
global a
a=input('ingrese el valor de a:');
[t,x]=ode45(@fint2,[0,5],[-4,0]);
figure(gcf)
plot(t,x(:,1));
end

function dydt=fint2(t,x)
global a
dydt=[x(2);a-x(2)];
end
EJECUCION EN MATLAB
>> ode45caballero6

ingrese el valor de a:6

José Jeremías Caballero
Servicios de Programación en MatLab
Lima - Perú
Para mayor informacion, contactarse a jjcc94@hotmail.com

martes, 3 de abril de 2012

Impresion de una matriz cuadrada desde exterior al interior

Realizar un programa en MATLAB en el que se muestre la matriz nxn (matriz cuadrada), compuesta por los digitos desde 1 hasta nxn, comenzado desde el exterior hasta el interior de la matriz, en sentido de rotación horaria. El tamaño n es el resultado de un valor de entrada de un número entero
Programa en matlab
 
function  ordenada_desde_exterior_una_matriz1(n)
j1=1;     f1=n; 
j2=2;     f2=n;
j3=n-1;   f3=1;
j4=n-1;   f4=2;
s=0;
opcion=1;
while s<n^2
switch (opcion)
    case 1
          for i=j1:f1, s=s+1;  b(j1,i)=s, pause(0.4), end
          j1=j1+1; f1=f1-1;   opcion=2;
       
    case 2 
         for i=j2:f2, s=s+1;   b(i,f2)=s, pause(0.4), end
         j2=j2+1; f2=f2-1;    opcion=3;
         
   case 3 
        for i=j3:-1:f3, s=s+1;  b(j3+1,i)=s,  pause(0.4),end
        j3=j3-1; f3=f3+1;    opcion=4;
         
   case 4
        for i=j4:-1:f4,  s=s+1;  b(i,f4-1)=s, pause(0.4),end
        j4=j4-1;   f4=f4+1;   opcion=1;      
    end
end
 b
EJECUCION DEL PROGRAMA

>> ordenada_desde_exterior_una_matriz(4)
b =

     1     2     3     4
    12    13    14     5
    11    16    15     6
    10     9     8     7


>> ordenada_desde_exterior_una_matriz(6)
b =
     1     2     3     4     5     6
    20    21    22    23    24     7
    19    32    33    34    25     8
    18    31    36    35    26     9
    17    30    29    28    27    10
    16    15    14    13    12    11
José Jeremías Caballero
Servicios de Programación en MatLab
Lima - Perú

Para mayor informacion, contactarse a jjcc94@hotmail.com

lunes, 2 de abril de 2012

Importación y exportacion de datos a Excel

Hola, me gustaría crear una matriz que guarde estos datos
 Inicial Primario X Y Ancho Altura Visible
  A     1     10    20    30    40    on
  A     2    10    20    30    40    on
  A     3    10     20    30    40   on
  B     1     10      30    30   40   off
 ¿Se podría hacer?
 Luego quiero utilizar estos valores para un GUI
 Un saludo y gracias a quien me pueda echar una mano

 function varargout = crear_matrices_strings2_jose_caballero(varargin)
  clc
  gui_Singleton = 1;
  gui_State = struct('gui_Name',       mfilename, ...
                     'gui_Singleton',  gui_Singleton, ...
                     'gui_OpeningFcn', @crear_matrices_strings2_jose_caballero_OpeningFcn, ...
                     'gui_OutputFcn',  @crear_matrices_strings2_jose_caballero_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 crear_matrices_strings2_jose_caballero_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
 
function varargout = crear_matrices_strings2_jose_caballero_OutputFcn(hObject, eventdata, handles)
  a(1)=handles.text1; a(2)=handles.text2; a(3)=handles.text3;
  a(4)=handles.text4; a(5)=handles.text5; a(6)=handles.text6;
  a(7)=handles.text7; a(8)=handles.text8; a(9)=handles.text9;
  a(10)=handles.text10; a(11)=handles.text11; a(12)=handles.text12;
  a(13)=handles.text13; a(14)=handles.text14;
  for i=1:5
       set(a(i),'string',' ')
  end
 
%Impresion desde un archivo de texto
  fid =fopen('crear_matrices_strings1_jose_caballero.txt');
  datos=textscan(fid,'%s %s %s %s %s %s %s');
  fclose(fid);
  for i=1:7
       set(a(i),'String',datos{i}(1:end))
  end
  columnas=char(65:90);
%exportacion a excel el archivo de texto con matlab
for i=1:7
   xlswrite('crear_matrices_strings1_jose_caballero.xlsx',datos{i}(1:end),1,columnas(i));
  end
  %importacion desde excel hacia matlab
  [num,txt,raw]=xlsread('crear_matrices_strings1_jose_caballero.xlsx');
  for i=8:14
       set(a(i),'String',raw(:,i-7))
  end
  handles.output = hObject;
  guidata(hObject, handles);
  varargout{1} = handles.output;
 
function pushbutton1_Callback(hObject, eventdata, handles)
  web http://www.lawebdelprogramador.com/foros/Matlab/  -browser
 
function pushbutton2_Callback(hObject, eventdata, handles)
  web http://www.matlabcaballero.blogspot.com/  -browser
José Jeremías Caballero
Servicios de Programación en MatLab
Lima - Perú

Para mayor informacion, contactarse a jjcc94@hotmail.com 

jueves, 29 de marzo de 2012

Procesamiento de audio con matlab

Procesamiento de audio con matlab.
Este es una aplicación para leer un audio, reproducirlo, pausarlo, continuar, parar  y grabar desde el micrófono, ademas podemos cambiar el volumen a nuestro gusto, o si deseamos solo cambiamos uno de los altavoces, esta hecho  con simulink.

José Jeremías Caballero
Servicios de Programación en MatLab
Lima - Perú
Para mayor informacion, contactarse a jjcc94@hotmail.com

el comando cd en Matlab

 ¿Para que sirve el comando cd de matlab?.
Respuesta: El comando cd sirve para cambiar de directorio y pwd sirve para ver en que directorio nos encontramos, y dir sirve para ver los archivos del directorio actual.
ejemplo:
>> pwd
ans =
C:\Users\jeremias\Desktop\MATLAB
>> dir
.                      IMAGENES               subir_bajar_volumen.m 
..                     pol10.m               
>> cd('IMAGENES')
>> pwd
ans =
C:\Users\jeremias\Desktop\MATLAB\IMAGENES
>> dir
.               Imagen0972.jpg  Imagen4911.jpg  bg_7993835.jpg  pout.tif       
..              Imagen3981.JPG  Imagen4940.jpg  caballero.jpg  
>> cd ..
>> pwd
ans =
C:\Users\jeremias\Desktop\MATLAB
José Jeremías Caballero
Servicios de Programación en MatLab
Lima - Perú
Para mayor informacion, contactarse a jjcc94@hotmail.com
http://www.matlabcaballero.blogspot.com/
 

miércoles, 28 de marzo de 2012

Uso de Legend en un bucle

Quiero hacer código sencillo que me vaya creando un plot con una serie de puntos a través de un bucle. Quiero que cada vez que mi bucle avance una iteración se vaya 'adicionando' a la leyenda los puntos que va representado en la figura, de manera que cuando haya recorrido todo el bucle tenga en este caso una  leyenda compuesta por n elementos de los datos leídos. (Siendo A una matriz alfa numérica, donde la primera fila es una cadena y los demás filas son números, y A.data es una matriz numérica) ¿Hay algún comando tipo hold on para las gráficas que haga que mi leyenda vaya adicionando líneas?
function caracteristicas_aleatorias1
close all
A=importdata('caracteristicas_aleatorias.txt');
filas=size(A.data,1);
figure(1)
marcadores='+o*.xsd^v><ph';
estilo ={'-','--',':','-.'};
color='rgbcmyk';
axis([min(A.data(:,1))-0.2 max(A.data(:,1))+0.2 min(A.data(:,2)) max(A.data(:,2))])
hold on
for i=1:filas
   pos_marcadores=round(1+(length(marcadores)-1)*rand);
   pos_estilo=round(1+(length(estilo)-1)*rand);
   pos_color=round(1+(length(color)-1)*rand); 
   plot(A.data(i,1),A.data(i,2),[cell2mat(estilo(pos_estilo)) marcadores(pos_marcadores)...
   color(pos_color)],'linewidth',2)
   a{i}=['(',num2str(A.data(i,1)),' , ', num2str(A.data(i,2)),')'];
   set(legend(a),'Location','Northeast')
   pause(1)
end
hold off

EJECUCION
>> caracteristicas_aleatorias1
data =
    0.8869    0.6026
    0.9050    0.1843
    0.4984    0.1975
    0.5292    0.8620
    0.9097    0.1256
    0.5786    0.6456
    0.7758    0.4373
    0.6614    0.6126
    0.4697    0.7375
    0.2198    0.3033

José Jeremías Caballero
Servicios de Programación en MatLab
Lima - Perú
Para mayor informacion, contactarse a jjcc94@hotmail.com
http://www.matlabcaballero.blogspot.com/