Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx53 / записка(3).docx
Скачиваний:
39
Добавлен:
01.08.2013
Размер:
452.67 Кб
Скачать

Приложение а. Листинг программного продукта

using System;

using System.Windows.Forms;

namespace proga

{

public partial class Form1 : Form

{

private double a1, a2, b1, b2, d1, d2;

private double A1, A2, B1, B2, C1, C2, D1, D2;

private double eps;

private double x0, y0;

private double xL, yL;

private double gradX, gradY;

private double minX = 1000;

private double minY = 1000;

private double minF = 1000;

private double lyam;

private bool konec = true;

public int iter = 0;

private double k = 0.5;

private string mess = "";

private int dw = 1;

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

a1 = Convert.ToDouble(textBox1.Text);

a2 = Convert.ToDouble(textBox2.Text);

b1 = Convert.ToDouble(textBox4.Text);

b2 = Convert.ToDouble(textBox5.Text);

d1 = Convert.ToDouble(textBox3.Text);

d2 = Convert.ToDouble(textBox6.Text);

A1 = Convert.ToDouble(textBox9.Text);

A2 = Convert.ToDouble(textBox10.Text);

B1 = Convert.ToDouble(textBox11.Text);

B2 = Convert.ToDouble(textBox12.Text);

C1 = Convert.ToDouble(textBox13.Text);

C2 = Convert.ToDouble(textBox14.Text);

D1 = Convert.ToDouble(textBox15.Text);

D2 = Convert.ToDouble(textBox16.Text);

x0 = Convert.ToDouble(textBox17.Text);

y0 = Convert.ToDouble(textBox18.Text);

xL = Convert.ToDouble(textBox17.Text);

yL = Convert.ToDouble(textBox18.Text);

eps = Convert.ToDouble(textBox20.Text);

konec = true;

listBox1.Items.Clear();

dw = 1;

while (konec == true)

{

x0 = xL;

y0 = yL;

grad(x0, y0);

for (double i = 0; i <= 10; i += 0.01)

for (double j = 0; j <= 9; j += 0.01)

{

simplex(i, j);

}

listBox1.Items.Add("Итерация " + Convert.ToString(dw));

listBox1.Items.Add(" Оптимальный план");

listBox1.Items.Add("minX = " + Convert.ToString(minX));

listBox1.Items.Add("minY = " + Convert.ToString(minY));

minF = 1000;

lyam = Math.Round(Math.Abs(lyambda()), 4);

if ((lyam < 1) && (lyam > 0))

{

xL = x0 + (minX - x0)*lyam;

yL = y0 + (minY - y0)*lyam;

}

else

{

double f0;

double f1;

f0 = our_func(x0, y0);

f1 = our_func(minX, minY);

if (f1 > f0)

{

xL = x0;

yL = y0;

}

else

{

xL = minX;

yL = minY;

}

}

xL = Math.Round(xL, 4);

yL = Math.Round(yL, 4);

listBox1.Items.Add(" Новые допустимые значения");

listBox1.Items.Add("X = " + Convert.ToString(xL) + " Y = " + Convert.ToString(yL));

listBox1.Items.Add("f( t + 1 ) = " + Convert.ToString(Math.Round(our_func(xL, yL), 4)));

listBox1.Items.Add("f( t ) = " + Convert.ToString(Math.Round(our_func(x0, y0),4)));

listBox1.Items.Add("| f ( t + 1 ) - f ( t ) | = " + Convert.ToString(Math.Round(Math.Abs(our_func(xL, yL) - our_func(x0, y0)),4)));

if (Math.Abs(our_func(xL, yL) - our_func(x0, y0)) < eps)

{

konec = false;

}

listBox1.Items.Add(" ");

dw++;

}

textBox7.Text = Convert.ToString(xL);

textBox8.Text = Convert.ToString(yL);

}

private double our_func(double y1, double y2)

{

double ret;

ret = a1*y1*y1 + a2*y1 + d1 + b1*y2*y2 + b2*y2 + d2;

return ret;

}

private double lyambda()

{

double ret;

if ((minX == x0) && (minY == y0)) return 0;

ret =

-((a1*2*x0*(minX - x0) + a2*(minX - x0) + 2*b1*y0*(minY - y0) +

b2*(minY - y0))/(2*a1*(minX - x0)*(minX - x0) + 2*b1*(minY - y0)*(minY - y0)));

return ret;

}

private void simplex(double y1, double y2)

{

double minFvrem;

if ((ogr1(y1, y2) == true) && (ogr2(y1, y2) == true) && (ogr3(y1, y2) == true))

{

minFvrem = gradX*y1 + gradY*y2;

if (minFvrem < minF)

{

minF = Math.Round(minFvrem,4);

minX = Math.Round(y1,4);

minY = Math.Round(y2,4);

}

}

}

private void grad(double y1, double y2)

{

gradX = 2*a1*y1 + a2;

gradY = 2*b1*y2 + b2;

}

private bool ogr1(double y1, double y2)

{

if ((-1 * y1 * (B2 - A2) + y2 * (B1 - A1) + B2 * A1 - A2 * B1) <= 0) return true;

else return false;

}

private bool ogr2(double y1, double y2)

{

if ((-1 * y1 * (C2 - B2) + y2 * (C1 - B1) + C2 * B1 - B2 * C1) <= 0) return true;

else return false;

}

private bool ogr3(double y1, double y2)

{

if ((-1 * y1 * (D2 - C2) + y2 * (D1 - C1) + D2 * C1 - C2 * D1) <= 0) return true;

else return false;

}

}

}

Соседние файлы в папке docx53