Метод сопряженных направлений
Курсовой проект - Математика и статистика
Другие курсовые по предмету Математика и статистика
{();
}void Form1_Load(object sender, EventArgs e)
{
}int Rang_matrici(double [,]Matrica)
{(Matrica[1,0] != 0)(int i = 1; i < 2; i++)
{mnojitel = (Matrica[0, 0] / Matrica[i, 0]) * (-1);(int j = 0; j < 2; j++)
{[i, j] = Matrica[i,j] * mnojitel + Matrica[i-1, j];
}
}k;y = 0;(int i = 0; i < 2; i++)
{= 0;(int j = 0; j < 2; j++)
{(Matrica[i, j] == 0)++;
}(k == 2)++;
}rang = 2 - y;rang;
}double Function_for_search_extremum(double[] y, double[] u, double t)
{Fx = Math.Pow((y[0] + t * u[0]), 3) + Math.Pow((y[1] + t * u[1]), 2) - 3 * (y[0] + t * u[0]) - 2 * (y[1] + t * u[1]) + 2;Fx;
}double Function(double x1, double x2)
{Math.Pow(x1, 3) + Math.Pow(x2, 2) - 3 * x1 - 2 * x2 + 2;
}void button1_Click(object sender, EventArgs e)
{(checkBox1.Checked)
{[0] = 8;[1] = 9;= 0.1;[0] = 1;[1] = 0;[0] = 0;[1] = 1;[0] = d2[0];[1] = d2[1];.Text = x[0].ToString();.Text = x[1].ToString();.Text = E.ToString();x0.Text = d1[0].ToString();x1.Text = d1[1].ToString();x0.Text = d2[0].ToString();x1.Text = d2[1].ToString();
}
{[0] = Convert.ToDouble(textX0.Text);[1] = Convert.ToDouble(textX1.Text);= Convert.ToDouble(textE.Text);[0] = Convert.ToDouble(textD1x0.Text);[1] = Convert.ToDouble(textD1x1.Text);[0] = Convert.ToDouble(textD2x0.Text);[1] = Convert.ToDouble(textD2x1.Text);[0] = d2[0];[1] = d2[1];
}.Text = "";t=0;= 0;[0] = x[0];[1] = x[1];[0] = y[0];[1] = y[1];= 0;= 0;(E >= 0.1)
{(j==0).Text += "\t\t\tИтерация " + Convert.ToString(j + 1) + "\n\n\tШаг 1. \nНачальная точка х = (" + x[0].ToString() + " ; " + x[1].ToString() + "), ? = " + E.ToString() + "\nd1 = (" + d1[0].ToString() + ";" + d1[1].ToString() + ") d2 = (" + d2[0].ToString() + ";" + d2[1].ToString() + ") d0 = dn\ni = " + i.ToString() + " k=" + k.ToString() + " y = x = (" + x[0].ToString() + ";" + x[1].ToString() + ")\n";_2:(j!=0).Text += "\n\t\t\tИтерация " + Convert.ToString(j + 1) + "\n";(checkBox1.Checked)
{(j)
{0: t = -8; break;1: t = -7; break;2: t = 0; break;3: t = 0; break;4: t = 0; break;
}(i == 0)
{[0] = y[0] + t * d0[0];[1] = y[1] + t * d0[1];[0] = y[0];[1] = y[1];
}(i == 2)
{[0] = y[0] + t * d2[0];[1] = y[1] + t * d2[1];
}
{[0] = y[0] + t * d1[0];[1] = y[1] + t * d1[1];
}
}
{(i == 0)
{= extremum(d0);[0] = y[0] + t * d0[0];[1] = y[1] + t * d0[1];
}
(i == 2)
{= extremum(d2);[0] = y[0] + t * d2[0];[1] = y[1] + t * d2[1];
}
{= extremum(d1);[0] = y[0] + t * d1[0];[1] = y[1] + t * d1[1];[0] = y[0];[1] = y[1];
}
}++;.Text += "\n\tШаг 2.\n y = (" + y[0].ToString() + " ; " + y[1].ToString() + ")\tt" + i.ToString() + " = " + t.ToString() + "\n";
//Шаг 3.Text += "\n\tШаг 3.\n";(i < n - 1)
{++;.Text += "Т.к. i=" + Convert.ToString(i - 1) + "< n-1 = 1, положим i = i+1 = "+Convert.ToString(i+1);step_2;
}(i == n - 1)
{.Text += "y2=(" + y[0].ToString() + ";" + y[1].ToString() + ")\ty0=(" + y0[0].ToString() + ";" + y0[1].ToString() + ")";(y[0] == y0[0] && y[1] == y0[1])
{
//то поиск завершить.Text += "\ni = "+i.ToString()+"\ni=n-1\ny2=y0\nПоиск завершен х* = (" + y[0].ToString() + ";" + y[1].ToString() + ")\n\n\tВсего итераций " + j.ToString();
}
{.Text += "\ni = "+i.ToString()+"\ni=n-1\ny2 != y0\n Положим i = i+1 = 2 и перейдем к шагу 2\n";++;step_2;
}
}
{(i == n)
{.Text += "\ni = " + i.ToString() + "\ti = n";.Text += "\ny3 = (" + y[0].ToString() + ";" + y[1].ToString() + ")\ty1 = (" + y1[0].ToString() + ";" + y1[1].ToString() + ")";(y[0] == y1[0] && y[1] == y1[1])
{
//то поиск завершить.Text += "y3 = y1\nПоиск завершен х* = y3 = (" + y[0].ToString() + ";" + y[1].ToString() + ")\n\n\tВсего итераций " + j.ToString();
}
{.Text += "\ny3 !=y1\nПерейдем к шагу 4 для построения сопряженного направления";
//step_4:.Text += "\n\n\tШаг 4. \n";_st[0] = x[0];_st[1] = x[1];[0] = y[0];[1] = y[1];.Text += "k = " + k.ToString() + " Положим x_k+1 = y = (" + x[0].ToString() + ";" + x[1].ToString() + ") и проверим условие окончания\n";
(Math.Sqrt(Math.Pow((x_st[0] - x[0]), 2) + Math.Pow((x_st[1] - x[1]), 2)) < E)
{
//то поиск завершить.Text += "||x_k+1 - x_k|| < ?\n||(" + x[0].ToString() + ";" + x[1].ToString() + ") - (" + x_st[0].ToString() + ";" + x_st[1].ToString() + ")|| = " + Math.Sqrt(Math.Pow((x_st[0] - x[0]), 2) + Math.Pow((x_st[1] - x[1]), 2)) + " < " + E.ToString();.Text += "\nПоиск завершен х* = x_k+1 = (" + x[0].ToString() + ";" + x[1].ToString() + ")\n\n\tВсего итераций " + j.ToString();
}
{.Text += "||x_k+1 - x_k|| >= ?="+E.ToString();_n[0]=y[0]-y1[0];_n[1]=y[1]-y1[1];_n[0]=d2_n[0];_n[1]=d2_n[1];_n[0]=d2[0];_n[1]=d2[1];.Text+="\n_d0=_dn=y3-y1=("+y[0].ToString()+";"+y[1].ToString()+")-("+y1[0].ToString()+";"+y1[1].ToString()+")=("+d2_n[0].ToString()+";"+d2_n[1].ToString()+")\n";.Text+="\n_d1=d2=("+d1_n[0].ToString()+";"+d1_n[1].ToString()+")";[0,0]=d1_n[0];[0,1]=d2_n[0];[1,0]=d1_n[1];[1,1]=d2_n[1];(Rang_matrici(Matrica)==n)">\n||(" + x[0].ToString() + ";" + x[1].ToString() + ") - (" + x_st[0].ToString() + ";" + x_st[1].ToString() + ")|| = " + Math.Sqrt(Math.Pow((x_st[0] - x[0]), 2) + Math.Pow((x_st[1] - x[1]), 2)) + " >= " + E.ToString();_n[0] = y[0] - y1[0];_n[1] = y[1] - y1[1];_n[0] = d2_n[0];_n[1] = d2_n[1];_n[0] = d2[0];_n[1] = d2[1];.Text += "\nПоложим новое направление _d0 = _dn = y3-y1 = (" + y[0].ToString() + ";" + y[1].ToString() + ") - (" + y1[0].ToString() + ";" + y1[1].ToString() + ") = (" + d2_n[0].ToString() + ";" + d2_n[1].ToString() + ")\n";.Text += "\nИсключим старое направление _d1 = d2 = (" + d1_n[0].ToString() + ";" + d1_n[1].ToString() + ")";[0, 0] = d1_n[0];[0, 1] = d2_n[0];[1, 0] = d1_n[1];[1, 1] = d2_n[1];(Rang_matrici(Matrica) == n)
{.Text += "Т.к. rang(" + d1_n[0].ToString() + ", " + d1_n[1].ToString() + " ; " + d2_n[0].ToString() + ", " + d2_n[1].ToString() + ")=" + n.ToString() + " новая система направлений линейно независима\n";[0] = d0_n[0];[1] = d0_n[1];[0] = d1_n[0];[1] = d1_n[1];[0] = d2_n[0];[1] = d2_n[1];++;= 0;[0] = x[0];[1] = x[1];[0] = y[0];[1] = y[1];.Text += "Положим \n\td1 = _d1 = (" + d1_n[0].ToString() + ";" + d1_n[1].ToString() + ")\n\t d2 = _d2 = (" + d2_n[0].ToString() + ";" + d2_n[1].ToString() + ")\n\tk=" + k.ToString() + " i=" + i.ToString();.Text += "\ty0=(" + y[0].ToString() + ";" + y[1].ToString() + ")\n";step_2;
}(Rang_matrici(Matrica) < n)
{.Text += "Т.к. rang(" + d1_n[0].ToString() + ", " + d1_n[1].ToString() + " ; " + d2_n[0].ToString() + ", " + d2_n[1].ToString() + ")=" + Rang_matrici(Matrica) + " < " + n.ToString() + " новая система направлений линейно зависима\n";[0] = x[0];[1] = x[1];[0] = y[0];[1] = y[1];++;= 0;.Text += "Положим: k=" + k.ToString() + " i=" + i.ToString() + " y0 = (" + y[0].ToString() + ";" + y[1].ToString() + ") и перейдем к шагу 2\n";step_2;
}
}
}
}
}
}.Show("Введите е >=0,1","Просьба!");
}double extremum(double[]u) // u[] это d[]
{a = -2 * y[0];b = 2 * y[0];eps = (b-a)/50;l = (b-a)/10;g = 0; //счетчикs; //yw; //z_3: s = (a + b - eps) / 2;= (a + b + eps) / 2;(Function_for_search_extremum(y, u, s) <= Function_for_search_extremum(y, u, w))
{= w;
}
{= s;
}(Math.Abs(b - a) <= l)(a + b) / 2;
{++;step_3;
}
}void button2_Click(object sender, EventArgs e)
{.Clear();.Clear();.Cle