楼主: jujuyu
1435 5

[其他] 求助各位matlab大神,求助 [推广有奖]

  • 0关注
  • 2粉丝

已卖:28份资源

硕士生

12%

还不是VIP/贵宾

-

威望
0
论坛币
11900 个
通用积分
3.9948
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1878 点
帖子
105
精华
0
在线时间
121 小时
注册时间
2017-3-13
最后登录
2023-4-3

楼主
jujuyu 发表于 2018-8-2 18:59:41 |AI写论文
100论坛币
clear;clc
m0=input('未增长前的网络节点个数m0:');
m=input('每次引入的新节点时新生成的边数m:');
N=input('增长后的网络规模N:');
degree=zeros(N,1);
position=zeros(N,2);
if m>m0
    disp('输入参数m输入不合法');
    return;
end
adjacent_matrix = sparse( m0, m0);% 初始化邻接矩阵
for i = 1: m0
    for j = 1:m0
        if j ~= i      %去除每个点自身形成的环
            adjacent_matrix(i,j) = 1;%建立初始邻接矩阵,3点同均同其他的点相连
        end
    end
end

adjacent_matrix =sparse(adjacent_matrix);%邻接矩阵稀疏化
node_degree = zeros(1,m0+1);                %初始化点的度
node_degree(2: m0+1) = sum(adjacent_matrix);%对度维数进行扩展
u=rand(1,m0+1);

for i=1:m
     s=u.*node_degree;
end

for iter= m0+1:N
    iter                             %加点
    total_degree = sum(s);%计算网络中此点的度之和
    cum_degree = cumsum(node_degree);%求出网络中点的度矩阵
    choose= zeros(1,m);%初始化选择矩阵
    % 选出第一个和新点相连接的顶点
    r1= rand(1)*total_degree/u(1);%算出与旧点相连的概率
    for i= 1:iter-1
        if (r1>=cum_degree(i))&( r1<cum_degree(i+1))%选取度大的点
            choose(1) = i;
            break
        end
    end
    % 选出第二个和新点相连接的顶点
    r2= rand(1)*total_degree/u(2);
    for i= 1:iter-1
        if (r2>=cum_degree(i))&(r2<cum_degree(i+1))
            choose(2) = i;
            break
        end
    end
    while choose(2) == choose(1)%第一个点和第二个点相同的话,重新择优
        r2= rand(1)*total_degree/u(4);
        for i= 1:iter-1
            if (r2>=cum_degree(i))&(r2<cum_degree(i+1))
                choose(2) = i;
                break
            end
        end
    end
    % 选出第三个和新点相连接的顶点
    r3= rand(1)*total_degree/u(3);
    for i= 1:iter-1
        if  (r3>=cum_degree(i))&(r3<cum_degree(i+1))
            choose(3) = i;
            break
        end
    end
    while (choose(3)==choose(1))||(choose(3)==choose(2))
        r3= rand(1)*total_degree/u(iter);
        for i=1:iter-1
            if (r3>=cum_degree(i))&(r3<cum_degree(i+1))
                choose(3) = i;
                break
            end
        end
    end
    %新点加入网络后, 对邻接矩阵进行更新
    for k = 1:m
        adjacent_matrix(iter,choose(k)) = 1;
        adjacent_matrix(choose(k),iter) = 1;
    end
    node_degree=zeros(1,iter+1);
    node_degree(2:iter+1) = sum(adjacent_matrix);
end
matrix = adjacent_matrix;

以上是在无标度网络基础上的适应度模型改进,但是一直出错,求助各位大神。
适应度模型与无标度网络模型的区别仅有一点,如图所示。
求助各位大神帮忙更改一下程序,不知道为什么出错

附件: 你需要登录才可以下载或查看附件。没有帐号?我要注册

最佳答案

xiawei918 查看完整内容

你的r1, r2, r3的随机值范围很大,很多时候往往超出 (r3>=cum_degree(i))&(r3
关键词:邻接矩阵 网络规模 计算网络 网络节点 输入参数

沙发
xiawei918 发表于 2018-8-2 18:59:42
你的r1, r2, r3的随机值范围很大,很多时候往往超出 (r3>=cum_degree(i))&(r3<cum_degree(i+1)) 这个condition
看来你需要重新考虑这个condition是不是符合你的假设
已有 1 人评分经验 收起 理由
giresse + 100 精彩帖子

总评分: 经验 + 100   查看全部评分

藤椅
jujuyu 发表于 2018-8-2 19:00:46
求助各位大神,感激不尽

板凳
卿华 发表于 2019-2-23 21:00:28
不造

报纸
xiawei918 发表于 2019-2-27 13:32:40
你要是能把这个程序的目的描述一下大概可能会更有帮助。我大致看了一下,只知道你出错那一行有时候会运行choose(2),这个结果是0,所以会出错。而且我试了几次,r3赋值那一行也有可能出错。初步猜测和你的随机赋值可能有关系
已有 1 人评分经验 收起 理由
giresse + 60 精彩帖子

总评分: 经验 + 60   查看全部评分

地板
jujuyu 发表于 2019-3-1 22:12:34
谢谢,那我再改进一下,万分感激!!!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-2 03:59