
ЧМ Лабораторная работа 3
.pdfПриложение А Полином Лагранжа
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