МИНОБРНАУКИ РФ

Федеральное Государственное бюджетное

учреждение высшего профессионального образования.

Кафедра: Программная инженерия

Лабораторная работа №7

Вариант №2

Выполнил студент 2 курса

ГРУППЫ ПИН-1206

Корнилов Владимир

Проверил: Грязнов

Евгений Николаевич

Тверь 2013

Задание.

1.  Напишите программу, реализующую интерполяцию функции кусочно-линейным методом.

2.  Напишите программу, реализующую интерполяцию функции полиномом Ньютона (по вариантам: 1 вариант – полином Ньютона для интерполирования вперед, 2 вариант – полином Ньютона для интерполирования назад).

Замечания по реализации:

1.  В качестве интерполяционной сетки использовать следующую таблицу:

х

0

1

2

3

4

5

6

F(x)

0

0,8415

0,9093

0,1411

-0,7568

-0,9589

-0,2794

2.  Входным параметром программы должно быть произвольное значение аргумента, расположенное между левой и правой границей сетки интерполяции, выходными данными – рассчитанное значение функции для этого аргумента.

Теория:

Кусочно-линейная функция 

— функция, определённая на множестве вещественных чисел, линейная на каждом из интервалов, составляющих область определения.

Пусть заданы x_1<x_2<\ldots<x_n — точки смены формул.

Как и все кусочно-заданные функции, кусочно-линейную функцию обычно задают на каждом из интервалов (-\infty; x_1), (x_1; x_2); \ldots (x_n;+\infty) отдельной формулой. Записывают это в виде: f(x)=\begin{cases} k_0 x+b_0,\quad x<x_1\\ k_1 x+b_1,\quad x_1<x<x_2\\ \cdots\\ k_n x+b_n,\quad x_n<x\end{cases}

Если к тому же выполнены условия согласования

a_ix_i+b_i=a_{i+1}x_i+b_{i+1}=f(x_i) при i=1,2,\ldots,n,

НЕ нашли? Не то? Что вы ищете?

то кусочно-линейная функция будет непрерывной. Непрерывная кусочно-линейная функция называется также линейным сплайном.

Интерполяционные формулы Ньютона 

— формулы вычислительной математики, применяющиеся для полиномиального интерполирования.

Если узлы интерполяции равноотстоящие и упорядочены по величине, так что x_{i+1}-x_i=h=\mathrm{const}, то есть x_i=x_0+ih, то интерполяционный многочлен можно записать в форме Ньютона.

Интерполяционные полиномы в форме Ньютона удобно использовать, если точка интерполирования находится вблизи начала (прямая формула Ньютона) или конца таблицы (обратная формула Ньютона).

В случае равноудаленных центров интерполяции, находящихся на единичном расстоянии друг от друга, справедлива формула:

P_n(x)=\sum_{m=0}^{n} C_x^m \sum_{k=0}^m(-1)^{m-k}\,C_m^k\,f(k)

где C_x^m — обобщенные на область действительных чисел биномиальные коэффициенты.

Код программы:

Основная часть:

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

y1.Visible = false;

label2.Visible = false;

label8.Visible = false;

y2.Visible = false;

label9.Visible = false;

label10.Visible = false;

}

private void button1_Click(object sender, EventArgs e)

{

try

{

double x = Convert. ToDouble(textBox1.Text);

double h = 213862146124124;//чтобы избежать ошибок...

if (x > 6 || x < 0)

{

MessageBox. Show("x выходит из интервала!!!");

return;

}

Newton_Picewise c = new Newton_Picewise(x, h);

y1.Text = c. Piecewise().ToString();

y1.Visible = true;

label2.Visible = true;

label9.Visible = true;

}

catch(Exception exp)

{

MessageBox. Show("ОШИБКА!!!"+exp. Message);

}

}

private void button2_Click(object sender, EventArgs e)

{

try

{

// Значение x

double x = double. Parse(textBox1.Text);

if (x > 6 || x < 0)

{

MessageBox. Show("x выходит из интервала!!!");

return;

}

// Точность exp

double h = double. Parse(textBox4.Text);

if (h < 0)

{

MessageBox. Show("ОШИБКА!!!h должен быть положителен!!!");

return;

}

Newton_Picewise c = new Newton_Picewise(x, h);

y2.Text = c. Newton().ToString();

y2.Visible = true;

label8.Visible = true;

label10.Visible = true;

}

catch(Exception exp)

{

MessageBox. Show("ОШИБКА!!!"+exp. Message);

}

}

private void Form1_Load(object sender, EventArgs e)

{

}

}

Класс, отвечающий за решение интеграла разными методами:

class Newton_Picewise

{

private double f1, f2,t, h;

private double y;

private double x;

public Newton_Picewise(double x, double h)

{

this. x = x;

this. h = h;

}

//Кусочно-линейный метод

public double Piecewise()

{

int X1 = Convert. ToInt32(x);

int X2 = 6;

if (x == 6)

{

X1 = 5;

}

}

switch (X1)

{

case 0:

{

f1 = 0; break;

}

case 1:

{

f1 = 0.8415; break;

}

case 2:

{

f1 = 0.9093; break;

}

case 3:

{

f1 = 0.1411; break;

}

case 4:

{

f1 = -0.7568; break;

}

case 5:

{

f1 = -0.9589; break;

}

case 6:

{

f1 = -0.2794; break;

}

}

switch (X2)

{

case 0:

{

f2 = 0; break;

}

case 1:

{

f2 = 0.8415; break;

}

case 2:

{

f2 = 0.9093; break;

}

case 3:

{

f2 = 0.1411; break;

}

case 4:

{

f2 = -0.7568; break;

}

case 5:

{

f2 = -0.9589; break;

}

case 6:

{

f2 = -0.2794; break;

}

}

y = f1 + (x - X1) * (f2 - f1) / (X2 - X1);

return y;

}

//полином Ньютона

public double Newton()

{

t = (x - 0) / h;

y = 0 + 0.8415 * t - 0.38685 * t * (t - 1) - 0.0105 * t * (t - 1) * (t - 2);

return y;

}

}

Пользовательский интерфейс: