Выдержка из текста работы
Сначала генерируется выборка из К элементов. После получения выборки генерируется сглаженный ряд методом скользящего среднего исходя из введенной маски. Затем генерируется сглаженный ряд методом взвешенного среднего исходя из маски 5. После этого вычисляются минимальное и максимальное значение выборки. Затем определяются масштабные коэффициенты для вывода графика, и выводится график.
Таблица имен
Y |
Выборка |
|
Y2 |
Сглаженный ряд методом скользящего среднего |
|
Y3 |
Сглаженный ряд методом взвешенного среднего |
|
K |
Объем выборки |
|
N |
Маска |
|
J |
Половина маски |
|
M |
Математическое ожидание выборки |
|
S |
Среднеквадратичное отклонение выборки |
|
SX |
Масштаб графика по оси X |
|
SY |
Масштаб графика по оси Y |
|
i |
Временная переменная |
2. Блок-схема алгоритма
Размещено на http://www./
Размещено на http://www./
3. Код программы
public partial class Form1: Form
public Form1 ()
InitializeComponent();
private Random R = new Random();
private float NormRasp (float m, float sg)
float sum = 0;
for (int i = 0; i < 12; i++)
sum += (float) R. NextDouble();
return (m + sg * (sum — 6));
private void button1_Click (object sender, EventArgs e)
int K = Convert. ToInt32 (textBox1. Text);
int N = Convert. ToInt32 (textBox2. Text);
float M = Convert. ToInt32 (textBox4. Text);
float S = Convert. ToInt32 (textBox3. Text);
List<float> Y = new List<float>(K);
for (int i = 0; i < K; i++)
Y. Add (NormRasp(M, S));
int j = (N — 1) / 2;
List<float> Y2 = new List<float>(K);
for (int i = 0; i < K; i++)
if ((i < j) || (i >= K — j)) Y2. Add(0);
else
float mid = 0;
for (int ii = i — j; ii < i + j; ii++)
mid += Y[ii];
Y2. Add (mid / N);
List<float> Y3 = new List<float>(K);
for (int i = 0; i < K; i++)
if ((i < 2) || (i >= K — 2)) Y3. Add(0);
else
Y3. Add((-3*Y [i-2]+12*Y [i-1]+17*Y[i]+12*Y [i+1] — 3*Y [i+2])/35);
float min = Y[0], max = Y[0];
for (int i = 0; i < K; i++)
if (Y[i] < min) min = Y[i];
if (Y[i] > max) max = Y[i];
float SX = (float) pictureBox1. Width / K;
float SY = (float) pictureBox1. Height / (max — min);
Bitmap bmp = new Bitmap (pictureBox1. Width, pictureBox1. Height);
Graphics gr = Graphics. FromImage(bmp);
gr. Clear (Color. White);
for (int i = 0; i < K-1; i++)
gr. DrawLine (Pens. Black, i * SX, (Y[i] — min) * SY, (i + 1) * SX, (Y [i + 1] — min) * SY);
if ((i >= j) && (i < K — j-1))
gr. DrawLine (Pens. Red, i * SX, (Y2 [i] — min) * SY, (i + 1) * SX, (Y2 [i + 1] — min) * SY);
if ((i >= 2) && (i < K — 3))
gr. DrawLine (Pens. Blue, i * SX, (Y3 [i] — min) * SY, (i + 1) * SX, (Y3 [i + 1] — min) * SY);
for (int i = 1; i < 10; i++)
gr. DrawLine (Pens. LightGray, i * SX * K / 10, 0, i * SX * K / 10, pictureBox1. Height);
gr. DrawString (Convert. ToString (i * K / 10), Font, Brushes. Black, i * SX * K / 10, 0);
for (int i = 1; i < 4; i++)
gr. DrawLine (Pens. LightGray, 0, i * SY * (max — min) / 4, pictureBox1. Width, i * SY * (max — min) / 4);
gr. DrawString (Convert. ToString (i * (max — min) / 4 + min), Font, Brushes. Black, 0, i * SY * (max — min) / 4);
pictureBox1. Image = bmp;
4. Шаблон ввода входных данных
5. Результаты работы программы
программа алгоритм скользящий средний
Вывод
Был разработан алгоритм и написана программа на языке С#, генерирующая значения случайных величин, имеющих нормальный закон распределения. С помощью ее удалось осуществить сглаживание экспериментальных данных, с помощью маски простого скользящего среднего и маски взвешенного скользящего среднего.
Размещено на