生成用于流行度计算的线性系统

时间:2017-07-26 07:24:01

标签: matlab math

这是半数学半计算机科学问题。我正在matlab上研究数学问题。 我想在一个简单的友谊矩阵x中生成一个线性系统,用于计算一般社交网络中人的受欢迎程度(向量F)。如果用户1和用户2是朋友,F(1,2)=1还有F(2,1)=1(友谊是双向的)。为了在线性系统中转换这个问题,我需要一个人(x(i))的受欢迎度值和他所有朋友(∀x(j) | F(i,j)=1 and j≠i)的受欢迎程度是线性相关的。所以我写了这个简单的公式

x(j) = sum(x(i) x n(i) x F(i,j))  ∀i≠j

其中n(i)是我的朋友数。

对于size(x)=3系统是这样的

-x(1) + f(1,2) n(2) x(2) + f(1,3) n(3) = 0 
f(2,1) n(1) x(1) - x(2) + f(1,3) n(3) x(3) = 0 
f(3,1) n(1) x(1) + f(1,2) n(2) x(2) - x(3) = 0 

使用这个特定的公式有两个问题:

  1. 没有常数,找到的解决方案是x(i)=0 ∀i
  2. 我需要积极的人气价值观,但这种方法也给了一些负面的(和正确的!)结果。
  3. 所以我需要一个没有这两个问题的公式。公式可以任意选择,因为问题完全由我定义。它必须考虑到友谊关系和线性组合中的朋友数量(获得线性系统所必需的),但也要积极。 这里是系统生成和解析的代码

    n=10;
    F=triu(randi([0,1],n));
    F=F-diag(diag(F));
    F=F+F';
    N=(sum(F))';
    A=ones(n);
    
    for i=1:n
        A(:,i)=diag(N)*F(:,i);
    end
    A=A-eye(n);
    b=zeros(n,1);
    x=A\b
    

0 个答案:

没有答案