Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа Вариант метод дихотомии.docx
Скачиваний:
26
Добавлен:
20.06.2014
Размер:
257.16 Кб
Скачать
  1. Описание контрольного примера

«Программа оптимизации функции одной переменной методом дихотомии», область применения которой – любая область, где требуется оптимизировать функции одной переменной, предназначена для нахождения минимального значения функции методом дихотомии.

Цель проведения испытания программы – проверка её работоспособности и отказоустойчивости. Во время тестирования проверяется способность программы работать с различными наборами данных и корректно обрабатывать ошибки ввода, а также действия пользователя приводящие к ошибкам вычисления.

Результаты тестирования наглядно показаны на изображениях.

Уравнение: x^5+2*x^4

Интервал: [-1;8]

Рис.4

Уравнение: x^5+2*x^4-x^2

Интервал: [-10;8]

Рис.5

Уравнение: -x

Интервал: [-1;100]

Рис.6

  1. Библиографический список

  1. Лабор В.В. Си++: Создание приложений для Windows. – Мн.:Харвест, 2003. – 384 с.

  2. Самарский А.А., Гулин А.В. Численные методы: Учеб. пособие для вузов.– М.: Наука. Гл. ред. физ-мат. лит., 1989. – 432 с.

  3. Симонович С.В., Евсеев Г.А Занимательное программирование: C++ – М.: «Развитие», 2003 – 368 с.

  4. Кондратьева С.Д. Введение в структуры данных: лекции и упражнения по курсу. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2000 – 376 с.

  5. Трофимова И.П. Системы обработки и хранения информации: Учеб. для вузов по спец. «Автоматизир. системы обраб. информ и упр.» - М.: Высш. шк., 1989 – 191 с.

Приложение 1

Листинг программы

using System;

using System.Collections.Generic;

using System.Windows.Forms;

namespace Дихотомия

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

Application.Run(new thanks());

}

}

}

///////////////////////////////////////////////////////////////////

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Дихотомия

