МИНОБРНАУКИ РФ Федеральное Государственное бюджетное учреждение высшего профессионального образования. Кафедра: Программная инженерия Лабораторная работа №4 Вариант №2 Выполнил студент 2 курса ГРУППЫ ПИН-1206 Корнилов Владимир Проверил: Грязнов Евгений Николаевич Тверь 2013 Задание. 1. Выполните отделение корней уравнения, соответствующего вашему варианту, любым методом: 1. x – sin(x) – 0.25 = 0 2. ln(x) – (x-5)2 = 0 3. sin(x-0.3) - x3 = 0 2. Выберете точку приближения и/или отрезок содержащий корень уравнения. 3. Напишите программы для нахождения приближенного значения корня уравнения на выбранном отрезке следующими методами: a) методом дихотомии b) методом Ньютона c) методом секущих 4. Для каждого метода составьте таблицу значений: номер шага, приближенное значение корня, значение функции. Сравните полученные приближенные значения с точным значением корня функции на заданном отрезке. Сделайте выводы. Теория: Метод дихотомии: Перед применением метода для поиска корней функции необходимо отделить корни одним из известных способов, например, графическим методом. Отделение корней необходимо в случае, если неизвестно на каком отрезке нужно искать корень. Будем считать, что корень функции отделён на отрезке . Задача заключается в том, чтобы найти и уточнить этот корень методом половинного деления. Другими словами, требуется найти приближённое значение корня с заданной точностью . Пусть функция непрерывна на отрезке и уравнения , - единственный корень . (Мы не рассматриваем случай, когда корней на отрезке несколько, то есть более одного. В качестве можно взять и другое достаточно малое положительное число, например, .) Поделим отрезок отрезка . пополам. Получим точку Если , то корень найден ( ). Если нет, то из двух полученных отрезков и два один такой, что , если Новый отрезок отрезка надо выбрать , то есть , если и или . делим пополам. Получаем середину этого и так далее. Для того, чтобы найти приближённое значение корня с точностью до необходимо остановить процесс половинного деления на таком шаге котором и вычислить . Тогда можно взять , , на . Метод Ньютона 1. Задается начальное приближение . 2. Пока не выполнено условие остановки, в качестве которого можно взять или (то есть погрешность в нужных пределах), вычисляют новое приближение: Метод секущих . . Построение функции 2 - ln(x) – (x-5)2 Код программы: Основная часть: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { double a = Convert.ToDouble(textBox1.Text); double b = Convert.ToDouble(textBox2.Text); int n = Convert.ToInt32(textBox3.Text); double x = 0; // Метод дихотомии Urav c = new Urav(); double f = c.Dihotomia(a, b, n, x); label1.Text = f.ToString(); label4.Text = c.Formula(f).ToString(); // Метод Ньютона double y = c.Newton(a, n, x); label2.Text = y.ToString(); label5.Text = c.Formula(y).ToString(); // Метод секущих double h = c.Secant(a, b, x, n); label3.Text = h.ToString(); label6.Text = c.Formula(h).ToString(); } catch (Exception ex) { MessageBox.Show("Ошибка в строке ввода" + ex.ToString()); } } } Класс, отвечающий за решение интеграла разными методами: class Urav { public double Formula(double x) //формула { double y =x-5; return y; } public double Formula_derivative(double x) //производная формулы { double y = 10.0 + (1.0 / x) - 2.0 * x; return y; } // Метод дихотомии public double Dihotomia(double a, double b, int n, double x) { double ai, bi, c; ai = a; bi = b; for (int i = 1; i <= n; i++) { c = (ai + bi) / 2; if (Formula(c) == 0) { x = c; } if (Formula(ai) * Formula(c) < 0) bi = c; else ai = c; x = (ai + bi) / 2; } return x; } // Метод Ньютона public double Newton(double a, int n, double x) { x = a; for (int i = 1; i <= n; i++) { x = x - Formula(x) / Formula_derivative(x); } return x; } //метод секущих public double Secant(double a, double b, double x, int n) { double xprev, k; xprev = a; x = b; for (int i = 0; i <= n - 1; i++) { k = x; x = x - Formula(x) * (x - xprev) / (Formula(x) - Formula(xprev)); xprev = k; } return x; } } Пользовательский интерфейс: