Matlab - Problema de error en Matlab

 
Vista:
sin imagen de perfil

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 :)

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 :)
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