strcat matlab_【瞎编】Matlab教你混检法

先回顾一道简单的高考数学题:

武汉全民核算检测时,采取将十个人的样品混合在一起,如果查出病毒再逐一检测,问:人群中健康人群的比例应达到多少采用混检能减少检测次数?

答:如果不采取混检,则十个人需要测试10次;如果采取了,则需要测试1次或者11次,期望为11x+1-x,其中x为需要逐一检测的几率。那么我们有x<0.9,则1-x>0.1,开10次方根,每个人健康的概率大于(0.1)^0.1≈0.79。也就是说,只要每个人健康的概率大于0.8,或者说人群中健康人群的比例达到80%,即可采用混检法。

这个问题是我前几天突发奇想,计算的一个内容。因此我就在想这个问题的延伸,就是混检法的这个混检人数,究竟应该怎么选择,所以我打算在MATLAB上编写一个简单的程序,来进行计算。

大致的思路是这样的,我们设置一个有一定规模的人群感染比例的数值,然后计算采用不同人数的混检方法的最终检测次数,并绘制图表来加以说明。我们绘制一条与人口相等的红线,低于这个红线就说明检测次数是小于人口总数的,选择混检能减少检测次数,反之则反而增加了检测次数。比红线低越多,说明效果越明显。

代码如下

clear all;close all;clc;

N=1e7;% N means population of a city.

infected=0.2;% the rate of infected people.

Result=[];% Result matrix

I=20; % Maxium number of a mixed test.

for i=1:I

    times=0;% Total times of test we need.

    tested=0;% people we have tested.

    while tested

        A=rand(1,i);% Select i people to test.

        if min(A)-infected<0 %Anyone infected.

            times=times+i+1; %test 1+i times.

        else % Everyone is healthy

            times=times+1; %test only 1 time.

        end

        tested=tested+i; % till everyone got tested.

    end

    Result=[Result times]; %Record the result.

end

plot(1:I,Result,'o-');

line([1,I],[N,N],'color','r');%Reference Line

title(strcat('N=',num2str(N),' infected=',num2str(infected)));

得到的结果如图

ba0bf4511a082893df5b81cc36bb0b85.png

图1 运算结果,N=1e7,infected=0.2

根据图1我们可以看出,当一座城市有1e7也就是一千万人口,人口中的感染率为0.2也就是20%时,需要检测的总次数是随着每次混检的人数变化的,先变小后变大,最低点大约在3人混检左右。我改变了一些相关参数,发现基本上数据也保持这个趋势:当感染率更低(10%)的时候,采取4人混检甚至比3人更好,如图2;当感染率更高(30%)的时候,这个最低点会向上移动一些,变成只有3人混检能节省次数,如图3;再高,比如说达到一半人感染,混检法就不适用了,因为次数难以收敛,呈现出不断上升的趋势。

2cdea6cd18e45335137748d9b7195848.png

图2 运算结果,N=1e7,infected=0.1

be047b053f7f8034e33ca3e984952dad.png

图3 运算结果,N=1e7,infected=0.3

因此,我们发现,其实采取3人到4人的混检法,能有效地减少混检次数,因此Foursome和Threesome会比较好。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值