Метод сопряженных направлений

Курсовой проект - Математика и статистика

Другие курсовые по предмету Математика и статистика

{();

}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