Matlab - Vector como variable de entrada en un programa que funciona en base a una variable

 
Vista:

Vector como variable de entrada en un programa que funciona en base a una variable

Publicado por Bastian (8 intervenciones) el 14/07/2016 21:34:13
Hola programadores, tengo la siguiente duda:
Tengo un programa.m que en base a una variable de entrada "p" realiza una predicción algo compleja, mi pregunta es si puedo ingresar varios p, p1,p2,p3,p4... y que muestre r,r1,r2,r3,r4 resultados sin tener que programar de nuevo todas las variables del programa..

Aqui dejo el código , Solo me importa variar el parámetro p. MUCHAS GRACIAS DESDE YA
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
* LAS MATRICES T y V las cargo de unos archivos excel y de otro programa.m.
 
%Se ingresan datos de entrada
 
t = input('Ingrese instante de predicción en minutos ');
delta = input('Ingrese horizonte de predicción en minutos ');
hist = input ('Ingrese cantidad de días para calibrar el modelo ');
p=input('Ingrese día a evaluar que no se encuentre en el conjunto de días históricos ');
 
%Validación datos ingresados
 
if 120-t<delta
fprintf('No existen datos para el horizonte de predicción señalado, inicie otra vez con un instante de predicción y horizonte distintos');
break
end
 
%Matrices Auxiliares para creación de las matrices Velocidad y Tiempo Viaje
 
L=zeros(120,10);%Matriz 2D para crear Matriz L de longitudes ponderadas
l=[719,1780,423,365,949,1224,738,1535,896,675];%vector longitudes de tramos i
l=l*(1/sum(l)); %vector longitudes ponderadas tramos i
U=zeros(120,10);%Matriz Velocidad 2D para el día de predicción
Y=zeros(120,10);%Matriz Tiempos viaje 2D para el día de predicción
contador=1;
 
%Se reemplaza el vector l en cada fila de la matriz H
 
for i=1:120
    L(i,:)=l;
end
 
%Se crean las matrices de Velocidad y Tiempo de viaje de los días
%históricos
 
for i=1:hist
 
 V(:,:,i) = V(:,:,i);
 T(:,:,i) = T(:,:,i);
 
end
 
%Se lee y guarda la matriz de velocidad y Tiempo de viaje del día a
%predecir.
 
U(:,:,1)= V(:,:,p);
Y(:,:,1)= T(:,:,p);
 
%Se eleva a -1 la matriz V y se pondera por el tramo Li/L.
 
V=V.^-1;
 
 
%Se calculan constantes necesarias para calcular parámetros del modelo
 
a=455;%a 70 km/h el tamaño del patron sea 10, a 45 km/hr el tamaño sea 16 y
% a 20 km/hr sea 37 min.
b=0.19704;%igualando valores con m/s y mph.
c=373;%pensado en que la ventana de busqueda para 20 km/hr sea 30 min
d=250;%pensado en 20 patrones para una velocidad de 20km/hr
DI=1; %lapso entre toma de datos, es decir, 1 minuto
Um = sum(U(t,:).*l); %Velocidad media en el corredor día e instante actual
 
%Se eleva a -1 la matriz U y se pondera por el tramo Li/L.
 
U=U.^-1;
 
%Parámetro 1
 
Tamano_Patron = round((a/Um))*DI;
 
if Tamano_Patron < 10
   Tamano_Patron = 10;
end
 
%Parámetro 2
 
Ventana_Busqueda = round((c/Um)*DI);
 
if Ventana_Busqueda < 15
   Ventana_Busqueda = 15;
end
 
%Parámetro 3
 
Numero_Patrones = round((d/Um));
 
%Parámetro 4
 
W(:,:)= U((t - Tamano_Patron + 1):t,:);
W=W.^b;
 
%Se obtienen diferencia de velocidades entre día actual y días históricos
 
contador =1;
L=L((t-Tamano_Patron+1):t,:);
 
for x=(t-Ventana_Busqueda):(t+Ventana_Busqueda)
 
    t=t-Ventana_Busqueda;
 
for i=1:hist
    format long
    R(:,:,i)= (U((t-Tamano_Patron +1) : t,:) - V((t-Tamano_Patron+1):t,:,i)).^2;
    DIF(:,:,i)=R(:,:,i) .*L .*W;
    MIN(:,:,i,contador)=DIF(:,:,i);
end
 
contador=contador+1;
 
t=t+Ventana_Busqueda+1;
 
end
 
DIM=size(MIN);
 
for i=1:DIM(3)
    for c=1:DIM(4)
        E(c,i)=sum(sum(MIN(:,:,i,c)));
    end
end
 
 
[ts(1),h(1)]=find(E==min(min(E)));
minimo(1) = min(min(E));
E(ts(1),h(1))=1000;
 
for i=2:Numero_Patrones
[ts(i),h(i)]=find(E==min(min(E)));
minimo(i) = min(min(E));
E(ts(i),h(i))=1000;
end
 
for i=1:Numero_Patrones
Prediccion(i)=sum(T(ts(i)+delta,:,h(i)));
end
 
%Box Plot, filtrado de tiempos de predicción 
 
y = sort(Prediccion);
 
Q(1) = median(y(find(y<median(y))));
 
Q(2) = median(y);
 
Q(3) = median(y(find(y>median(y))));
 
IQR = Q(3)-Q(1);
 
LS=Q(3)+1.5*IQR;
 
LI=Q(1)-1.5*IQR;
 
contador=1;
for i=1:Numero_Patrones
    if Prediccion(i)<= LS && Prediccion(i)>= LI
        Prediccion(contador)=Prediccion(i);
        contador=contador+1;
    end
end
 
Prediccion = mean(Prediccion);
 
clear contador
clear i
clear H
clear l
clear L
clear x
clear d
clear DIF
clear DIM
clear E
clear IQR
clear LI
clear LS
clear MIN
clear minimo
clear Q
clear R
clear U
clear Um
clear W
clear y
clear Y
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

Vector como variable de entrada en un programa que funciona en base a una variable

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 18/07/2016 00:23:58
deberias subir tus datos de V T ademas con que datos ejecutas. Trato de replicar lo que haz puesto en el foro, pero tengo vacios.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Programador en Matlab
Servicios de programación matlab
[email protected]
El correo es para servicios de programación, toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com
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

Vector como variable de entrada en un programa que funciona en base a una variable

Publicado por Bastian (8 intervenciones) el 18/07/2016 03:45:09
Muchas gracias por responder, aunq solucione el problema con ciclos for que encierran todo el programa .. Ahora mismo lleva unos minutos trabajando porque son muchos datos y bucles .. Cualquier nueva duda la subiré acá
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