【问题标题】:Finding the distribution of '1' in rows/columns from a parity-check matrix从奇偶校验矩阵中查找“1”在行/列中的分布
【发布时间】:2017-08-08 05:51:30
【问题描述】:

我这次的问题是关于通过线性规划获得 LDPC 矩阵的度分布,在以下语句下:

我的代码如下:

function [v] = LP_Irr_LDPC(k,Ebn0)

options = optimoptions('fmincon','Display','iter','Algorithm','interior-point','MaxIter', 4000, 'MaxFunEvals', 70000);
fun = @(v) -sum(v(1:k)./(1:k));

A = [];
b = [];
Aeq = [0, ones(1,k-1)];
beq = 1;
lb = zeros(1,k);
ub = [0, ones(1,k-1)];
nonlcon = @(v)DensEv_SP(v,Ebn0);
l0 = [0 rand(1,k-1)];
l0 = l0./sum(l0);

v = fmincon(fun,l0,A,b,Aeq,beq,lb,ub,nonlcon,options)
end

非线性约束的定义:

function [c, ceq] = DensEv_SP(v,Ebn0)

% It is also needed to modify this function, as you cannot pass parameters from others to it. 

h = [0 rand(1,19)];
h = h./sum(h); % This is where h comes from

syms x;
X = x.^(0:(length(h)-1));
R = h*transpose(X);

ebn0 = 10^(Ebn0/10);
Rm = 1;
LLR = (-50:50);
p03 = 0.3;
LLR03 = log((1-p03)/p03);
r03 = 1 - p03;
noise03 = (2*r03*Rm*ebn0)^-1;
pf03 = normpdf(LLR, LLR03, noise03);
sumpf03 = sum(pf03(1:length(pf03)/2));

divisions = 100;

Aj = zeros(1, divisions);
rho = zeros(1, divisions);
xj = zeros(1, divisions);
k = 10; % Length(v) -> Same value as in 'Complete.m'

for j=1:1:divisions
    xj(j) = sumpf03*j/divisions;
    rho(j) = subs(R,x,1-xj(j));
    Aj(j) = 1 - rho(j);
end

c = zeros(1, length(xj));
lambda = zeros(1, length(Aj));
for j = 1:1:length(xj)
    lambda(j) = sum(v(2:k).*(Aj(j).^(1:(k-1))));
    c(j) = sumpf03*lambda(j) - xj(j);
end

save Almacen
ceq = [];
%ceq = sum(v)-1;
end

这个问题与here 发布的问题相关联。我的问题是,我需要来自该优化问题的向量 v 和 h 中的每个元素分别是 x/N 和 x/(N(1-r) 的一小部分。

我怎样才能在不失去收敛能力的情况下确保该条件?

【问题讨论】:

    标签: matlab matrix optimization constraints nonlinear-optimization


    【解决方案1】:

    我在函数DensEv_SP 中提出了一种可能的解决方案,至少对于向量h:

    function [c, ceq] = DensEv_SP(v,Ebn0)
    
    % It is also needed to modify this function, as you cannot pass parameters from others to it. 
    
    k = 10; % Same as in Complete.m, desired sum of h
    M = 19; % Number of integers
    h = [0 diff([0,sort(randperm(k+M-1,M-1)),k+M])-ones(1,M)];
    
    h = h./sum(h);
    
    syms x;
    X = x.^(0:(length(h)-1));
    R = h*transpose(X);
    
    ebn0 = 10^(Ebn0/10);
    Rm = 1;
    LLR = (-50:50);
    p03 = 0.3;
    LLR03 = log((1-p03)/p03);
    r03 = 1 - p03;
    noise03 = (2*r03*Rm*ebn0)^-1;
    pf03 = normpdf(LLR, LLR03, noise03);
    sumpf03 = sum(pf03(1:length(pf03)/2));
    
    divisions = 100;
    
    Aj = zeros(1, divisions);
    rho = zeros(1, divisions);
    xj = zeros(1, divisions);
    N = 20; % Length(v) -> Same value as in 'Complete.m'
    
    for j=1:1:divisions
        xj(j) = sumpf03*j/divisions;
        rho(j) = subs(R,x,1-xj(j));
        Aj(j) = 1 - rho(j);
    end
    
    c = zeros(1, length(xj));
    lambda = zeros(1, length(Aj));
    for j = 1:1:length(xj)
        lambda(j) = sum(v(2:k).*(Aj(j).^(1:(k-1))));
        c(j) = sumpf03*lambda(j) - xj(j);
    end
    
    save Almacen
    ceq = (N*v)-floor(N*v);
    %ceq = sum(v)-1;
    end
    

    如上所说,vectorh已经没有问题了;尽管如此,我定义ceq 值的方式似乎不足以使优化工作(v 的问题根本没有减少)。有人知道如何找到解决方案吗?

    【讨论】:

    • 这是解决方案吗?看起来你在最后问了另一个问题。
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2015-05-23
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多