Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР4 / ЧМ_Л4.odt
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
183.95 Кб
Скачать

Заключение

В ходе работы были освоены вычислительные методы для нахождения определённого интеграла и исследована их точность при разном числе разбиений, что позволило оценить влияние шага на точность вычислений. Были изучены и сравнены методы численного дифференцирования, выявлены их преимущества и недостатки. Также были рассмотрены методы группы Рунге-Кутта для решения дифференциального уравнения первого порядка, где метод 4-го порядка показал наибольшую точность

Приложение а

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

Код для задания 1

using System;

class Program

{

static void Main(string[] args)

{

double a = 4;

double b = 5;

int[] partitions = { 6, 40, 120, 400 };

foreach (var n in partitions)

{

double h = (b - a) / n;

double[] xValues = new double[n + 1];

double[] fValues = new double[n + 1];

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

{

xValues[i] = a + i * h;

fValues[i] = Function(xValues[i]);

}

double leftRectangleResult = LeftRectangleMethod(fValues, n, h);

double rightRectangleResult = RightRectangleMethod(fValues, n, h);

double trapezoidResult = TrapezoidMethod(fValues, n, h);

double simpsonResult = SimpsonMethod(fValues, n, h);

Console.WriteLine($"Разбиения: {n}");

Console.WriteLine($"Левые прямоугольники{Math.Round(leftRectangleResult,2)}");

Console.WriteLine($"Правые прямоугольники: {Math.Round(rightRectangleResult,2)}");

Console.WriteLine($"Трапеции: {Math.Round(trapezoidResult,2)}");

Console.WriteLine($"Симпсон: {Math.Round(simpsonResult,2)}");

Console.WriteLine();

}

}

static double Function(double x)

{

return Math.Exp(0.84 * x) * Math.Sin(0.15 * x);

}

static double LeftRectangleMethod(double[] fValues, int n, double h)

{

double sum = 0.0;

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

{

sum += fValues[i];

}

return sum * h;

}

static double RightRectangleMethod(double[] fValues, int n, double h)

{

double sum = 0.0;

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

{

sum += fValues[i];

}

return sum * h;

}

static double TrapezoidMethod(double[] fValues, int n, double h)

{

double sum = (fValues[0] + fValues[n]) / 2.0;

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

{

sum += fValues[i];

}

return sum * h;

}

static double SimpsonMethod(double[] fValues, int n, double h)

{

if (n % 2 != 0) n++;

double sum = fValues[0] + fValues[n];

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

{

if (i % 2 == 0)

sum += 2 * fValues[i];

else

sum += 4 * fValues[i];

}

return sum * (h / 3);

}

}

Приложение б

Код для задания 2

using System;

class Program

{

static void Main(string[] args)

{

double x = 2.0;

double h = 0.1;

double leftDerivative = LeftDifference(f, x, h);

double rightDerivative = RightDifference(f, x, h);

double centralDerivative = CentralDifference(f, x, h);

Console.WriteLine($"Левая разностная производная: {Math.Round(leftDerivative,2)}");

Console.WriteLine($"Правая разностная производная: {Math.Round(rightDerivative, 2)}");

Console.WriteLine($"Центральная разностная производная: {Math.Round(centralDerivative, 2)}");

}

static double f(double x)

{

return Math.Pow(x, 3) - Math.Sqrt(x + 2);

}

static double LeftDifference(Func<double, double> func, double x, double h)

{

return (func(x) - func(x - h)) / h;

}

static double RightDifference(Func<double, double> func, double x, double h)

{

return (func(x + h) - func(x)) / h;

}

static double CentralDifference(Func<double, double> func, double x, double h)

{

return (func(x + h) - func(x - h)) / (2 * h);

}

}

Соседние файлы в папке ЛР4