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

cm4

.pdf
Скачиваний:
34
Добавлен:
24.11.2021
Размер:
219.4 Кб
Скачать

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

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

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

ИНТЕРПОЛЯЦИЯ И АППРОКСИМАЦИЯ ФУНКЦИИ

Отчет по лабораторной работе №4 по дисциплине ¾Численные методы¿

Студент гр. 730-2 Подойницын К.В. 11.11.2021

Доцент каф.КИБЭВС Якимук А.Ю. 11.11.2021

Томск 2021

2

1 Введение

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

3

2 Ход работы

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

Необходимо вычислить 14 точек с координатами (xi; yi).

xi = 0; 2 i

i = 0; 13

yi = f(xi)

f(xi) – индивидуальная функция. Индивидуальная функция имеет вид:

y = ln(10; 54x2 + 2; 9)

4

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

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

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

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

5

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

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

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

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

Рис 3 – Графики

6

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

 

 

 

 

 

f(x)

L2(x)

 

 

 

 

 

 

 

 

f(x)

 

 

x

 

xi

1,1537

1,1537

1,1534

 

 

 

 

 

 

x*

1,1335

1,1243

1,134

 

 

 

 

 

 

 

 

1

1,0647

1,0647

1,0619

 

x

 

 

2

1,0662

101,1143

1,0653

 

x

7

3Заключение

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

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

8

Приложение А

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

using System; namespace laba4_cm

{

class Program

{

static void Main(string[] args)

{

double[] perviy = X(); double[] vtoroy = Fn(perviy);

Console.WriteLine("Коэффициенты матрицы:"); NK(perviy, vtoroy);

Console.WriteLine();

Enter:

Lag(perviy, vtoroy); goto Enter;

}

static double[] X()

{

double[] x = new double[14]; for (int i = 0; i < 14; i++)

{

x[i] = 0.02 * i;

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

}

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

}

static double[] Fn(double[] x)

{

9

double[] f = new double[14]; for (int i = 0; i < 14; i++)

{

f[i] = Math.Log(10.54 * x[i] * x[i] + 2.9, Math.Exp(1) Console.WriteLine($"F(x{i + 1}) = {Math.Round(f[i], 4)

}

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

}

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

{

Console.Write("Введите одно из значений x: "); double x = double.Parse(Console.ReadLine()); Console.Write("Введите номер узла: ");

int z = int.Parse(Console.ReadLine());

double L, f, a;

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

{

L = aFunc[z - 1]; f = aFunc[z - 1];

a = 2.8675 * aX[z - 1] * aX[z - 1] + 0.1133 * aX[z - 1 Console.WriteLine($"L = {Math.Round(L, 4)}"); Console.WriteLine($"F{z} = {Math.Round(f, 4)}"); Console.WriteLine($"f{z} = {Math.Round(a, 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])) *

10

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];

L = s1 + s2 + s3; f = aFunc[z - 1];

a = 2.8675 * aX[z - 1] * aX[z - 1] + 0.1133 * aX[z - 1] + 1.0619;

Console.WriteLine($"L = {Math.Round(L, 4)}"); Console.WriteLine($"F{z} = {Math.Round(f, 4)}"); Console.WriteLine($"f{z} = {Math.Round(a, 4)}");

}

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

}

static void NK(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);

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