mathmethods_4x

advertisement
МИНОБРНАУКИ РФ
Федеральное Государственное бюджетное
учреждение высшего профессионального образования.
Кафедра: Программная инженерия
Лабораторная работа №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;
}
}
Пользовательский интерфейс:
Download