Matlab - Ordenar en funcion de variables indep con MatLab

 
Vista:

Ordenar en funcion de variables indep con MatLab

Publicado por Francisco (11 intervenciones) el 19/07/2011 14:08:43
Hola, tengo dos dudas que no he conseguido resolver:

1.- Imaginad que tenemos una funcion, y=f(x). Lo que yo busco es clasificar los valores de y ordenando de menor a mayor los valores de x. Es decir, obtener:
y1(xmin),........y2x(max)

¿Existe alguna funcion en MatLab que se encargue de esto? en caso contrario, ¿método?


2.- Tengo un conjunto de valores Ai y quiero hacer la media movil con grupos de 40 valores. Es decir,

[(A1+....+A40)/40, (A2+...+A41)/40,......]

He visto que en MatLab existe la funcion <<movavg (Asset, Lead, Lag)>> pero no entiendo muy bien cómo funciona eso del Lead y el Lag. Y por qué Lead no puede ser mayor que Lag.

(Lead: Number of samples to use in leading average calculation. A positive integer. Lead must be less than or equal to Lag.)

Eso es todo. Por favor necesito ayuda, cualquier sugerencia será bienvenida.

Mil 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

Ordenar en funcion de variables indep con MatLab

Publicado por Francisco (11 intervenciones) el 19/07/2011 14:35:08
Hola chicos,
lo de la media variable ya esta solucionado.
Si
>> x=[2 3 5 6 2]
>>[short]=movavg(x,2,2). Me sale la media movil para grupos de 2. Es decir
>> short= (1 2.5 4 5.5 4)

Lo unico que no entiendo es porqué demonios me saca el primer valor en short. es decir el 1. Lo que hace es tomar la media de 0+2/2=1. Pero no me deberia salir nada!!. Si x tiene 5 valores, short deberia tener 4.

-------------

Por favor lo de ordenar f(x) en funcion de valores crecientes de x sigo sin solucionarlo.
Que alguien me ayude!!

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

Ordenar en funcion de variables indep con MatLab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/07/2011 16:42:31
hola Francisco.
para la pregunta 2:
%=============================
clear all
X=input('Ingrese el vector X=')
grupos=input('Ingrese grupos=');
k=1;
n=length(X);
cant=n-grupos+1;
x=zeros(cant,grupos);
V=zeros(1,cant);
for i=1:cant
x(i,:)=X(k:grupos+k-1);
V(i)=(sum(x(i,:)))/grupos;
k=k+1;
end
display(x)
display(V)
%================================


EJECUCION
>> ordenandofuncion
Ingrese el vector X=[2 3 5 6 2]
X =
2 3 5 6 2

Ingrese grupos=2
x =
2 3
3 5
5 6
6 2


V =
2.5000 4.0000 5.5000 4.0000


OTRA EJECUCION
>> ordenandofuncion
Ingrese el vector X=rand(1,6)

X =

0.2240 0.6678 0.8444 0.3445 0.7805 0.6753

Ingrese grupos=4

x =

0.2240 0.6678 0.8444 0.3445
0.6678 0.8444 0.3445 0.7805
0.8444 0.3445 0.7805 0.6753

