
Problema de error en Matlab
Publicado por Meylin (1 intervención) el 06/08/2016 20:02:43
Hola a todos!
Queria saber si me podian ayudar. Les cuento que tengo una cantidad de 744 datos a partir de 0.0001 a 1.000 (todos estos datos estan ordenados decrecientemente)... Lo que intento hacer es dividir esta cantidad en 5 partes de tal forma que el error cuadratico sea el minimo.
Hasta el momento el programa funciona perfectamente cuando especifico que M puede ser 1,2,3 y 4, pero cuando quiero colocar 5 sale error de falta de memoria (me imagino que es porque itera tantas veces pero no llega a un dato concluso). Por eso pense que quizas es necesario dar una restricción de que valores considere como error (quizas que el error sea mayor a 0,0003)
Aqui esta el codigo :)
Para que funcione simplemente coloco:
Aproximacion (X, 5);
Espero que me puedan ayudar.
Muchas gracias de antemano :)
Queria saber si me podian ayudar. Les cuento que tengo una cantidad de 744 datos a partir de 0.0001 a 1.000 (todos estos datos estan ordenados decrecientemente)... Lo que intento hacer es dividir esta cantidad en 5 partes de tal forma que el error cuadratico sea el minimo.
Hasta el momento el programa funciona perfectamente cuando especifico que M puede ser 1,2,3 y 4, pero cuando quiero colocar 5 sale error de falta de memoria (me imagino que es porque itera tantas veces pero no llega a un dato concluso). Por eso pense que quizas es necesario dar una restricción de que valores considere como error (quizas que el error sea mayor a 0,0003)
Aqui esta el codigo :)
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
function Aproximacion(X,M) %X vector que se quiere aproximar, M n˙mero de bloques
N = length(X);
if M > N,
error(['El numero de aproximaciones no debe exceder el numero de','valores originales'])
end
if M == 1,
disp(['Vector Optimo: [', num2str(mean(X)),']'])
disp(['Posiciones: [', num2str(N),']'])
disp(['Error Cuadratico: ', num2str(std(X)),''])
return
elseif M == N,
disp(['Vector Optimo: [', num2str(X),']'])
disp(['Posiciones: [', num2str(1:N),']'])
disp(['Error Cuadratico: ', num2str(0),''])
return
else
TSet = nchoosek(1:N-1, M-1);
end
IMax = size(TSet,1);
Z = zeros(1,M);
EMin = Inf;
Wb = waitbar(0, 'Calculando...');
for I = 1:IMax, T = TSet(I,:);
E = 0;
for J = 1:M,
switch J
case 1
Z(J) = mean(X(1:T(1)));
E = E + sum((X(1:T(1))-Z(J)*ones(1,T(1))').^2);
case M
if T(M-1) ~= N,
Z(J) = mean(X(T(M-1)+1:N));
E = E+sum((X(T(M-1)+1:N)-Z(J)*ones(1,N-T(M-1))').^2);
else Z(J) = 0;
end
otherwise
Z(J) = mean(X(T(J-1)+1:T(J)));
E = E + sum((X(T(J-1)+1:T(J))-Z(J)*ones(1,T(J)-T(J-1))').^2);
end
end
E = sqrt(E);
if EMin > E,
Y = Z;
EMin = E;
if T(1) ~= 1,
TMin = [1,T];
end
if T(M-1) ~= N,
TMin = [T,N];
end
end
waitbar(I/IMax, Wb);
end
close(Wb)
disp(['Vector Optimo: [', num2str(Y),']'])
disp(['Posiciones: [', num2str(TMin),']'])
disp(['Error Cuadratico: ', num2str(EMin),''])
Para que funcione simplemente coloco:
Aproximacion (X, 5);
PD: Adjunto excel y codigos con los datos
Espero que me puedan ayudar.
Muchas gracias de antemano :)
- GNL.1.zip(49,4 KB)
Valora esta pregunta


0