Глава ιι. Алгоритм и метод работы программы
Алгоритм построения интерполяционной формулы Ньютона основан на обработке данных по средствам работы массивами. Ниже представлен программный код, написанный на языке программирования C++.
str=this->textBox5->Text; //считывание х
x=Convert::ToDouble(str); // конвертирование из строки в число
for(int i=0;i<Nrow;i++) //заполнение массивов измерений из таблицы
{
X[i]=Convert::ToDouble(this->dataGridView1->Rows[i]->Cells[0]->Value);
Y[i]=Convert::ToDouble(this->dataGridView1->Rows[i]->Cells[1]->Value);
}
y=Y[0];
for(int i=0;i<Nrow;i++) //заполнение 1 столбца массива разделенных разностей значениями функции
{
Q[i][0]=Y[i];
}
for(int j=1;j<Nrow;j++) \\ перебор столбцов при заполнении массива разделенных разностей , начиная с 1-го.
{
for(int i=0;i<Nrow-j;i++) перебор строк при заполнении массива разделенных разностей , начиная с нулевой по «число строк − номер столбца».
{
Q[i][j]=(Q[i][j-1]-Q[i+1][j-1])/(X[i]-X[i+j]);//формирует разделенные разности
}
}
Z[0]=(x-X[0]);
for(int i=1;i<Nrow-1;i++)// заполнение массива множителей перед раздельными разностями
{
Z[i]=Z[i-1]*(x-X[i]);
}
for(int j=0;j<Nrow-1;j++)// формирование многочлена Ньютона
{
y=y+(Z[j])*(Q[0][j+1]);
}
Блок-схема программы представлена на рисунке 1.
Рисунок 1.
Ввод х
i <Nrow
Заполнение X[i] Заполнение Y[i]
y=Y[0]
i++
i=0
i <Nrow
i=0
Q[i][0]=Y[i]
i++
j <Nrow
j=0
Q[i][j]=(Q[i][j-1]- -Q[i+1][j-1])/(X[i]-X[i+j])
j++
i <Nrow-j
j=0
i++
Z[0]=(x-X[0])
i <Nrow-1
i=1
Z[i]=Z[i-1]*(x-X[i])
i++
i <Nrow-1
j=0
y=y+(Z[j])*(Q[0][j+1])
i++
Конец
Принцип работы программы состоит в следующем:
Вводится значение аргумента, значение функции от которого необходимо узнать. В одномерные массивы данных X и Y записываются значения аргументов и значения функции от этих аргументов соответственно ( f(X[i])=Y[i]). Далее, заполняется нулевой столбец двумерного массива Q значениями функции из массива Y. В массиве Q будут храниться разделенные разности в виде, представленном в таблице 1.(пример для трёх узлов):
Таблица 1
|
0 |
1 |
2 |
3 |
0 |
Y[0] |
Q[0][1] |
Q[0][2] |
Q[0][3] |
1 |
Y[1] |
Q[1][1] |
Q[1][2] |
|
2 |
Y[2] |
Q[2][1] |
|
|
3 |
Y[3] |
|
|
|
Массив Z представляет собой набор множителей перед разделёнными разностями, которые записаны в нём в виде отображённом в таблице 2.
Таблица 2
0 |
x-X[0] |
1 |
(x-X[0])*(x-X[1]) |
2 |
(x-X[0])*(x-X[1]) ])*(x-X[2]) |
… |
… |
i=Nrow-2 |
(x-X[0])*(x-X[1]) ])*… *(x-X[i]) |
Затем, перемножая элементы 1 строки матрицы Q (начиная с 1 столбца) с элементами матрицы Z определённым выше способом, суммируем их и получаем значение интерполируемой нами функции в заданной точке.
Программа была разработана в среде Microsoft® Visual Studio 2010.
