public partial class Form1 : Form
{
static int m = 19;
double[,] a;
DataTable dtable;
double l1;
double l2 ;
double mu1;
double mu2;
double mu2p;
double del;
double tetha12;
double tetha21;
double beta;
public Form1()
{
InitializeComponent();
reset();
dtable = new DataTable();
dtable.Columns.Add("Вероятность");
dtable.Columns.Add("Значение");
for (int i = 0; i < m+1; i++)
dtable.Rows.Add();
dtable.Rows[0][0] = "P_001";
dtable.Rows[1][0] = "P_101";
dtable.Rows[2][0] = "P_121";
dtable.Rows[3][0] = "P_1*11";
dtable.Rows[4][0] = "P_1*31";
dtable.Rows[5][0] = "P_021";
dtable.Rows[6][0] = "P_011";
dtable.Rows[7][0] = "P_031";
dtable.Rows[8][0] = "P_11*1";
dtable.Rows[9][0] = "P_13*1";
dtable.Rows[10][0] = "P_002";
dtable.Rows[11][0] = "P_102";
dtable.Rows[12][0] = "P_122";
dtable.Rows[13][0] = "P_1*12";
dtable.Rows[14][0] = "P_1*32";
dtable.Rows[15][0] = "P_022";
dtable.Rows[16][0] = "P_012";
dtable.Rows[17][0] = "P_032";
dtable.Rows[18][0] = "P_11*2";
dtable.Rows[19][0] = "P_13*2";
//dataGridView1.RowCount = 19;
//dataGridView1.ColumnCount = 2;
dataGridView1.DataSource = dtable;
lam1TB.Text="0,07";
lam2TB.Text="0,05";
mu1TB.Text="0,3";
mu2TB.Text="0,5";
mu2pTB.Text="0,2";
delTB.Text="0,1";
tetha12TB.Text="0,3";
tetha21TB.Text="0,3";
betaTB.Text = "0,6";
}
void reset()
{
a = new double[m + 1, m + 2];
for (int i = 0; i < m + 1; i++)
for (int j = 0; j < m + 2; j++)
a[i, j] = 0;
for (int j = 0; j < m + 2; j++)
a[m, j] = 1;
}
void populate()
{
l1 = Convert.ToDouble(lam1TB.Text);
l2 = Convert.ToDouble(lam2TB.Text);
mu1 = Convert.ToDouble(mu1TB.Text);
mu2 = Convert.ToDouble(mu2TB.Text);
mu2p = Convert.ToDouble(mu2pTB.Text);
del = Convert.ToDouble(delTB.Text);
tetha12 = Convert.ToDouble(tetha12TB.Text);
tetha21 = Convert.ToDouble(tetha21TB.Text);
beta = Convert.ToDouble(betaTB.Text);
a[0, 0] = -(l1 + (1 - beta) * l2 + beta * l2);
a[1, 1] = -(mu1 + (1 - beta) * l2 + beta * l2 + tetha12);
a[2, 2] = -(del);
a[3, 3] = -(mu1);
a[4, 4] = -(mu1);
a[5, 5] = -(del);
a[6, 6] = -(mu2 + l1);
a[7, 7] = -(mu2p + l1);
a[8, 8] = -(mu2);
a[9, 9] = -(mu2p);
a[10, 10] = -(l1 + (1 - beta) * l2 + beta * l2);
a[11, 11] = -(mu1 + (1 - beta) * l2 + beta * l2);
a[12, 12] = -(del);
a[13, 13] = -(mu1);
a[14, 14] = -(mu1);
a[15, 15] = -(del);
a[16, 16] = -(mu2 + l1 + tetha21);
a[17, 17] = -(mu2p + l1 + tetha21);
a[18, 18] = -(mu2);
//a[19, 19] = -(mu2p);
a[0, 1] = mu1; a[0, 6] = mu2; a[0, 7] = mu2p;
a[1, 0] = l1; a[1, 8] = mu2; a[1, 9] = mu2p;
a[2, 1] = (1 - beta) * l2;
a[3, 1] = beta * l2;
a[4, 2] = del;
a[5, 0] = (1 - beta) * l2;
a[6, 0] = beta * l2; a[6, 3] = mu1; a[6, 16] = tetha21;
a[7, 4] = mu1; a[7, 5] = del; a[7, 17] = tetha21;
a[8, 6] = l1;
a[9, 7] = l1;
a[10, 11] = mu1; a[10, 16] = mu2; a[10, 17] = mu2p;
a[11, 1] = tetha12; a[11, 10] = l1; a[11, 18] = mu2; a[11, 19] = mu2p;
a[12, 11] = (1 - beta) * l2;
a[13, 11] = beta * l2;
a[14, 12] = del;
a[15, 10] = (1 - beta) * l2;
a[16, 10] = beta * l2; a[16, 13] = mu1;
a[17, 14] = mu1; a[17, 15] = del;
a[18, 16] = l1;
//a[19,17] = l1;
}
private void button1_Click(object sender, EventArgs e)
{
reset();
populate();
GaussSLAU GSLAU = new GaussSLAU();
GSLAU.m = m;
GSLAU.solve(a);
double kg = a[0, m + 1] + a[10, m + 1] + a[6, m + 1] + a[7, m + 1] + a[5, m + 1] + a[15, m + 1] + a[11, m + 1];
KgTB.Text = kg.ToString();
double ppot = a[6, m + 1] * (mu2 / (l1 + mu2)) + a[7, m + 1] * (mu2p / (l1 + mu2p)) + a[11, m + 1] * (mu1 / (l2 + mu1)) +
a[16, m + 1] * (mu2 / (l1 + mu2 + tetha21)) + a[17, m + 1] * (mu2p / (l1 + mu2p+tetha21)) +
a[11, m + 1] * (mu1 / (l2 + mu1 + tetha12)) + a[3, m + 1] + a[4, m + 1] + a[8, m + 1] + a[9, m + 1] +
a[13, m + 1] + a[14, m + 1] + a[18, m + 1] + a[19, m + 1];
PpotTB.Text = ppot.ToString();
dtable.Rows[0][1] = a[0,m+1];
dtable.Rows[1][1] = a[1,m+1];
dtable.Rows[2][1] = a[2,m+1];
dtable.Rows[3][1] = a[3,m+1];
dtable.Rows[4][1] = a[4,m+1];
dtable.Rows[5][1] = a[5,m+1];
dtable.Rows[6][1] = a[6,m+1];
dtable.Rows[7][1] = a[7,m+1];
dtable.Rows[8][1] = a[8,m+1];
dtable.Rows[9][1] = a[9,m+1];
dtable.Rows[10][1] = a[10,m+1];
dtable.Rows[11][1] = a[11,m+1];
dtable.Rows[12][1] = a[12,m+1];
dtable.Rows[13][1] = a[13,m+1];
dtable.Rows[14][1] = a[14,m+1];
dtable.Rows[15][1] = a[15,m+1];
dtable.Rows[16][1] = a[16,m+1];
dtable.Rows[17][1] = a[17,m+1];
dtable.Rows[18][1] = a[18,m+1];
dtable.Rows[19][1] = a[19, m + 1];
}
}
class GaussSLAU
{
public int m;
public void solve(double[,] a)
{
int i, j, k;
for (k = 0; k <= m - 1; k++)
{
for (j = 0; j <= m + 1; j++)
if (k != j) a[k, j] /= a[k, k];
a[k, k] = 1;
for (i = k + 1; i <= m; i++)
{
for (j = 0; j <= m + 1; j++)
if (k != j) a[i, j] -= a[i, k] * a[k, j];
a[i, k] = 0;
}
}
k = m;
for (j = 0; j <= m + 1; j++)
if (k != j) a[k, j] /= a[k, k];
a[k, k] = 1;
for (k = m; k >= 1; k--)
{
for (i = k - 1; i >= 0; i--)
{
for (j = 0; j <= m + 1; j++)
if (j != k) a[i, j] -= a[i, k] * a[k, j];
a[i, k] = 0;
}
}
}
}