想要源码的童鞋请在下方留言~~
以泊松分布,产生50个随机数,画函数图像为例进行详细描述:
1. 首先打开你的vs2010,建立项目,选择窗体程序,点击确定
- 将需要的控件从工具箱中拖到窗体,如图所示,以泊松分布为例:
3.如果没找到工具箱,点击顶部菜单选项 视图->工具箱,工具箱就找到了,如图所示:
- 记住:在Form1.cs中写代码,不要乱写代码哈
4.定义了一个全局数组,用来存放由分布产生的50个随机数;
int[] iArray = new int[50];
5.自定义了个函数为 public void receiveData()
,获取到输入的分布参数λ,并产生50个随机数,存到数组iArray中,代码如下:
public void receiveData()
{
string str_temp = textBox1.Text;
double para_temp = Convert.ToDouble(str_temp);
//string[,] coordinate = new string[100,50];
//将50个点对应的值存在数组里面
//int[] iArray = new int[50];
for (int i = 0; i < 50; i++)
{
int time = (int)possion(para_temp);
iArray[i] = time;
//System.Threading.Thread.Sleep(time);
//System.Console.Write("等待" + possion(para_temp)+"秒!\n");
}
//求出数组中的最大值,根据最大值确定y轴,确定分多少个段
int maxIndex = 0;
for (int j = 0; j < 50; j++)
{
if (iArray[maxIndex] < iArray[j])
{
maxIndex = j;
}
}
}
public static double possion(double lam)
{
int k = 0;
//利用GUID产生随机数的种子,模拟真正的随机
//Random time = new Random(Guid.NewGuid().GetHashCode());
double p = 1.0;
double L = Math.Exp(-lam); //exp(-Lambda)是接近0的小数
while (p >= L)
{
//double u = time.NextDouble();
double u = p_random().NextDouble();
p *= u;
k++;
}
return k - 1;
}
//利用GUID产生随机数的种子,模拟真正的随机
public static Random p_random()
{
Random rand = new Random(Guid.NewGuid().GetHashCode());
return rand;
}
6.对点击按钮添加事件,即调用receiveData()
;
private void button1_Click(object sender, EventArgs e)
{
receiveData();
}
7.随后,开始画函数图像了,对控件pictureBox添加事件,即点击pictureBox区域,函数图像立即呈现,具体代码如下:
private void pictureBox1_Click_1(object sender, EventArgs e)
{
pictureBox1.Refresh();
Graphics g = pictureBox1.CreateGraphics();
try
{
for (int i = 0; i < 51; i ++)
{
g.FillEllipse(Brushes.Red, new Rectangle(i * 10, iArray[i] * 10, 3, 3));
Pen think_pen = new Pen(Color.Black, 1);
g.DrawLine(think_pen, i * 10 , iArray[i] * 10, (i+1) * 10, iArray[i + 1] * 10);
label3.Text = "请点击下方空白区域查看泊松分布函数图像↓";
//label2.Text = Convert.ToString(iArray[i]);
}
}
catch (Exception f)
{
}
}
8.对退出按钮添加点击事件
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
10.ok,大功告成,有没有觉得很简单!
正态分布和泊松分布类似,在此就不多赘述了,想要正态分布源码的童鞋,可以在下方留言呦~~