Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра БІТ
Звіт про виконання
лабораторної роботи №6
з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «Методи чисельного розв’язування диференціальних рівнянь»
Мета роботи – ознайомлення з методами чисельного розв’язування диференційних рівнянь.
1.Короткі теоретичні відомості
Метод Мілна
На етапі прогнозу використовується формула Мілна.
, (11)
а на етапі корекції - формула Сімпсона
(12)
Останні члени в обох формулах в ітераційному процесі не використовуються і служать лише для оцінки помилок. Метод Мілна відносять до методів четвертого порядку точності. Потрібно мати на увазі, що для користування формулою (11) необхідно попередньо одним із однокрокових методів визначити і значення похідних .
Похибка, внесена на будь-якому кроці, зростає експоненціально, тому методу Мілна властива нестійкість.
2.Завдання до лабораторної роботи
Розв’язати чисельним методом звичайне диференційне рівняння.
3.Блок-схема алгоритму програми
4. Текст програми
using System;
namespace ConsoleApplication10
{
class Data
{
double h;
double[] x;
double[] y;
double[] Y;
int i = 0;
int n;
public void ScanData()
{
Console.Write("h=");
h = Convert.ToDouble(Console.ReadLine());
Console.Write("n=");
n = Convert.ToInt32(Console.ReadLine());
Console.Write("x=");
x = new double[n + 1];
y = new double[n + 1];
Y = new double[n + 1];
x[0] = Convert.ToDouble(Console.ReadLine());
Console.Write("y=");
y[0] = Convert.ToDouble(Console.ReadLine());
}
public void Pohidna(double x, double y)
{
Y[i] = Math.Sin(x + y * y);
}
public void Obch()
{
y[i + 1] = y[i] + h * Y[i];
}
public void Prognoz()
{
y[i + 1] = y[i - 3] + 4 / 3 * h * (2.0 * Y[i] - Y[i - 1] + 2.0 * Y[i - 2]);
}
public void Korekcia()
{
y[i + 1] = y[i - 1] + 1 / 3 * h * (Y[i + 1] + 4.0 * Y[i] + Y[i - 1]);
}
public void Prod()
{
Console.WriteLine("x\ty\ty'\t");
do
{
x[i] = i * h;
if (i < 4)
{
Pohidna(x[i], y[i]);
Obch();
}
else
{
Prognoz();
Pohidna(x[i], y[i]);
Korekcia();
Pohidna(x[i], y[i]);
}
Console.WriteLine("{0:0.#######}\t{1:0.###########}\t{2:0.###########}", x[i], y[i], Y[i]);
i++;
} while (i < n);
}
}
class Program
{
static void Main(string[] args)
{
Data d = new Data();
d.ScanData();
d.Prod();
Console.ReadLine();
}
}
}
5. Результати роботи програми
/
6. Висновки
На даній лабораторній роботі я навчився розв’язувати диференціальні
рівняня чисельним. Я розв’язував рівняння за допомогою методу Мілна. Використовуючи алгоритм ми суттєво скорочуєм час на обчислення диференціальних рівнянь.