谣言的传播 能不能给一个简单一点的方式和答案~

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 20:20:57
谣言的传播 能不能给一个简单一点的方式和答案~

谣言的传播 能不能给一个简单一点的方式和答案~
谣言的传播 能不能给一个简单一点的方式和答案~

谣言的传播 能不能给一个简单一点的方式和答案~
应该是和疾病的传播差不多
推荐姜启源的《数学模型》第5章第一篇就是 自己看吧网上也可以直接搜查到

像细胞的分裂一样,同时内容上还可以加上一定的扰动

假设1
第1个人还是会参加第2次的谣言传播。即第1个人和相信谣言的人会不断传播谣言
假设2
相信此谣言的人每人在单位时间内传播的平均人数正比于当时尚未听说此谣言的人数这个比恒定不变
假设3
传播的时候也会传给传播谣和听过谣言的人
设第i个单位时间开始时
相信谣言总人数
xyz(i)
没听过人数
mt...

全部展开

假设1
第1个人还是会参加第2次的谣言传播。即第1个人和相信谣言的人会不断传播谣言
假设2
相信此谣言的人每人在单位时间内传播的平均人数正比于当时尚未听说此谣言的人数这个比恒定不变
假设3
传播的时候也会传给传播谣和听过谣言的人
设第i个单位时间开始时
相信谣言总人数
xyz(i)
没听过人数
mt(i)
受传播人数中 没听过的人数占总人数比例(共有n+1个人,出去自己就有n个人)
t(i)=mt(i)/n;
受传播人数 如果k为定植
scb(i)=k*mt(i)*xyz(i);
受传播人数中没听过谣言的人数(考虑到传播的时候也会传给传播谣和听过谣言的人)
sch_mt(i)=scb(i)*t(i);
其中相信的有
scb_mt_xx(i)=sch_mt(i)*p*a/100+sch_mt(i)*(1-p)*b/100;
其中不相信的有
scb_mt_bxx(i)=sch_mt(i)-scb_xx(i);
第i+1时刻单位时间开始时
相信谣言总人数
xyz(i+1)=xyz(i)+scb_mt_xx(i);
没听过人数
mt(i+1)=mt(i)-sch_mt(i);
受传播人数中 没听过的人数占总人数比例
t(i+1)=mt(i+1)/n;
受传播人数 如果k为定植
scb(i+1)=k*mt(i+1)*xyz(i+1);
受传播人数中没听过谣言的人数(考虑到传播的时候也会传给传播谣和听过谣言的人)
sch_mt(i+1)=scb(i+1)*t(i+1);
其中相信的有
scb_mt_xx(i+1)=sch_mt(i+1)*p*a/100+sch_mt(i+1)*(1-p)*b/100;
其中不相信的有
scb_mt_bxx(i+1)=sch_mt(i+1)-scb_xx(i+1);
可以看到各种数构成了一个循环,这样就可以无限迭代下去
根据由1单位时刻
相信谣言总人数
xyz(1)=1
没听过人数
mt(1)=n
然后迭代下去。
如果假设1中第1个人不参与,只有其他相信的人参与。
那循环应该从第三个开始(本来是第二),因为
第2时刻相信谣言总人数不是下面的公式
xyz(i+1)=xyz(i)+scb_mt_xx(i);
而是
xyz(2)=scb_mt_xx(i);
所以要从第三个循环开始
程序的话:
clear
clc
tic
syms n w p a b
total=n+1;
i=1;
be=1;
unbe=total-be;
for i=1:10
get_info=unbe*w;
get_info_junior=get_info*p;
get_info_other=get_info*(1-p);
be_junior=get_info_junior*a;
be_other=get_info_other*b;
be=be+be_junior+be_other;
unbe=total-be;
i
end
be(end)
toc
来得到,不过由于未知数太多,导致得到的多项式太复杂。上式中的i如果到第10步以后,计算会变得很慢很慢。
下面是给定一些数值,它做的结果会好一些,当然参数需要自己调就是了。
clear
clc
tic
n=1000000;
w=0.001;
p=0.70;
a=0.2;
b=0.7;
nn=30000;
nout=nn/10;
total=n+1; %总人数
be(1)=1; %总的相信谣言人数
unbe(1)=total-be(1); %总的不相信谣言人数
for i=1:nn %循环
get_info=unbe(i)*w; %听到谣言的人数
unget_info=unbe(i)*(1-w); %没有听到谣言的人数
get_info_junior=get_info*p; %听到谣言并具有初中以上文凭的人数
get_info_other=get_info*(1-p); %听到谣言并还没有达到初中文凭的人数
be_junior=get_info_junior*a; %相信谣言的初中以上文凭的人数
be_other=get_info_other*b; %相信谣言而没有达到初中以上文凭的人数
unbe_junior=get_info_junior*(1-a); %不相信谣言的初中以上文凭的人数
unbe_other=get_info_other*(1-b); %不相信谣言而没有达到初中以上文凭的人数
be(i+1)=floor(be(i)+be_junior+be_other); %该时间相信谣言的总人数
unbe(i+1)=floor(unget_info+unbe_junior+unbe_other); %该时间不相信谣言的总人数
if mod(i,nout)==0
i
end
end
x=1:nn+1;
plot(x,be);
toc

收起