Matlab - Problema definiendo una función

   
Vista:

Problema definiendo una función

Publicado por Aitor (46 intervenciones) el 15/05/2017 13:02:11
Hola amigos,

Estoy teniendo problemas para implementar la función de la siguiente imagen:


GaussianApproximation

Para calcular la función inversa de rho, he utilizado una aproximación numérica para la segunda igualdad de la función definida a trozos, ya que no tenía solución analítica.

Tengo la impresión de que algo está mal hecho, porque el resultado debería ser más positivo con cada iteración.

Dejo aquí mi código:

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
l = [0 0.3078 0.27287 0 0 0 0.41933];
r = [0 0 0 0 0 0.4 0.6];
 
sigma = 0.8747;
 
mu0 = 2/sigma;
 
iterations = 50;
 
% Density evolution algorithm depiction for finding the treshold of irregular LDPC codes
syms x;
 
l_idle = zeros(1,length(l));
r_idle = zeros(1,length(r));
 
Q_1 = exp(-0.4527*x^0.86 + 0.0218);
Q_2 = sqrt(pi/x)*exp(-x/4)*(1-20/(7*x));
 
mu = zeros(1,iterations+1);
 
for k=2:1:iterations+1
    for i = 1:length(l_idle)
        if ((mu0 + (i-1)*mu(k-1)) < 10)
            l_idle(i) = subs(Q_1,x,(mu0 + (i-1)*mu(k-1)));
        else
            l_idle(i) = subs(Q_2,x,(mu0 + (i-1)*mu(k-1)));
        end
    end
    lambda = l*transpose(l_idle);
 
    for j = 1:length(r_idle)
        b = 1-(1-lambda)^(j-1);
        g = subs(Q_1,x,b);
        if or(subs(Q_1,x,10) < g, subs(Q_1,x,0) >= g)
            r_idle(j) = (1/0.4527*(0.0218-log(g)))^(1/0.86);
        else
            xx = linspace(0, subs(Q_2,x,10), 10000);
            yy = f(xx);
            r_idle(j) = interp1(yy,xx,b);
        end
    end
    mu(k) = r*transpose(r_idle);
end

Si alguien tiene alguna duda, estaré encantado de responderla...

¡Muchas gracias de antemano y que tengáis todos una feliz semana!
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