Ienumerator и ienumerables - C#

  1. КАК Реализовать расчет математического ожидания и дисперсии для ряда псевдослучайных чисел. Ряд чисел должен генерироваться функцией, возвращающей IEnumerable<double> и принимающей в качестве параметра требуемое количество чисел в ряде.


textual

Код к задаче: «Ienumerator и ienumerables - C#»

using System;
using System.Collections.Generic;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace TriangularDistribution
{
    public class TriangularDistribution
    {
        public readonly double Mean; // Матожидание
        public readonly double Variance; // Дисперсия
        public readonly double StandardDeviation; // СКО
        public readonly double Skewness; // Коэффициент ассиметрии
        public const double Kurtosis = -0.6; // Коэффициент эксцесса
 
        private readonly Random _r = new Random();
        private readonly double _a;
        private readonly double _b;
        private readonly double _ba;
        private readonly double _ca;
 
 
        public TriangularDistribution(double a, double b, double c)
        {
            _a = a;
            _b = b;
            _ba = b - a;
            _ca = c - a;
            Mean = (a + b + c) / 3.0;
            Variance = (a * a + b * b + c * c - a * b - a * c - b * c) / 18.0;
            StandardDeviation = Math.Sqrt(Variance);
            double d = a * a + b * b + c * c - a * b - a * c - b * c;
            Skewness = 1.414 * (a + b - 2 * c) * (2 * a - b - c) * (a - 2 * b + c) / (5 * d * Math.Sqrt(d));
        }
 
 
        public double Next()
        {
            double x = _r.NextDouble();
            if (x <= _ca / _ba)
                return _a + Math.Sqrt(x * _ba * _ca);
            return _b - Math.Sqrt((1 - x) * _ba * _ca);
        }
    }
 
 
    public class Program
    {
        private static double Mx(IEnumerable<double> a)
        {
            return a.Sum() / a.Count();
        }
 
 
        private static void Main()
        {
            const int a = 0, b = 4, c = 4;
            Console.Write("Введите размер выборки: ");
            int n = int.Parse(Console.ReadLine());
            var r = new TriangularDistribution(a, b, c);
            var ar = new double[n];
            for (int i = 0; i < ar.Length; i++)
                ar[i] = r.Next();
            //Матожидание 
            var mx = Mx(ar);
            //Дисперсия
            var v2 = Mx(ar.Select(x => x * x));
            var dx = v2 - mx * mx;
            //СКО
            var sigma = Math.Sqrt(dx);
            //Коэф. ассиметрии
            var v3 = Mx(ar.Select(x => x * x * x));
            var m3 = v3 - 3 * mx * v2 + 2 * mx * mx * mx;
            var As = m3 / (sigma * sigma * sigma);
            //Эксцесс
            var v4 = Mx(ar.Select(x => x * x * x * x));
            var m4 = v4 - 4 * mx * v3 + 6 * mx * mx * v2 - 3 * mx * mx * mx * mx;
            var ex = m4 / (sigma * sigma * sigma * sigma) - 3;
            var excelApp = new Excel.Application();
            excelApp.Workbooks.Add();
            int rowIndex = 1, colIndex = 1;
            excelApp.Cells[rowIndex, colIndex++] = "Исходный ряд: X";
            foreach (var x in ar)
                excelApp.Cells[rowIndex, colIndex++] = x;
            rowIndex++;
            colIndex = 1;
            excelApp.Cells[rowIndex, colIndex++] = "Вариационный ряд: X";
            Array.Sort(ar);
            foreach (var x in ar)
                excelApp.Cells[rowIndex, colIndex++] = x;
            rowIndex+=3;
            excelApp.Cells[rowIndex, 1] = "Значение";
            excelApp.Cells[rowIndex, 2] = "Теоретическое";
            excelApp.Cells[rowIndex, 3] = "Статистическое";
            excelApp.Cells[rowIndex, 4] = "Разница в %";
            rowIndex++;
            Print(excelApp, "Mx", ref rowIndex, mx, r.Mean);
            Print(excelApp, "Dx", ref rowIndex, dx, r.Variance);
            Print(excelApp, "Ax", ref rowIndex, As, r.Skewness);
            Print(excelApp, "Ex", ref rowIndex, ex, TriangularDistribution.Kurtosis);
            excelApp.Columns.AutoFit();
            excelApp.Visible = true;
        }
 
 
        private static void Print(Excel.Application excelApp, string name, ref int rowIndex, double statist, double teor)
        {
            const int prec = 3;
            excelApp.Cells[rowIndex, 1] = name;
            excelApp.Cells[rowIndex, 2] = Math.Round(teor, prec);
            excelApp.Cells[rowIndex, 3] = Math.Round(statist, prec);
            excelApp.Cells[rowIndex, 4] = Math.Round(Math.Abs(1 - statist / teor) * 100, prec);
            rowIndex++;
        }
    }
}

