Нормальное распределение - C#
Формулировка задачи:
Добрейший вечерочек! Имеется некоторый список со значениями. К каждому элементу списка необходимо применить нормальное распределение со среднеквадратичным отклонением в 10%. Как это сделать? Всем заранее спасибо за любую оказанную помощь
Решение задачи: «Нормальное распределение»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication367
{
public partial class Form1 : Form
{
private List<float> values = new List<float>();
private List<float> result = new List<float>();
private static Random rnd = new Random();
public Form1()
{
InitializeComponent();
//создаем список значений
for(int i=0;i<100;i++)
values.Add(i);
//добавляем к каждому значению случайную величину нормального распределения с ср.кв.откл = 10% от исх значения
foreach(var val in values)
{
var sigma = val * 0.1f;
result.Add(Gauss(val, sigma));
}
}
/// <summary>
/// Нормальное распределение
/// </summary>
public static float Gauss(float center, float sigma)
{
return (float)(center + sigma * (rnd.NextDouble() + rnd.NextDouble() + rnd.NextDouble() + rnd.NextDouble() - 2) / 2);
}
protected override void OnPaint(PaintEventArgs e)
{
//отрисовываем
var w = 5;
using(var pen = new Pen(Color.Navy, w* 0.8f))
for(int i=0;i<values.Count;i++)
{
var x = i * w;
e.Graphics.DrawLine(pen, x, 150, x, 150 - values[i]);
e.Graphics.DrawLine(pen, x, 300, x, 300 - result[i]);
}
}
}
}