zoukankan      html  css  js  c++  java
  • 求随机数平均值方法 求随机数方差方法 求正态分布的随机数

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Collections;
    using System.Text.RegularExpressions;

    namespace random
    {
        
    class Program
        {

            
    //求随机数平均值方法
            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 tt = 2;
                
    //double mm = tt ^ 2;

                
    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)
            {
                
    //double fenbu=new double[f.Length ];
                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:\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:\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();

            }
        }
    }
  • 相关阅读:
    微服务架构技术栈选型手册(万字长文)
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    MFC对话框中使用CHtmlEditCtrl
    ATL开发 ActiveX控件的 inf文件模板
    ActiveX: 如何用.inf和.ocx文件生成cab文件
    Xslt 1.0中使用Array
    如何分隔两个base64字符串?
    An attempt was made to load a program with an incorrect format
    JQuery 公网 CDN
  • 原文地址:https://www.cnblogs.com/dodui/p/2022014.html
Copyright © 2011-2022 走看看