{

public partial class Form1 : Form

{

double a = 0, b = 0, E = 0;

double[] q = new double[6];

public Form1()

{

InitializeComponent();

textBox1.Text = "0";

textBox2.Text = "0";

textBox3.Text = "0";

textBox4.Text = "0";

textBox5.Text = "0";

textBox6.Text = "0";

textBox7.Text = "-1";

textBox8.Text = "1";

textBox9.Text = "0,001";

ToolTip tip = new ToolTip();

tip.SetToolTip(textBox1, "Введите коэфициент при x^5");

tip.SetToolTip(textBox2, "Введите коэфициент при x^4");

tip.SetToolTip(textBox3, "Введите коэфициент при x^3");

tip.SetToolTip(textBox4, "Введите коэфициент при x^2");

tip.SetToolTip(textBox5, "Введите коэфициент при x^1");

tip.SetToolTip(textBox6, "Введите коэфициент при x^0");

tip.SetToolTip(textBox7, "Введите левую гарницу поиска");

tip.SetToolTip(textBox8, "Введите правую границу поиска");

tip.SetToolTip(textBox9, "Введите точность поиска");

tip.SetToolTip(textBox10, "Результат");

tip.SetToolTip(button1, "Нажмите для получения результата");

tip.SetToolTip(button2, "Нажмите для сброса");

}

private void button1_Click(object sender, EventArgs e)

{

textBox10.Text = "";

bool flag = true;

int i = 0;

try

{

q[i] = Convert.ToDouble(textBox6.Text);

i++;

}

catch

{

textBox6.Text = "";

flag = false;

}

try

{

q[i] = Convert.ToDouble(textBox5.Text);

i++;

}

catch

{

textBox5.Text = "";

flag = false;

}

try

{

q[i] = Convert.ToDouble(textBox4.Text);

i++;

}

catch

{

textBox4.Text = "";

flag = false;

}

try

{

q[i] = Convert.ToDouble(textBox3.Text);

i++;

}

catch

{

textBox3.Text = "";

flag = false;

}

try

{

q[i] = Convert.ToDouble(textBox2.Text);

i++;

}

catch

{

textBox2.Text = "";

flag = false;

}

try

{

q[i] = Convert.ToDouble(textBox1.Text);

}

catch

{

textBox1.Text = "";

flag = false;

}

if (flag == false)

{

MessageBox.Show("коэффициенты введены некорректно, обратите внимание, что вместо точки должна стоять запятая");

return;

}

for (i = 0; i < 6; i++)

{

if (q[i] != 0)

{

flag = false;

break;

}

}

if (flag == true)

{

MessageBox.Show("хотя бы один из коэффициентов не должен быть равен нулю");

return;

}

flag = true;

try

{

a = Convert.ToDouble(textBox7.Text);

}

catch

{

textBox7.Text = "";

flag = false;

}

try

{

b = Convert.ToDouble(textBox8.Text);

}

catch

{

textBox8.Text = "";

flag = false;

}

if (flag == false)

{

MessageBox.Show("интервал некорректен");

return;

}

if (a >= b)

{

MessageBox.Show("интервал введен неверно, левое значение должно быть меньше правого");

return;

}

try

{

E = Convert.ToDouble(textBox9.Text);

}

catch

{

textBox9.Text = "";

flag = false;

}

if (flag == false)

{

MessageBox.Show("точность некорректна");

return;

}

if (E < 0.0000001)

{

textBox9.Text = "";

MessageBox.Show("Точность введена неверно, должно быть больше 0,0000001");

return;

}

double x1, x2, y1 = 0, y2 = 0;

x1 = a + Math.Abs(b - a) / 4;

x2 = b - Math.Abs(b - a) / 4;

for (i = 0; i < 6; i++) y1 = y1 + Math.Pow(x1, i) * q[i];

for (i = 0; i < 6; i++) y2 = y2 + Math.Pow(x2, i) * q[i];

do

{

if (y1 <= y2)

{

b = x2;

x1 = a + Math.Abs(b - a) / 4;

x2 = b - Math.Abs(b - a) / 4;

y1 = 0; y2 = 0;

for (i = 0; i < 6; i++) y1 = y1 + Math.Pow(x1, i) * q[i];

for (i = 0; i < 6; i++) y2 = y2 + Math.Pow(x2, i) * q[i];

}

else

{

a = x1;

x1 = a + Math.Abs(b - a) / 4;

x2 = b - Math.Abs(b - a) / 4;

y1 = 0; y2 = 0;

for (i = 0; i < 6; i++) y1 = y1 + Math.Pow(x1, i) * q[i];

for (i = 0; i < 6; i++) y2 = y2 + Math.Pow(x2, i) * q[i];

}

}

while (Math.Abs(b - a) > E);

textBox10.Text = (Convert.ToString((a + b) / 2));

}

private void button2_Click(object sender, EventArgs e)

{

textBox1.Text = "0";

textBox2.Text = "0";

textBox3.Text = "0";

textBox4.Text = "0";

textBox5.Text = "0";

textBox6.Text = "0";

textBox7.Text = "-1";

textBox8.Text = "1";

textBox9.Text = "0,001";

textBox10.Text = "";

}

private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

{

about_programm about = new about_programm();

about.ShowDialog();

}

private void справкаToolStripMenuItem_Click(object sender, EventArgs e)

{

help help = new help();

help.ShowDialog();

}

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

Close();

}

}

}

///////////////////////////////////////////////////////////////////

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Дихотомия

{

public partial class about_programm : Form

{

public about_programm()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

}

}

///////////////////////////////////////////////////////////////////

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Дихотомия

{

public partial class help : Form

{

public help()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

}

}

///////////////////////////////////////////////////////////////////

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Дихотомия

{

public partial class thanks : Form

{

public thanks()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

}

}