ΠΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΠΉ Π°Π½Π°Π»ΠΈΠ·
Float minY1 = max — (float) (MY — deltaM + (Betta — deltaB) * (i / SizeX — MX) — min); Gr. FillRectangle (Brushes. Green, (float) MX * SizeX, (max + min — (float) MY) * SizeY, 3, 3); Float minY2 = max — (float) (MY — deltaM + (Betta + deltaB) * (i / SizeX — MX) — min); Float maxY1 = max — (float) (MY + deltaM + (Betta — deltaB) * (i / SizeX — MX) — min); ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡΠ°Π½… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΠΉ Π°Π½Π°Π»ΠΈΠ·
1. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ
Π‘Π½Π°ΡΠ°Π»Π° Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π Π²ΡΠ±ΠΎΡΠΎΠΊ ΠΈΠ· N ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΡΠ΅ΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ Π΄ΠΈΡΠΏΠ΅ΡΡΠΈΡ. ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ. ΠΠ»Ρ ΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΌΠ°Ρ. ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ²Π΅ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π». ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΡΠΈΡΠ΅ΡΠΈΠΉ Π€ΠΈΡΠ΅ΡΠ°, ΠΈ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ, ΡΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ.
ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡΠ°Π½ Π’Π°Π±Π»ΠΈΡΠ° ΠΈΠΌΠ΅Π½
K | Π§ΠΈΡΠ»ΠΎ Π²ΡΠ±ΠΎΡΠΎΠΊ | |
N | ΠΠ±ΡΠ΅ΠΌ Π²ΡΠ±ΠΎΡΠΎΠΊ | |
M1 | ΠΠ°Ρ. ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ | |
DM | Π¨Π°Π³ ΠΌΠ°Ρ. ΠΠΆΠΈΠ΄Π°Π½ΠΈΡ | |
S | ΠΠ΅Π½Π΅ΡΠ°Π»ΡΠ½Π°Ρ Π΄ΠΈΡΠΏΠ΅ΡΡΠΈΡ | |
Matrix | ΠΠ°ΡΡΠΈΠ² Π²ΡΠ±ΠΎΡΠΎΠΊ | |
Mid | Π‘ΡΠ΅Π΄Π½ΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠΈΡ Π²ΡΠ±ΠΎΡΠΎΠΊ | |
SG | ΠΠΈΡΠΏΠ΅ΡΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ | |
Betta | ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ | |
Alpha | ||
Dos | Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ | |
MX | ||
MY | ||
DX | ||
DY | ||
SX | ||
SY | ||
Da | ||
Dm | ||
Sa | ||
Sm | ||
D0 | ||
S0 | ||
r | ||
u | ΠΠ²Π°Π½ΡΠΈΠ»Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ | |
v | Π§ΠΈΡΠ»ΠΎ ΡΡΠ΅ΠΏΠ΅Π½Π΅ΠΉ ΡΠ²ΠΎΠ±ΠΎΠ΄Π° | |
tm | ΠΠ²Π°Π½ΡΠΈΠ»Ρ Π‘ΡΡΡΠ΄Π΅Π½ΡΠ° Π΄Π»Ρ Alpha | |
tb | ΠΠ²Π°Π½ΡΠΈΠ»Ρ Π‘ΡΡΡΠ΄Π΅Π½ΡΠ° Π΄Π»Ρ Betta | |
deltaM | ΠΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΡ Alpha | |
deltaB | ΠΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΡ Beta | |
F | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΡ Π€ΠΈΡΠ΅ΡΠ° | |
Fkr | ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΡ Π€ΠΈΡΠ΅ΡΠ° | |
min | ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ | |
max | ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ | |
SizeX | ΠΠ°ΡΡΡΠ°Π± Π³ΡΠ°ΡΠΈΠΊΠ° ΠΏΠΎ Π₯ | |
SizeY | ΠΠ°ΡΡΡΠ°Π± Π³ΡΠ°ΡΠΈΠΊΠ° ΠΏΠΎ Y | |
bmp | Π‘Π°ΠΌΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ | |
gr | ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ | |
Result | Π‘ΡΡΠΎΠΊΠ° Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ | |
2. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
using System;
using System. Collections. Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Text;
using System. Windows. Forms;
namespace oed6
{
public partial class Form1: Form
{
public Form1 ()
{
InitializeComponent ();
}
Random R = new Random ();
double NormRasp (double M, double S)
{
double sum = 0;
for (int i = 0; i < 12; i++)
sum += R. NextDouble ();
return M + (sum — 6) * S;
}
double InverseNormalCDF (double alpha)
{
double res = 0, p = 0, t = 0, q = 0;
if (alpha < 0.5)
p = alpha;
else
p = 1 — alpha;
t = Math. Sqrt (-2 * Math. Log (p, Math. E));
q = t — ((0.10 328 * t + 0.802 853) * t + 2.515 517) / (((0.1 308 * t + 0.189 269) * t + 1.432 788) * t + 1);
if (alpha > 0.5)
res = q;
else
res = - q;
return res;
}
private void button1_Click (object sender, EventArgs e)
{
int K = Convert. ToInt32 (textBox1. Text);
int N = Convert. ToInt32 (textBox2. Text);
double M1 = Convert. ToDouble (textBox3. Text);
double DM = Convert. ToDouble (textBox4. Text);
double S = Convert. ToDouble (textBox5. Text);
List> Matrix = new List>();
for (int i = 0; i < K; i++)
{
Matrix. Add (new List ());
for (int j = 0; j < N; j++)
Matrix[i]. Add (NormRasp (M1 + DM * i, S));
}
List Mid = new List ();
for (int i = 0; i < K; i++)
{
double sum = 0;
for (int j = 0; j < N; j++)
sum += Matrix[i] [j];
Mid. Add (sum);
}
List SG = new List ();
for (int i = 0; i < K; i++)
{
double sum = 0;
for (int j = 0; j < N; j++)
sum += (Matrix[i] [j] - Mid[i]) * (Matrix[i] [j] - Mid[i]);
SG. Add (Math. Sqrt (sum / (N — 1)));
}
double B1 = 0, B2 = 0, B3 = 0, B4 = 0;
for (int i = 0; i < K; i++)
{
B1 += Mid[i] * i;
B2 += i;
B3 += Mid[i];
B4 += i * i;
}
double Betta = (K * B1 — B2 * B3) / (K * B4 — B2 * B2);
double Alpha = (B3 — Betta * B2) / K;
double Dos = 0;
for (int i = 0; i < K; i++)
Dos += (Mid[i] - Alpha — Betta * i) * (Mid[i] - Alpha — Betta * i);
Dos /= (K — 2);
double MX = 0, MY = 0;
for (int i = 0; i < K; i++)
{
MX += i + 1;
MY += Mid[i];
}
MX /= K;
MY /= K;
double DX = 0, DY = 0;
for (int i = 0; i < K; i++)
{
DX += (i — MX) * (i — MX);
DY += (Mid[i] - MY) * (Mid[i] - MY);
}
DX /= (K — 1);
DY /= (K — 1);
double SX = Math. Sqrt (DX);
double SY = Math. Sqrt (DY);
double Da = 0;
for (int i = 0; i < K; i++)
Da += (Mid[i] - MY) * (Mid[i] - MY);
Da /= K — 1;
double Dm = Da / K;
double Sa = Math. Sqrt (Da);
double Sm = Math. Sqrt (Dm);
double D0 = 0;
for (int i = 0; i < K; i++)
D0 += SG[i];
D0 /= K;
double S0 = Math. Sqrt (D0);
double r = 0;
for (int i = 0; i < K; i++)
r += (i — MX) * (Mid[i] - MY);
r /= (K — 1) * Sa * SX;
double p = Convert. ToDouble (comboBox1. Text. ToString ());
double u = Math. Abs (InverseNormalCDF (p)); // ΠΊΠ²ΠΈΠ½ΡΠΈΠ»Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ
double uq = Math. Pow (u, 2); // ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΊΠ²ΠΈΠ½ΡΠΈΠ»Ρ
double q1 = (uq + 1) * u / 4;
double q2 = ((5 * uq + 16) * uq + 3) * u / 96;
double q3 = (((3 * uq+ 19) * uq + 17) * uq — 15) * u / 384;
double q4 = ((((79 * uq + 776) * uq + 1482) * uq — 1920) * uq — 945) * u / 92 160;
double v = K — 1;
double tm = u + q1 / v + q2 / v / v + q3 / v / v / v + q4 / v / v / v / v;
v = K — 2;
double tb = u + q1 / v + q2 / v / v + q3 / v / v / v + q4 / v / v / v / v;
double deltaM = tm * Sm;
double deltaB = tb * S0 * Math. Sqrt (1 — r) / SX / Math. Sqrt (K — 2);
double F = Dos / D0;
double L = (uq — 3) / 6;
double H = 2.0 * (K — 3) * (K * (N — 1) — 1) / (K * N — 4);
double W = u * Math. Sqrt (H + L) / H — (1.0 / (K — 2) — 1.0 / (K * (N — 1) — 1)) * (L + 5.0 / 6 — 2.0 / 3 / H);
double Fkr = Math. Exp (W * 2);
float min = (float) (MY — deltaM — (Betta + deltaB) * MX);
float max = (float) (MY + 1 + (Betta + deltaB) * MX);
float SizeX = (float) pictureBox1. Width / K;
float SizeY = (float) pictureBox1. Height / (max — min);
Bitmap bmp = new Bitmap (pictureBox1. Width, pictureBox1. Height);
Graphics gr = Graphics. FromImage (bmp);
gr. Clear (Color. White);
float gg = 0;
for (int i = 0; i < pictureBox1. Width; i++)
{
float Y = max — (float) (MY + Betta * (i / SizeX — MX) — min);
float minY1 = max — (float) (MY — deltaM + (Betta — deltaB) * (i / SizeX — MX) — min);
float minY2 = max — (float) (MY — deltaM + (Betta + deltaB) * (i / SizeX — MX) — min);
float maxY1 = max — (float) (MY + deltaM + (Betta — deltaB) * (i / SizeX — MX) — min);
float maxY2 = max — (float) (MY + deltaM + (Betta + deltaB) * (i / SizeX — MX) — min);
float minY = minY1;
if (minY2 > minY1) minY = minY2;
float maxY = maxY1;
if (maxY2 < maxY1) maxY = maxY2;
if (i < pictureBox1. Width / 2) gg -= 0.1 °F;
else gg += 0.05 °F;
gr. DrawLine (Pens. LightSkyBlue, i, minY * SizeY+gg, i, maxY * SizeY-gg);
gr. DrawLine (Pens. Black, i, Y * SizeY, i, Y * SizeY + 1);
}
for (int i = 0; i < K; i++)
{
float Y = (float) (max + min — Mid[i]);
gr. FillRectangle (Brushes. Red, i * SizeX, Y * SizeY, 3, 3);
}
gr. FillRectangle (Brushes. Green, (float) MX * SizeX, (max + min — (float) MY) * SizeY, 3, 3);
// ΠΎΡΠΈ
for (int i = 1; i < K; i++)
{
gr. DrawLine (Pens. LightGray, i * SizeX, 0, i * SizeX, pictureBox1. Height);
gr. DrawString (Convert. ToString (i), Font, Brushes. Black, i * SizeX, 0);
}
for (int i = 1; i < 4; i++)
{
gr. DrawLine (Pens. LightGray, 0, i * SizeY * (max — min) / 4, pictureBox1. Width, i * SizeY * (max — min) / 4);
gr. DrawString (Convert. ToString (i * (max — min) / 4 + min), Font, Brushes. Black, 0, i * SizeY * (max — min) / 4);
}
pictureBox1. Image = bmp;
string Result = «Dosn =» + Dos. ToString () + «n» +
«MX =» + MX. ToString () + «n» +
«MY =» + MY. ToString () + «n» +
«DX =» + DX. ToString () + «n» +
«DY =» + DY. ToString () + «n» +
«SX =» + SX. ToString () + «n» +
«SY =» + SY. ToString () + «n» +
«Dm =» + Dm. ToString () + «n» +
«Sm =» + Sm. ToString () + «n» +
«D0 =» + D0. ToString () + «n» +
«s0 =» + S0. ToString () + «n» +
«R =» + r. ToString () + «n» +
«F =» + F. ToString () + «n» +
«FΠΊΡ =» + Fkr. ToString () + «n»;
if (F < Fkr) Result += «ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½Π°n Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ»;
else Result += «ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π΅ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½Π°n Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ»;
label6. Text=Result;
}
}
}
ΠΡΠ²ΠΎΠ΄
ΡΠ΅Π³ΡΠ΅ΡΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π³ΡΠ°ΡΠΈΠΊ ΠΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½, ΠΈΠΌΠ΅ΡΡΠΈΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΊΠΎΠ½ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π΅Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ, ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ Π³ΡΠ°ΡΠΈΠΊ ΠΈ Π΄ΠΎΠ²Π΅ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ.