方差计算方式

自己遇到的问题记录一下


int[] hh = new int[10] { 10, 9, 9, 9, 8, 6, 10, 9, 10, 8 };

            double total=0;
            for (int i = 0; i < hh.Length; i++)
                total += hh[i];


            double average = total /hh.Length; //平均数

            double fto = 0;

            for (int i = 0; i < hh.Length; i++)
                fto += Math.Pow((average - hh[i]), 2);

            double equation = fto / hh.Length; //方差

下面是随机数求得平均数,方差,正态分布的计算方法

        //求随机数平均值方法
        static double Ave(double[] a)
        {
           double sum=0;
           foreach(double d in a)
           {  
              
               sum=sum+d;
           }
           double ave=sum/a.Length;

           return ave;
        }
        //求随机数方差方法
        static double Var(double[] v)
        {
            double sum1 = 0;
            for (int i = 0; i < v.Length; i++)
            {
                double temp = v[i] * v[i];
                sum1 = sum1 + temp;
           
            }

            double sum = 0;
            foreach (double d in v)
            {
                sum = sum + d;
            }

            double var = sum1 / v.Length - (sum / v.Length) * (sum / v.Length);
            return var;
        }
       
        //求正态分布的随机数
        static void Fenbu(double[] f)
        {  
            for (int i = 0; i < f.Length; i++)
            {
                double a = 0, b = 0;
                a =Math.Sqrt((-2)* Math.Log(f[i], Math.E));
                b = Math.Cos(2 * Math.PI * f[i]);
                f[i] = a * b * 0.3 + 1;

            }

        }

例:

static void Main(string[] args)
        {  

            //生成100个(0,1)之间的随机数
            Random ran = new Random();
            double[] dou = new double[100];
            for(int i=0;i<dou.Length;i++)
            {
               dou[i]= ran.NextDouble();
           
            }

            //调用Ave方法、Var方法求得随机数均值和方差
            double avenum = Ave(dou);
            double varnum = Var(dou);

           //写入文件
           //将100个随机数,均值,方差保存到文件“d:\C#练习\SourceData.txt”中
            string Datapath = (@"d:\C#练习\SourceData.txt");

             FileStream fs = new FileStream(Datapath, FileMode.Create);
             StreamWriter sw = new StreamWriter(fs);

             for (int j = 0; j < dou.Length;j++ )
             {
                 sw.WriteLine(dou[j]);
               
             }
           
             sw.Write("100个随机数均值和方差分别是{0}和{1}",avenum,varnum);
             sw.Close();


             //读取数据文件“d:\C#练习\SourceData.txt”
             FileStream fs1 = new FileStream(Datapath, FileMode.Open);
             StreamReader sr = new StreamReader(fs1);
             string temp=null;
             string str = null;
             while((temp=sr.ReadLine())!=null)
            {
                str = str+temp+" ";
            }
           
            //对数组进行分割Regax
             Regex re = new Regex(" ");
             string[] str1=re.Split(str);
             double[] nums=new double[str1.Length-2];
            
             for(int i=0;i<str1.Length-2;i++)
             {
             
              nums[i]=Convert.ToDouble(str1[i]);
             }
       
            //调用正态分布随机函数,求均值和方差
            Fenbu(nums);
            double averesult= Ave(nums);
            double varresult = Var(nums);

            //写入文件
            //将100个随机数,均值,方差保存到文件“d:\C#练习\ResultData.txt”中
            string Resultpath = (@"d:\C#练习\ResultData.txt");

            FileStream fs2 = new FileStream(Resultpath, FileMode.Create);
            StreamWriter sw1 = new StreamWriter(fs2);

            for (int j = 0; j < nums.Length; j++)
            {
                sw1.WriteLine(nums[j]);

            }

            sw1.Write("100个随机数均值和方差分别是{0}和{1}", averesult, varresult);
            sw1.Close();

            Console.ReadKey();
   
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值