V =
0.5202 0.6593 0.6612

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[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
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

Ordenar en funcion de variables indep con MatLab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/07/2011 15:57:40
hola. Francisco
Me parece que quieres algo asi:
%====================================================
%PROGRAMA CON VISUALIZACIONES DE TODAS LAS EJECUCIONES DE LAS SENTENCIAS
clear all % borra todas las variables de la memoria de MATLAB
echo on
x=rand(1,5) % crea un vector aleatorio de 5 elementos
X=sort(x) % sort: ordena de menor a mayor el vector anterior
fun='x^2+cos(x)' %'x^2+cos(x)' %funcion en donde vamos a evaluar el vector anterior X
f=vectorize(inline(fun)) %vectorize: vectoriza la funcion para evaluar
y=f(X) % f evalua la funcion x.^2+cos(x) en el vector X
display(y) % visualiza el vector y
echo off
%===============================================

EJECUCION
>> ordenandofuncion
x=rand(1,5) % crea un vector aleatrio de 5 elementos
x =
0.8530 0.6221 0.3510 0.5132 0.4018

X=sort(x) % sort: ordena de menor a mayor el vector anterior
X =
0.3510 0.4018 0.5132 0.6221 0.8530

fun='x^2+cos(x)' %'x^2+cos(x)' funcion en donde vamos a evaluar el vector anterior X
fun =
x^2+cos(x)

f=vectorize(inline(fun)) %vectorize: vectoriza la funcion para evaluar
f =
Inline function:
f(x) = x.^2+cos(x)

y=f(X) % f evalua la funcion x.^2+cos(x) en el vector X
y =
1.0622 1.0818 1.1346 1.1996 1.3854

display(y) % visualiza el vector y
y =
1.0622 1.0818 1.1346 1.1996 1.3854

echo off


OTRO PROGRAMA
%=============================================
%PROGRAMA SIN VISUALIZACION DE LAS EJECUCIONES DE LAS SENTENCIAS
% clear all % borra todas las variables de la memoria de MATLAB
% x=rand(1,5); % crea un vector aleatorio de 5 elementos
% X=sort(x); % sort: ordena de menor a mayor el vector anterior
% fun='x^2+cos(x)'; %'x^2+cos(x)' funcion en donde vamos a evaluar el vector anterior X
% f=vectorize(inline(fun)); %vectorize: vectoriza la funcion para evaluar
% y=f(X); % f evalua la funcion x.^2+cos(x) en el vector X
% display(y); % visualiza el vector y
%=============================================

>> ordenandofuncion1
x =
0.7803 0.3897 0.2417 0.4039 0.0965
X =
0.0965 0.2417 0.3897 0.4039 0.7803
y =
1.0047 1.0293 1.0769 1.0827 1.3195

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[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

Ordenar en funcion de variables indep con MatLab

Publicado por Francisco (11 intervenciones) el 20/07/2011 09:25:24
Hola Jose Jeremias, muchisimas gracias!! Me ha sido de gran ayuda.

Aprovechando tu dominio del MatLab me gustaría hacerte una pregunta:

1.- Para importar un excel a MatLab empleamos
>>xlsread(nombre,hoja,rango)
en el rango le metemos el vertice superior izq y el vertice inferior dcho. Es decir si pongo A1:C20, pues me importará la matriz de 20 filas y 3 columnas.
Mi pregunta es, ¿cómo hago para importar columnas que no están contiguas?, por ejemplo si quiero importar los primeros 20 valores de la primera columna, la tercera, y la octava del excel y que en MatLab tenga una matriz de 20 filas y 3 columnas ([1col] [3col] [8col])

Muchas 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

Ordenar en funcion de variables indep con MatLab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 20/07/2011 19:19:59
Hola Francisco.
Primero darte la gracias por el cumplido.
Bueno hice un programa mas generico.
con este programa puedes extraer datos de cualquier hoja de una archivo de excel desde la fila k hasta la fila m y guardarlo en una matriz.
%=============================

%=================================
clear all;clc
%EL Siguiente programa extrae del archivo Libro1.xlsx de la siguiente forma
%extrae los datos desde la fila3 hasta fila6 de la columna A1 de la Hoja1
%extrae los datos desde la fila3 hasta fila6 de la columna C1 de la Hoja3
%extrae los datos desde la fila3 hasta fila6 de la columna F1 de la Hoja4
[estado,hojas]=xlsfinfo('Libro1.xlsx');
C=char(65:90);
COL=[C(1) C(3) C(6)]; % columnas a extraer: A1, C1, F1
HOJAS=[hojas(1) hojas(3) hojas(4)]; %hojas a extraer: Hoja1,Hoja3,Hoja4
fila=[3 6]; %extraer datos desde la fila3 hasta fila6:
n=length(COL);
A5=zeros(fila(2)-fila(1)+1,n);
for i=1:length(COL)
A5(:,i)=xlsread('Libro1.xlsx',cell2mat(HOJAS(i)),[[COL(i),num2str(fila(1))],':',[COL(i),num2str(fila(2))]]);
end
display(A5);
%===============================================

%OTRA MANERA:
%====================================
clear all
DATOS=importdata('Libro1.xlsx');
HOJA1=DATOS.Hoja1;
HOJA2=DATOS.Hoja2;
HOJA3=DATOS.Hoja3;
HOJA4=DATOS.Hoja4;
filas=[3 6];
A6=[HOJA1(filas(1):filas(2),1) HOJA3(filas(1):filas(2),3) HOJA4(filas(1):filas(2),6)];
display(A6)
%============================================

EJECUION.
>> extraerdatosexcel
A5 =
0.9572 0.8116 0.4624
0.4854 0.5328 0.4243
0.8003 0.3507 0.4609
0.1419 0.9395 0.7702


A6 =
0.9572 0.8116 0.4624
0.4854 0.5328 0.4243
0.8003 0.3507 0.4609
0.1419 0.9395 0.7702

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[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