高斯近似 - 如何在 Matlab 中实现此数学函数
Gaussian Approximation - How to implement this math function in Matlab
我在尝试实现以下数学函数时遇到了一些问题:
分段定义函数的第一个等式,我自己直接计算了phi(x)的反函数
我觉得一定是哪里做错了,因为每次迭代的结果应该更多 'positive'(大于 0)。
我确定这正是我应该使用的公式,所以请您给我任何关于如何解决这个问题的反馈?
非常感谢,BR。
毕竟解决方案非常简单。浏览了很多提到这个算法的论文,我注意到两个和的索引不是从 '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
非常感谢您的支持,祝您周末愉快!
我在尝试实现以下数学函数时遇到了一些问题:
分段定义函数的第一个等式,我自己直接计算了phi(x)的反函数
我觉得一定是哪里做错了,因为每次迭代的结果应该更多 'positive'(大于 0)。
我确定这正是我应该使用的公式,所以请您给我任何关于如何解决这个问题的反馈?
非常感谢,BR。
毕竟解决方案非常简单。浏览了很多提到这个算法的论文,我注意到两个和的索引不是从 '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
非常感谢您的支持,祝您周末愉快!