2017-05-16 27 views
1

私は、次の数学関数を実装しようといくつかの問題を抱えている中で、この数学の機能を実装する方法:ガウス近似 - MATLAB

enter image description here

私が直接自分での逆関数を計算し

PHI(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 

ご支援いただきありがとうございます。素晴らしい週末をお過ごしいただけますか?