- •«Разработка программного комплекса решения математической задачи численными методами»
- •5. Библиографический список.............................…………………….……..17
- •1. Описание программы
- •- Процессор Intel(r) Core(tm) 2 Duo, 2200 мГц (14 X 133)
- •1.6. Входные данные
- •Описание применения
- •Руководство программиста
- •Описание контрольного примера
- •Библиографический список
Описание контрольного примера
«Программа оптимизации функции одной переменной методом дихотомии», область применения которой – любая область, где требуется оптимизировать функции одной переменной, предназначена для нахождения минимального значения функции методом дихотомии.
Цель проведения испытания программы – проверка её работоспособности и отказоустойчивости. Во время тестирования проверяется способность программы работать с различными наборами данных и корректно обрабатывать ошибки ввода, а также действия пользователя приводящие к ошибкам вычисления.
Результаты тестирования наглядно показаны на изображениях.
Уравнение: x^5+2*x^4
Интервал: [-1;8]
Рис.4
Уравнение: x^5+2*x^4-x^2
Интервал: [-10;8]
Рис.5
Уравнение: -x
Интервал: [-1;100]
Рис.6
Библиографический список
Лабор В.В. Си++: Создание приложений для Windows. – Мн.:Харвест, 2003. – 384 с.
Самарский А.А., Гулин А.В. Численные методы: Учеб. пособие для вузов.– М.: Наука. Гл. ред. физ-мат. лит., 1989. – 432 с.
Симонович С.В., Евсеев Г.А Занимательное программирование: C++ – М.: «Развитие», 2003 – 368 с.
Кондратьева С.Д. Введение в структуры данных: лекции и упражнения по курсу. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2000 – 376 с.
Трофимова И.П. Системы обработки и хранения информации: Учеб. для вузов по спец. «Автоматизир. системы обраб. информ и упр.» - М.: Высш. шк., 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();
}
}
}