Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
246.47 Кб
Скачать

Глава ιι. Алгоритм и метод работы программы

Алгоритм построения интерполяционной формулы Ньютона основан на обработке данных по средствам работы массивами. Ниже представлен программный код, написанный на языке программирования 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.