Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Вариант_12_—_ИДЗ_3

.doc
Скачиваний:
1
Добавлен:
09.02.2023
Размер:
18.96 Mб
Скачать

ИДЗ №3 | Варианта №12

  1. Построить интерполяционный многочлен Лагранжа по пяти данным узлам (xi,yi), i=1.5

Вариант 12

i

xi

yi

1

-2

3

2

-1

1

3

0

-4

4

1

2

5

2

0

Рисунок 1

Листинг кода программы:

#include "stdafx.h"

#include <iostream>

#include <windows.h>

#include <conio.h>

float x[5] = { -2.0, -1.0, 0.0, 1.0, 2.0 };

float y[5] = { 3.0, 1.0, -4.0, 2.0, 0.0 };

x - аргумент

n - степень многочлена или число x - ов

i - номер узла

float L(float xp, int n, int i)

{

float Chesl;

float Znam;

Chesl = 1; Znam = 1;

int k;

вычисление числителя

for (k = 0; k != n; k++)

{

if (k == i) continue;

Chesl *= xp - x[k];

}

вычисление знаменателя

for (k = 0; k != n;k++)

{

if (x[i] == x[k]) continue;

Znam *= x[i] - x[k];

}

return Chesl / Znam;

}

int main(int argc, char* argv[])

{

вычисление степени многочлена

int n = sizeof(y) / sizeof(float);

float R = 0;

произвольная точка для проверки

float px = 1.5; // X1=-2.0, X2=-1.0, X3=0.0, X4=1.0, X5=2.0

for (int i = 0; i != n; i++)

{

R += y[i] * L(px, n, i);

}

printf("Result: %f ", R);

_getch();

return 0;

}

Рисунок 2 – Проверка в точке i=1 (X1 = -2.0)

Рисунок 3 – Проверка в точке i=2 (X2 = -1.0)

Рисунок 4 – Проверка в точке i=3 (X3 = 0.0)

Рисунок 5 – Проверка в точке i=4 (X4 = 1.0)

Рисунок 6 – Проверка в точке i=5 (X5 = 2.0)

Рисунок 7 – Проверка в произвольной точке 1.5