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

ЧМ Лабораторная работа 3

.pdf
Скачиваний:
0
Добавлен:
17.06.2025
Размер:
922.97 Кб
Скачать

Приложение А Полином Лагранжа

double[] X = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8};

//для первой последовательности

double[] Y = { 1.61499532, -0.388984058, -3.990186162, 2.854252781, 1.761385979, 0.081490407, 4.952369159, -1.386877928, 1.677548878, -2.666143978, 5.838630098, 1.228571329, -2.47555451, -3.852173094, -6.277271912 };

//для второй последовательности

//double[] Y = { 1.796747011, 1.808419910, 1.842642680, 1.897199982, 1.968900966, 2.054123734, 2.149294044, 2.251207585, 2.357186908, 2.465112022, 2.573375298, 2.680802327, 2.786565589, 2.890105056, 2.991061382 };

//для третьей последовательности

//double[] Y = { 0.010796117, -0.982827061, -0.352638252, 0.860174137, 0.651819843, - 0.633461325, -0.872147284, 0.330115293, 0.986966382, 0.013166561, -0.982386853, - 0.354855585, 0.858962707, 0.653615822, -0.631625227 };

void Lagrange (double x)

{

if (x <= 0.0)

{

double y = (((x - X[1]) * (x - X[2])) / ((X[0] - X[1]) * (X[0] - X[2]))) * Y[0] + (((x - X[0]) * (x - X[2])) / ((X[1] - X[0]) * (X[1] - X[2]))) * Y[1] + (((x - X[0]) * (x - X[1])) / ((X[2] - X[0]) * (X[2] - X[1]))) * Y[2];

Console.WriteLine($"При x = {x}: y = {y}");

}

else if (x >= 2.8)

{

double y = (((x - X[13]) * (x - X[14])) / ((X[12] - X[13]) * (X[12] - X[14]))) * Y[12] + (((x - X[12]) * (x - X[14])) / ((X[13] - X[12]) * (X[13] - X[14]))) * Y[13] + (((x - X[12]) * (x - X[13])) / ((X[14] - X[12]) * (X[14] - X[13]))) * Y[14];

Console.WriteLine($"При x = {x}: y = {y}");

21

}

else

{

for (int i = 1; i < 13; i++)

{

if (X[i-1] < x && X[i+1] > x)

{

double y = (((x - X[i]) * (x - X[i+1])) / ((X[i-1] - X[i]) * (X[i-1] - X[i+1]))) * Y[i-1] + (((x - X[i-1]) * (x - X[i+1])) / ((X[i] - X[i-1]) * (X[i] - X[i+1]))) * Y[i] + (((x - X[i-1]) * (x - X[i])) / ((X[i+1] - X[i-1]) * (X[i+1] - X[i]))) * Y[i+1];

Console.WriteLine($"При x = {x}: y = {y}");

return;

}

}

}

}

Lagrange(0.0);

Lagrange(0.2);

Lagrange(0.4);

Lagrange(0.6);

Lagrange(0.8);

Lagrange(1.0);

Lagrange(1.2);

Lagrange(1.4);

Lagrange(1.6);

Lagrange(1.8);

Lagrange(2.0);

Lagrange(2.2);

22

Lagrange(2.4);

Lagrange(2.6);

Lagrange(2.8);

Console.WriteLine();

Lagrange(1.1);

Console.WriteLine();

Lagrange(3.0);

Lagrange(4.5);

23

Приложение Б Метод наименьших квадратов

double[] X = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8};

//для первой последовательности

double[] Y = { 1.61499532, -0.388984058, -3.990186162, 2.854252781, 1.761385979, 0.081490407, 4.952369159, -1.386877928, 1.677548878, -2.666143978, 5.838630098, 1.228571329, -2.47555451, -3.852173094, -6.277271912 };

//для второй последовательности

//double[] Y = { 1.796747011, 1.808419910, 1.842642680, 1.897199982, 1.968900966, 2.054123734, 2.149294044, 2.251207585, 2.357186908, 2.465112022, 2.573375298, 2.680802327, 2.786565589, 2.890105056, 2.991061382 };

//для третьей последовательности

//double[] Y = { 0.010796117, -0.982827061, -0.352638252, 0.860174137, 0.651819843, - 0.633461325, -0.872147284, 0.330115293, 0.986966382, 0.013166561, -0.982386853, - 0.354855585, 0.858962707, 0.653615822, -0.631625227 };

double SUM_x_1 = 0;

double SUM_x_2 = 0;

double SUM_x_3 = 0;

double SUM_x_4 = 0;

double SUM_y_1 = 0;

double SUM_y_x_1 = 0;

double SUM_y_x_2 = 0;

double a_start = 1; double b_start = 1; double c_start = 1;

double n = 15;

double eps = 0.00001;

void SumsMLS()

{

24

for (int i = 0; i < 15; i++)

{

SUM_x_1 += X[i];

SUM_x_2 += Math.Pow(X[i], 2);

SUM_x_3 += Math.Pow(X[i], 3);

SUM_x_4 += Math.Pow(X[i], 4);

SUM_y_1 += Y[i];

SUM_y_x_1 += Y[i] * X[i];

SUM_y_x_2 += Y[i] * Math.Pow(X[i], 2);

}

}

void MLS(double x)

{

double a = 0; double b = 0; double c = 0; do

{

a_start = a;

a= (-(b_start * SUM_x_3) - (c_start * SUM_x_2) + SUM_y_x_2) / (SUM_x_4); b_start = b;

b= (-(a * SUM_x_3) - (c_start * SUM_x_1) + SUM_y_x_1) / (SUM_x_2);

c_start = c;

c = (-(a * SUM_x_2) - (b * SUM_x_1) + SUM_y_1) / n;

}

while ((Math.Abs(a - a_start) >= eps) || (Math.Abs(b - b_start) >= eps) || (Math.Abs(c - c_start) >= eps));

{

double y = (a * x * x) + (b * x) + c; Console.WriteLine($"При x = {x}: y = {y}");

25

}

}

SumsMLS();

MLS(0.0);

MLS(0.2);

MLS(0.4);

MLS(0.6);

MLS(0.8);

MLS(1.0);

MLS(1.2);

MLS(1.4);

MLS(1.6);

MLS(1.8);

MLS(2.0);

MLS(2.2);

MLS(2.4);

MLS(2.6);

MLS(2.8);

Console.WriteLine();

MLS(1.1);

Console.WriteLine();

MLS(3.0);

MLS(4.5);

26