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

ЧислМетодЛаб3

.pdf
Скачиваний:
5
Добавлен:
27.11.2022
Размер:
647.21 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Факультет безопасности (ФБ)

Кафедра безопасности информационных систем (БИС)

ИНТЕРПОЛЯЦИЯ И АППРОКСИМАЦИЯ ФУНКЦИИ Отчѐт по лабораторной работе 3

по дисциплине «Численные методы»

Студент гр.731-2

__________ Батаев А.С. 02.11.2022

Руководитель:

Доцент кафедры КИБЭВС

__________ __________ Якимук А.Ю. 02.11.2022

Томск 2022

Оглавление

1

Введение .............................................................................................................

3

2

Ход работы.........................................................................................................

4

 

2.1

Вычисление точек.........................................................................................

4

 

2.2

Вычисление полинома Лагранжа.................................................................

4

 

2.3

Метод наименьших квадратов .....................................................................

5

3

Заключение ........................................................................................................

7

1 Введение

Цель работы: получить навыки вычисления интерполяционного

полинома Лагранжа и аппроксимирующей функции.

2 Ход работы

2.1 Вычисление точек

Необходимо вычислить 14 точек с координатами (xi , yi). Индивидуальная функция имеет вид: y = ln(16, 94x^2)

2.2 Вычисление полинома Лагранжа

Листинг программы представлен в Приложении А.

Рисунок 1 – Работа программы

Корректность вычислений программы проверяется с помощью

совпадения вычислений в узлах полинома и истинными точками.

2.3Метод наименьших квадратов

Спомощью метода наименьших квадратов рассчитать параметры функции f(x) = ax2 + bx + c, аппроксимирующей функцию f(x).

Рисунок 2 – Работа программы

Графики функций:

Рисунок 3 – Графики

2.4 Таблица результатов

Таблица 1 – Значения корней

̅

 

 

̅

 

 

 

 

 

-2,2178

-2,2178

-2,2218

 

 

 

 

 

-1,741

-1,741

-1,4581

 

 

 

 

 

1,9986

1,9986

-41,6125

 

 

 

 

 

5,7282

5,7282

-2710,7155

 

 

 

 

3Заключение

Входе выполнения данной лабораторной работы были получены навыки вычисления интерполяционного полинома Лагранжа и аппроксимирующей функции.

Приложение A

(Обязательное)

Код приложения

namespace chm4

{

class Program

{

static void LeastSquares(double[] aX, double[] aFunc)

{

double[] A1 = new double[3] { 0, 0, 0 }; double[] A2 = new double[3] { 0, 0, 0 }; double[] A3 = new double[3] { 0, 0, 0 }; double[] B = new double[3] { 0, 0, 0 }; for (int i = 0; i < 14; i++)

{

int n = 0;

for (int j = 2; j >= 0; j--)

{

A1[n] = A1[n] + Math.Pow(aX[i], 2) * Math.Pow(aX[i], j); A2[n] = A2[n] + Math.Pow(aX[i], 1) * Math.Pow(aX[i], j); A3[n] = A3[n] + Math.Pow(aX[i], j);

B[n] = B[n] + aFunc[i] * Math.Pow(aX[i], j); n++;

}

}

double[] FirstLine = new double[3] { 0, 0, 0 }; double[] SecondLine = new double[3] { 0, 0, 0 }; double[] ThirdLine = new double[3] { 0, 0, 0 }; double[] FourthLine = new double[3] { 0, 0, 0 }; for (int k = 0; k < 3; k++)

{

FirstLine[k] = 2 * A1[k];

SecondLine[k] = 2 * A2[k];

ThirdLine[k] = 2 * A3[k];

FourthLine[k] = 2 * B[k];

}

Console.Write($"{Math.Round(FirstLine[0], 4)}\t"); for (int i = 1; i < 3; i++)

{

Console.Write($"{Math.Round(FirstLine[i], 4)}\t");

}

Console.WriteLine();

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

{

Console.Write($"{Math.Round(SecondLine[i], 4)}\t");

}

Console.WriteLine();

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

{

Console.Write($"{Math.Round(ThirdLine[i], 4)}\t");

}

Console.WriteLine("\n"); Console.WriteLine("Free members : "); for (int i = 0; i < 3; i++)

{

Console.Write($"{Math.Round(FourthLine[i], 4)}\t");

}

Console.WriteLine();

}

static double[] Function(double[] x)

{

double[] IndividualFunction = new double[15];

9

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

{

IndividualFunction[i] = Math.Log(16.94 * x[i] * x[i]); Console.WriteLine($"F(x{i + 1}) = {Math.Round(IndividualFunction[i], 4)}");

}

Console.WriteLine("\n"); return IndividualFunction;

}

static double LagrangePolynomial(double[] aX, double[] aFunc)

{

Console.Write("x value: ");

double x = double.Parse(Console.ReadLine()); Console.Write("Node number ");

int z = int.Parse(Console.ReadLine()); double Lag, Func, App;

if ((z == 1) || (z == 14))

{

Lag = aFunc[z - 1]; Func = aFunc[z - 1];

App = -161.125 * aX[z - 1] * aX[z - 1] + 51.3175 * aX[z - 1] - 5.296; Console.WriteLine($"Lagrange Polynomial = {Math.Round(Lag, 4)}"); Console.WriteLine($"Function ({z}) = {Math.Round(Func, 4)}"); Console.WriteLine($"Approximation ({z}) = {Math.Round(App, 4)}");

}

else

{

double s1 = ((x - aX[z - 1]) * (x - aX[z])) / ((aX[z - 2] - aX[z - 1]) * (aX[z - 2] - aX[z])) * aFunc[z - 2];

double s2 = ((x - aX[z - 2]) * (x - aX[z])) / ((aX[z - 1] - aX[z - 2]) * (aX[z - 1] - aX[z])) * aFunc[z - 1];

double s3 = ((x - aX[z - 2]) * (x - aX[z - 1])) / ((aX[z] - aX[z - 2]) * (aX[z] - aX[z - 1])) * aFunc[z];

Lag = s1 + s2 + s3; Func = aFunc[z - 1];

App = -161.125 * aX[z - 1] * aX[z - 1] + 51.3175 * aX[z - 1] - 5.296; Console.WriteLine($"Lagrange Polynomial = {Math.Round(Lag, 4)}"); Console.WriteLine($"Function ({z}) = {Math.Round(Func, 4)}"); Console.WriteLine($"Approximation ({z}) = {Math.Round(App, 4)}");

}

Console.WriteLine("\n"); return Lag;

}

static void Main(string[] args)

{

double[] first = Unknown(); double[] second = Function(first);

Console.WriteLine("Matrix coefficients :"); LeastSquares(first, second); Console.WriteLine();

Enter:

LagrangePolynomial(first, second); goto Enter;

}

static double[] Unknown()

{

double[] NumberX = new double[15]; for (int i = 0; i < 15; i++)

{

NumberX[i] = 0.02 * i;

Console.WriteLine($"x({i + 1}) = {NumberX[i]}");

}

Console.WriteLine("\n");

10

return NumberX;

}

}

}

Соседние файлы в предмете Численные методы