СДЕЛАЙТЕ РЕПОСТ

14   голосов, оценка 4.286 из 5



Похожие ответы
  1. Привет знатокам Сразу скажу - мне нужен хотя бы ручной расчет не говоря о программе, т.к. в программировании я мало понимаю, и скорее всего обратился не в ту тему или даже форум. Заранее извиняюсь Ребят, подскажите как найти оси координаты КУРСОРА если они расположены в обратном направлении, а их центр находится в левом верхнем углу? На скриншоте http://prntscr.com/gnbkw4 я показал так скажем условие которое сделал сам, но для моего мегамозга эта сложная задача.

  1. Код ================== { Entry 1 } Application Name: Google Chrome URL: http://cp.fange.ru/register Username: 123dd Password: 1234qwer ================= { Entry 2 } Application Name: Google Chrome URL: http://mail.ru Username: 123dd Password: 1234qwer ================== { Entry 3 } Application Name: Google Chrome URL: http://cp.ketrawars.net/register Username: 123dd Password: 1234qwer ================== как получить username:password из каждой части тхт

  1. Здравствуйте, я столкнулся с проблемой. Есть программа которая выполняет данные ей команды. Но проблема в том что надо реализовать пользовательские скрипты. Иными словами, есть папка в которой лежат файлы с кодом который программа должна выполнять при соответствующей команде в отдельном процессе. Вариант с запуском готовых .exe отпал сразу. Как я себе представляю: есть код на с#, который программа компилирует и выполняет. Принимаю все варианты и советы. Заранее спасибо!

  1. Доброго времени суток, Господа. Вопрос в следующем. Как мне правильно сделать пересечение друх множеств? Вопросы следующие:1. Хочу найти пересечение двух последовательностей, которые хранят информацию о свойствах двух классов, по имени этих свойств:

  1. Дано равенство, в котором цифры заменены на буквы: rsrx + sru = rutr Найдите сколько у него решений, если различным буквам соответствуют различные цифры. может знаете менее прямолинейное решение?) а то как-то даже выглядит не хорошо.

  1. Приветствую, ребята! Почитал статью Архитектура ПО в WinForms (FAQ & HowTo) , многое теперь стало понят но. Единственное что хотел уточнить. Модель данных - это так сказать "абстрактная штука", с которой уже работают контролы. Либо же это отдельный компонент, в котором можно настроить эту модель данных ? Я вот к чему спросил. Возьмем простой пример, например, рассыльщик писем. От программы требуется рассылать письма с определенным текстом по заданному списку e-mail адресов. Т.е. у нас получается что, на вход мы подаем список адресов, и программа уже работает с ними (шлет письма на адреса). Я так думаю, что моделью данных будет некий класс, в котором будет храниться загруженный список адресов с флажками или полями (отправлен, не отправлен). И уже этот список выводить, например, в DataGrid (нужно его еще как-то прикрутить к источнику модели данных). Раньше бы я тупо загрузил список сразу в DataGrid и обрабатывал уже его, но так не нужно делать

  1. Всем привет! Из своего приложения запускаю стороннюю консольную программу и хочу передать ей строку с параметрами. Перед этим, пользователь через окно обзора выбирает несколько файлов и добавляет их в список, происходит это так:

  1. Всем доброго времени суток. Есть голая форма с label. При наведении мышки на нее MouseEnter Эта label перебирает из массива приветсвия на разных языках. Это вроде работает но как потом выключить этот поток я не могу

  1. Ребят, нужна помощь: У меня на кнопке такой код:

  1. Написать программу, которая определяет, попадает ли точка с заданными координатами в область, закрашенную на рисунке. Вроде бы задание элементарное, но мои познания в математики на столько скудны, что я не смог справиться с треугольником, попытался найти формулу, но у меня не вышло