Задание. - Кафедра ПО

advertisement
МИНОБРНАУКИ РФ
Федеральное Государственное бюджетное
учреждение высшего профессионального образования.
Кафедра: Программная инженерия
Лабораторная работа №7
Вариант №2
Выполнил студент 2 курса
ПИН-1206 Волнухин Виктор
Проверил: Грязнов
Евгений Николаевич
Тверь 2013
Задание.
1. Напишите программу, реализующую интерполяцию функции кусочно-линейным методом.
2. Напишите программу, реализующую интерполяцию функции полиномом Ньютона (по
вариантам: 1 вариант – полином Ньютона для интерполирования вперед, 2 вариант –
полином Ньютона для интерполирования назад).
Замечания по реализации:
1. В качестве интерполяционной сетки использовать следующую таблицу:
х
0
1
2
3
4
5
F(x)
0
0,8415
0,9093
0,1411
-0,7568
-0,9589
6
-0,2794
2. Входным параметром программы должно быть произвольное значение аргумента,
расположенное между левой и правой границей сетки интерполяции, выходными
данными – рассчитанное значение функции для этого аргумента.
Теория:
Лине́йная интерполя́ция —
интерполяция алгебраическим двучленом P1(x) = ax + b функции f, заданной
в двух точках x0 и x1 отрезка [a, b]. В случае, если заданы значения в
нескольких точках, функция заменяется кусочно-линейной функцией.
Геометрическая интерпретация
Геометрически это означает замену графика функции прямой, проходящей
через точки
и
.
Уравнение такой прямой имеет вид:
отсюда для
Это и есть формула линейной интерполяции, при этом
где
— погрешность формулы:
Справедлива оценка
Интерполяционный полином Ньютона имеет вид:
.
Легко видеть, что полином (2) полностью удовлетворяет требованиям
поставленной задачи. Действительно, во-первых, степень полинома
выше , во-вторых,
и
Заметим, что при
функции :
,
.
формула (2) превращается в ряд Тейлора для
.
(2)
не
Для практического использования интерполяционную формулу Ньютона
(2) обычно записывают в несколько преобразованном виде. Для этого введём
новую переменную
,
по формуле
; тогда получим:
(3)
где
представляет собой число шагов, необходимых для достижения
точки , исходя из точки
. Это и есть окончательный
вид интерполяционной формулы Ньютона.
Формулу (3) выгодно использовать для интерполирования
функции
в окрестности начального значения
абсолютной величине.
, где
мало по
Если дана неограниченная таблица значений функции , то число в
интерполяционной формуле (3) может быть любым. Практически в этом
случае число
выбирают так, чтобы разность
была постоянной с
заданной степенью точности. За начальное значение
можно принимать
любое табличное значение аргумента .
Если таблица значений функции конечна, то число ограничено, а
именно: не может быть больше числа значений функции ,
уменьшенного на единицу.
Заметим, что при применении первой интерполяционной формулы
Ньютона удобно пользоваться горизонтальной таблицей разностей, так как
тогда нужные значения разностей функции находятся в соответствующей
горизонтальной строке таблицы.
Код программы:
Основная часть:
private void button1_Click(object sender, EventArgs e)
{
try
{
// Значение x
double x = Convert.ToDouble(ValueX.Text);
// Начало отрезка
int X1 = Convert.ToInt16(ValueX1.Text);
// Конец отрезка
int X2 = Convert.ToInt16(ValueX2.Text);
if (X1 > X2)
{
MessageBox.Show("Начальный отрезок не может быть больше
конечного", "Ошибка!");
return;
}
if (x > 6 && x < 0)
{
MessageBox.Show("x выходит за предел допустимых
значений", "Ошибка!");
return;
}
piecewise_linear f = new piecewise_linear(x, X1, X2);
ValueY1.Text = f.Find().ToString();
}
catch
{
MessageBox.Show("Неверный формат.", "Ошибка!");
}
try
{
// Значение x
double x = Convert.ToDouble(Xvalue.Text);
// Точность exp
double h = Convert.ToDouble(ValueExp.Text);
if (h < 0)
{
MessageBox.Show("Шаг не может быть отрицательным",
"Ошибка!");
return;
}
Polinom_of_Newton f = new Polinom_of_Newton(h, x);
ValueY2.Text = f.Find().ToString();
}
catch
{
MessageBox.Show("Неверный формат.", "Ошибка!");
}
}
Класс, отвечающий за кусочно-линейный метод:
class piecewise_linear
{
private double fx1, fx2;
private double y;
private double x;
private int X1, X2;
public piecewise_linear(double x, int X1, int X2)
{
this.x = x;
this.X1 = X1;
this.X2 = X2;
}
/// <summary>
/// метод реализации интерполяции функции
/// </summary>
/// <returns>Значение функции в точке x</returns>
public double Find()
{
switch (X1)
{
case 0:
{
fx1 = 0; break;
}
case 1:
{
fx1 = 0.8415; break;
}
case 2:
{
fx1 = 0.9093; break;
}
case 3:
{
fx1 = 0.1411; break;
}
case 4:
{
fx1 = -0.7568; break;
}
case 5:
{
fx1 = -0.9589; break;
}
case 6:
{
fx1 = -0.2794; break;
}
}
switch (X2)
{
case 0:
{
fx2 = 0; break;
}
case 1:
{
fx2 = 0.8415; break;
}
case 2:
{
fx1 = 0.9093; break;
}
case 3:
{
fx2 = 0.1411; break;
}
case 4:
{
fx2 = -0.7568; break;
}
case 5:
{
fx2 = -0.9589; break;
}
case 6:
{
fx2 = -0.2794; break;
}
}
y = fx1 + (x - X1) * (fx2 - fx1) / (X2 - X1);
return y;
}
Класс, отвечающий за полином Ньютона:
/// <summary>
/// Класс интерполяции функции с помощью полинома Ньютона (1 Вариант)
/// </summary>
class Polinom_of_Newton
{
private double y, t;
private double x, h;
public Polinom_of_Newton(double h, double x)
{
this.x = x;
this.h = h;
}
/// <summary>
/// метод реализации интерполяции функции
/// </summary>
/// <returns>Значение функции в точке x</returns>
public double Find()
{
t = (x - 0) / h;
y = 0 + 0.8415 * t - 0.38685 * t * (t - 1) - 0.0105 * t * (t - 1)
* (t - 2);
return y;
}
}
Пользовательский интерфейс:
Оглавление
Задание. .................................................................................................................................................... 2
Теория: ........................................................................................................................................3
Код программы: .........................................................................................................................5
Пользовательский интерфейс: ..................................................................................................8
Download