2017-05-16 43 views
1

我有一些麻煩,試圖實現以下數學函數這個數學函數:高斯近似 - 如何實現在Matlab

enter image description here

我直接自己計算的反函數披(X)爲分段定義的函數的第一個相等。

我的印象是肯定是錯誤的,因爲每次迭代的結果應該是更積極的(大於0)。

我確實知道這是我應該使用的確切公式,那麼請您如此友善地給我關於如何解決這個問題的任何反饋?

非常感謝提前和BR。

回答

0

解決方案畢竟是非常簡單的。在提到這個算法的過程中,我看了很多論文,我注意到兩個和的索引不是從'j/i = 1'開始,而是從'j/i = 2'開始,因此指數不再由0.

l = [0 0.3078 0.27287 0 0 0 0.41933]; 
r = [0 0 0 0 0 0.4 0.6]; 

sigma = 9.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))); 

mv = zeros(1,iterations+1); 

for k=2:length(mv) 
    for i = 2:length(l_idle) 
     if ((mu0 + (i-1)*mv(k-1)) < 10) 
      l_idle(i) = double(subs(Q_1,x,(mu0 + (i-1)*mv(k-1)))); 
     else 
      l_idle(i) = double(subs(Q_2,x,(mu0 + (i-1)*mv(k-1)))); 
     end 
    end 
    lambda = l(2:length(l))*transpose(l_idle(2:length(l_idle)));  

    for j = 2:length(r_idle) 
     b = 1-(1-lambda)^(j-1); 
     if b < 10, r_idle(j) = subs(0.4527^(-1/0.86)*(0.0218-log(x))^(1/0.86),x,b); 
     else,  r_idle(j) = subs(finverse(Q_2,x),x,b); 
     end  
    end 
    mv(k) = r(2:length(r))*transpose(r_idle(2:length(r_idle))); 
end 

非常感謝您的支持,並祝您週末愉快!