informatika_6
.docxМинистерство образования и Науки Российской Федерации
Казанский национальный исследовательский технологический университет
Кафедра химической кибернетики
Лабораторная работа №6
«Численное решение обыкновенных дифференциальных уравнений»
Выполнили студентки
гр.1121-51
Абдуллина А.,
Исхакова А.
Проверил: Шулаев М.В.
Казань, 2013
Работа 6.
Дано: дифференциальное уравнение с начальным условием у0(1,7) = 5,3 на интервале [1,7; 2,7].
Задача:
1). Решить дифференциальное уравнение методом Эйлера и Рунге-Кутта в таблице Excel с h = 0,1.
2). Решить дифференциальное уравнение методом Эйлера и Рунге-Кутта в программе Visual Basic c h = 0,01, с шагом печати hp = 0,1 по результатам решения построить точечную диаграмму.
1. Решение ДУ в таблице Excel.
2. Решение ДУ в программе Visual Basic.
Метод Эйлера.
Sub Metod_E1()
x0 = Val(InputBox("Ввод х0", "Начальное значение "))
y0 = Val(InputBox("Ввод y0", "Начальное значение"))
h = Val(InputBox("Ввод h", "Шаг интегрирования"))
hp = Val(InputBox("Ввод hp", "Шаг печати"))
b = Val(InputBox("Ввод b", "Конец интервала"))
x = x0: y = y0
i = 12
While x < b
f = x + Cos(y / 3.14)
y = y + h
x = x + h
Do While x > hp
i = i + 1
Worksheets("лаба6").Cells(i, 1).Value = x
Worksheets("лаба6").Cells(i, 2).Value = y
hp = hp + 1
Loop
Wend
End Sub
Метод Рунге-Кутта.
Sub Runge_Kytta()
h = 0.01
hp = 0.1
x0 = Val(InputBox(“Введите начальное значение x0", "Ввод х0"))
xk = Val(InputBox(“Введите начальное значение xk", "Ввод xk"))
y0 = Val(InputBox("Введите начальное значение y0", "Ввод y0"))
x = x0: y = y0
i = 20: j = 1
While x < xk
k0 = z(x, y) * h
k1 = z(x + h / 2, y + k0 / 2) * h
k2 = z(x + h / 2, y + k1 / 2) * h
k3 = z(x + h / 2, y + k2) * h
y = y + (k0 + 2 * k1 + 2 * k2 + k3) / 6
x = x + hp
Do While x > hp
i = i + 1
Worksheets("лаба6").Cells(i, j).Value = x
Worksheets("лаба6").Cells(i, j + 1).Value = y
hp = hp + 1
Loop
Wend
End Sub
Самостоятельная работа.
Задание: Решить в программе Visual Basic методом Эйлера систему дифференциальных уравнений: при начальных значениях х0=0; у0(х0)= -83; z0(x0)=17; на интервале [0; 10], шаг интегрирования h = 0,5.
Вычисления в программе.
Sub Metod_Euler_sist()
x = Val(InputBox("Ввести х0", "Ввод х"))
y = Val(InputBox("Ввести y0", "Ввод у"))
z = Val(InputBox("Ввести z0", "Ввод z"))
h = Val(InputBox("h-шаг интегрирования", "Ввод h"))
b = Val(InputBox("Ввести конечное значение b", "Ввод b"))
i = 2
While x <= b
f1 = -0.5 * y + 0.05 * z
f2 = 0.5 * y - 0.05 * z
y = y + h * f1
z = z + h * f2
x = x + h
Worksheets("СРС").Cells(i, 1).Value = x
Worksheets("СРС").Cells(i, 2).Value = y
Worksheets("СРС").Cells(i, 3).Value = z
i = i + 1
Wend
End Sub
Вывод: мы решили обыкновенные дифференциальные уравнения методами Эйлера и Рунге-Кутта в таблице Excel и в программе Visual Basic. Метод Рунге-Кутта оказался более точным, так как он является методом решения обыкновенных дифференциальных уравнений четвертого порядка . Этот метод с повышенной точностью и позволяет производить расчеты с более крупным шагом.