ErlandB公式实验报告.docx
- 文档编号:30748908
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:23
- 大小:309.80KB
ErlandB公式实验报告.docx
《ErlandB公式实验报告.docx》由会员分享,可在线阅读,更多相关《ErlandB公式实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
ErlandB公式实验报告
《通信网性能分析基础》
实验报告
实验二ErlandB公式计算器
一、实验目的
ErlandB公式表达了电话交换系统的时间阻塞率B(s,a)与到达的呼叫量a以及中继线数目s之间的关系,为电话网络的规划和中继线容量配置奠定了基础。
本次实验要求用计算机语言编写ErlandB公式计算器,实现给定任意两个变量求解第三个变量的功能,使学生掌握ErlandB公式的计算方法,培养数值分析计算与算法设计能力。
二、实验原理
Erlang即时拒绝系统用于建模电话交换系统。
设电话呼叫流的到来服从Poisson过程,λ为呼叫的到达率,呼叫的持续时间服从参数μ的负指数分布。
系统有s条中继线,呼叫到来时,如系统中有空闲的中继线,则呼叫可到达任意一个空闲的中继线,如果没有空闲的中继线,就拒绝该呼叫。
在这样的情况下,该交换系统的排队系统模型为M/M/S(s)。
利用生灭过程稳态分布的结论,可求解M/M/s(s)系统的时间阻塞率为
。
该公式给出了B,s,a三者之间的关系。
三、实验要求
本次实验要求编写ErlangB公式的计算器,实现给定任意两个变量求解第三个变量的功能:
(1)给定到达的呼叫量a和中继线的数目s,求解系统的时间阻塞率B;
(2)给定系统的时间阻塞率的要求B和到达的呼叫量a,求解中继线的数目s,以实现网络规划;
(3)给定系统的时间阻塞率要求B以及中继线的数目s,判断该系统能支持的最大的呼叫量a。
四、实验内容
1.采用的语言
本次实验采用的软件是VC6.0,所采用的语言是C++。
2.数据结构
由于本次实验算法与函数间的关系较为简单,只运用了普通的double型、int型等简单变量,并没有设计指针、树、链表等较为复杂的数据关系。
3.主要的函数及算法流程图
1)已知a和s,求B的函数
voidCErland_BDlg:
:
OnBUTTONcalB()
{
inti;
UpdateData(TRUE);
doubleB=1;
for(i=0;i<=m_s1;i++)
{
B=(m_a1*B)/((double)i+m_a1*B);
}
m_B1=B;//求出B(s,a)
UpdateData(FALSE);
}
在该函数中,我们并没有运用ErlandB公式,而是推出另一个与ErlandB公式相等的递推公式
,利用这种算法,可使程序的实现较为简便。
下面是程序的流程图:
2)已知B和s,求a的函数
voidCErland_BDlg:
:
OnBUTTONcala()
{
UpdateData(TRUE);
inti;
doublea,equ,B;
a=0;equ=1;B=1;
while((equ>0.0001)||(equ<-0.0001))
{
a=a+0.001;
for(i=0;i<=m_s2;i++)
{
B=B*a/(i+a*B);
}
equ=m_B2-B;
}
m_a2=a;//求出a
UpdateData(FALSE);
}
在该函数中,我们运用了穷举的算法。
先设定一个从0开始的a值,利用该a值带入公式
中,算出B(s,a)值并与输入的B值比较,若二者之差不在精度范围(本程序默认精度为0.0001)内,则增加a的值,直至算出的B(s,a)与实际B值之差相差在精度范围内。
此时则默认该a值为所求。
具体实现流程图如下:
3)已知B和a,求s的函数
voidCErland_BDlg:
:
OnBUTTONcals()
{
UpdateData(TRUE);
inti,s;
doubleB,equ;
s=0;B=1;equ=1;
while((equ>0.01)||(equ<-0.01))
{
s=s+1;
for(i=0;i<=s;i++)
{
B=m_a3*B/(i+m_a3*B);
}
equ=B-m_B3;
}
m_s3=s;//求出s
UpdateData(FALSE);
}
在本函数中,所采用的算法的基本思想与上述函数类似,同样也是采取穷举的方法。
具体实现流程图如下:
4)清零
voidCErland_BDlg:
:
OnBUTTONzero()
{
UpdateData(TRUE);
m_a1=0;m_s1=0;m_B1=0;
m_a2=0;m_s2=0;m_B2=0;
m_a3=0;m_s3=0;m_B3=0;
UpdateData(FALSE);
}
在该函数中,主要的功能是实现当用户按下清零键时,把之前的输入及结果等所有的栏目清为0。
该函数的实现很简单,即当按下该按键时,程序使所有栏目的变量值都等于0。
5)作图函数
固定呼叫量,求阻塞率-中继线数的曲线部分:
//B-s图:
pDC->MoveTo(150,250);pDC->LineTo(550,250);pDC->TextOut(550,251,"s");//定义横
pDC->MoveTo(150,250);pDC->LineTo(150,50);pDC->TextOut(150,30,"B(s,a)");//定义纵
pDC->TextOut(140,251,"0");//定义原点
pDC->TextOut(140,92,"1");pDC->TextOut(130,171,"0.5");
pDC->TextOut(442,251,"100");pDC->TextOut(371,251,"75");pDC->TextOut(291,251,"50");pDC->TextOut(210,251,"25");
pDC->TextOut(300,15,"关于B-s的统计曲线");
doubley,y1;
doublea=55.7;
POINTp;
for(inti=0;i<300;i++)
{
y1=1;
for(intk=1;k<=i/3;k++)
{
y1=a*y1/(k+a*y1);
}
y=150*y1;
p.x=i+150;
p.y=int(250-y);
pDC->SetPixel(p,RGB(0,0,0));
}
固定中继线数,求阻塞率-呼叫量的曲线部分:
//B-a图:
pDC->MoveTo(650,250);pDC->LineTo(1050,250);pDC->TextOut(1050,251,"a");//定义横
pDC->MoveTo(650,250);pDC->LineTo(650,50);pDC->TextOut(650,30,"B(s,a)");//定义纵
pDC->TextOut(640,251,"0");//定义原点
pDC->TextOut(640,92,"1");pDC->TextOut(630,171,"0.5");
pDC->TextOut(942,251,"100");pDC->TextOut(871,251,"75");pDC->TextOut(791,251,"50");pDC->TextOut(710,251,"25");
pDC->TextOut(800,15,"关于B-a的统计曲线");
doublez,z1,BHT=0;
doubles=50;
POINTp1;
for(intj=0;j<1000;j++)
{
z1=1;
BHT=BHT+0.1;
for(intr=1;r<=s;r++)
{
z1=BHT*z1/(r+BHT*z1);
}
z=z1*150;
p1.x=int(BHT*3+650);
p1.y=int(250-z);
pDC->SetPixel(p1,RGB(0,0,255));
}
固定阻塞率,求呼叫量-中继线数的曲线部分:
//a-s图:
pDC->MoveTo(150,500);pDC->LineTo(550,500);pDC->TextOut(550,501,"s");//定义横坐标
pDC->MoveTo(150,500);pDC->LineTo(150,300);pDC->TextOut(150,280,"a");//定义纵坐标
pDC->TextOut(140,501,"0");//定义原点
pDC->TextOut(125,338,"120");pDC->TextOut(130,384,"90");pDC->TextOut(130,420,"60");pDC->TextOut(130,460,"30");
pDC->TextOut(442,501,"100");pDC->TextOut(371,501,"75");pDC->TextOut(291,501,"50");pDC->TextOut(210,501,"25");
pDC->TextOut(300,280,"关于a-s的统计曲线");
doubleBsa=0.15,x,x1;
POINTp2;
for(intn=0;n<=1000;n++)
{
x=n/10/(1-Bsa);
x1=x*1.2;
p2.x=n*3/10+150;
p2.y=int(500-x1);
pDC->SetPixel(p2,RGB(255,0,0));
}
另外用matlab实现了一个作图的程序:
clear;clc;
%B-s曲线图
B1=zeros(100);B1
(1)=1;s1=zeros(100);a1=55.7;
fori=2:
1:
100
P1=1;
fork=1:
1:
i
P1=a1*P1/(k+a1*P1);
end
B1(i)=P1;s1(i)=i;
end
%B-a曲线图
B2=zeros(1000);a2=zeros(1000);s2=50;
fori=2:
1:
1000
P2=1;
a2(i)=a2(i-1)+0.1;
fork=1:
1:
s2
P2=a2(i)*P2/(k+a2(i)*P2);
end
B2(i)=P2;
end
%a-s曲线图
a3=zeros(100);s3=zeros(100);B3=0.15;
fori=2:
1:
100
s3(i)=i;
a3(i)=s3(i)/(1-B3);
end
figure
(1);
subplot(1,3,1);plot(s1,B1);
title('B随s变化的曲线图');xlabel('中继线数s');ylabel('阻塞率B(s,a)');
subplot(1,3,2);plot(a2,B2);
title('S随a变化的曲线图');xlabel('呼叫量a');ylabel('阻塞率B(S,a)');
subplot(1,3,3)plot(s3,a3);
title('a与s小hi间的变化关系图');xlabel('中继线数s');ylabel('呼叫量a');
五、实验结果及分析
1.运行结果及误差比较
该程序生成的计算器界面如下图所示:
将程序所实现的计算器计算结果与
1)已知s、B,求a:
根据以上截图,可得二者对比关系:
序号
网页计算器结果
程序计算器结果
误差
1
21.900
21.919
0.019
2
45.700
45.711
0.011
3
139.150
139.130
0.02
4
25.400
25.412
0.012
5
4.450
4.454
0.004
由上表格可知,二者所求得的呼叫量a值的误差大约在0~0.02之间,误差非常小,说明该计算器实现求呼叫量的部分是正确的。
2)已知a、s,求B:
根据以上截图,可以得出二者的对比关系如下表所示:
序号
网页计算器结果
程序计算器结果
误差
1
0.035
0.0348
0.0002
2
0.020
0.0198
0.0002
3
0.290
0.2905
0.0005
4
0.022
0.0223
0.0003
5
0.002
0.0019
0.0001
由上表得,而这所得的阻塞率B(s,a)的误差范围大约在0~0.0005之间,不超过0.001,及说明误差是非常小的,所以证明该计算器的计算阻塞率部分是正确的。
3)已知a、B,求s:
根据以上截图,可得出二者的中继线数s的误差如下表格所示:
序号
网页计算器结果
程序计算器结果
误差
1
30
29
1
2
34
33
1
3
19
18
1
4
32
32
0
5
16
15
1
由上表格可知,中继线数最大误差为1,这对系统的影响相对不是很大,是在可接受范围之内的,故该计算器的求中继线数的部分基本正确。
2.曲线分析
1)固定呼叫量a,作阻塞率B随中继线数s变化而变化的曲线
在本图的程序中,固定a的值为55.7erl,得到的曲线如下:
由该曲线图知,B与s的关系是:
B随着s的增大而减小。
并且,在50之前,下降趋势较快,曲线较陡;大约在50~60之间时曲线的下降趋势开始变缓慢,并且逐渐趋于0。
2)固定中继线数s,作阻塞率B随呼叫量a变化而变化的曲线
在本图的程序中,固定s的值为50。
得到的曲线如下所示:
如以上两个图所示,B与a的关系为,当a超过一定值后,B随a的增加而增加。
第一幅图反应的是当最大呼叫量与中继线数相差比较大时的情况,在该图中,可看出在大约在a=100附近时变化很快,但是随着a增大,变化趋势开始趋于平缓,并且B的值逐渐接近1;第二幅图反映的是最大呼叫量与中继线数相差不大的情况,在该图中,可以看到大约在a=50附近阻塞开始随呼叫量的变化而迅速增大。
3)固定阻塞率B,作中继线数与呼叫量a之间的变化关系曲线
在该图中,固定阻塞率B(s,a)的值为0.15,可得以下图形:
如该图所示,a与s的关系成正比,这说明,当呼叫量增大时,为了保证阻塞率不变,需要按比例增加一定量的中继线,才能保证通话正常。
在程序中,我们的三个图放在同一个程序中实现的,如下:
该图是为了能在可执行文件中实现,采用的是通过程序来自己添加横纵坐标,故不能非常精确的表示曲线特性。
下面的图是用Matlab实现的,结果较为精确,与上图可作对比:
经对比,此图与上面的图基本一致,说明上面几幅图正确。
六、问题及解决方法
1.刚开始直接使用的是爱尔兰B公式来计算阻塞率,可能不断的循环和累加,导致计算量过大,所以总是要等很久才会出结果,或者有时不出结果而提示程序无法响应。
后来经查阅资料及运用所需知识推导出了迭代公式
,运用该公式只需要进行一次循环,计算量较小,并且程序的实现也比较容易。
因此我们选择了后者,从而实现了该计算。
2.在实现计算中继线数s的部分,所计算出的结果与网上的计算器算出的结果相比,有部分结果会有误差,且为1。
我们经过讨论后觉得,应该是算法的实现有所不同,我们是让s从0开始累加,故所得的结果是向下取整;而网上的算法可能是采用四舍五入的方法取整,故我们的结果与网上的结果有些值一样,有些值相差1。
3.在作图时,图形曲线与坐标轴的大小并不匹配。
后经检查发现,是在调用公式时把数据比例弄混了,经过仔细计算和调整后,问题的已解决。
4.在实现a-s图的程序中,我们开始运用方法的是“已知s、B计算a”的算法,可是使用这种方法画图会使程序陷入死循环,并且我们一直没找到解决方法来解决。
后来,我换了一个角度,从理论公式推导化简,得出一个较为简单的方法,如下:
当B(s,a)固定时,说明无论s和a如何变化,B始终不变,是一个常数,此时,迭代公式
可化简为
,可看出a与s成正比例关系,这样,运用化简公式即可很简单的得到关于呼叫量随中继线数变化而变化的曲线图。
七、实验总结
本次实验可以说是一个工程量比较大的实验,设计了有关算法设计、图形界面设计、函数编译与调试、调用、作图等知识,而且还得灵活的运用课本上所学的公式,所以实现起来较为困难。
但是,通过本次实验,我们也能从中受益匪浅,学到了很多以前不曾学到的知识。
例如,我们学会了如何把这么多功能结合在一起,对VC软件的使用有了更进一步的了解。
另外,我们还对爱尔兰B公式有了一个更清晰更全面的认识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ErlandB 公式 实验 报告