10.1(модифиц.)1 (Программы 2)
Описание файла
Файл "10.1(модифиц.)1" внутри архива находится в папке "Программы 2". Документ из архива "Программы 2", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "10.1(модифиц.)1"
Текст из документа "10.1(модифиц.)1"
В методе Эйлера производная берется в начале шага и по ней прогнозируется движение системы на конец шага, считая, что во время шага производная неизменна. То есть в течение всего шага производная считается той, какой она была в самом начале шага. Это основной источник неточности.
Улучшение метода состоит в том, что берется производная не в начале шага, а как промежуточное или среднее на разных участках одного шага. В разных вариантах метода вычисляют несколько производных в разных частях шага и усредняют их. Конечно, в этом случае число вычислений увеличивается, — но не в десятки раз, — а вот точность возрастает на порядок, в этом и состоит выигрыш.
Module Module1
Function F(ByVal x As Double, ByVal y As Double) As Double
F = x + y
End Function
Function Teor(ByVal x As Double) As Double
Teor = Math.Exp(x) - x - 1
End Function
Sub Main()
Dim x, y, y1 As Double
Dim x0 As Double = 0
Dim xn As Double = 1
Dim dx As Double = 0.1
Dim y0 As Double = 0
x = x0
y1 = y0
y = y0
Console.WriteLine("Начальное условие: х0 = {0}, y0 = {1}", x0, y0)
Console.WriteLine()
Console.WriteLine("х_кон. = {0} шаг по х: {1}", xn, dx)
Console.WriteLine()
Console.WriteLine(" х м-д Эйлера Точн.знач. Погрешность м-д Эйлера Погрешность")
Console.WriteLine(" модифиц.")
Console.WriteLine("---------------------------------------------------------------------")
Console.WriteLine("{0,4:F1} {1,9:F4} {2,10:F4} {3,10:F4} {4,12:F4} {5,12:F4}", x, y, Teor(x), Teor(x) - y, y1, Teor(x) - y1)
For i As Integer = 1 To CInt((xn - x0) / dx)
y = y + dx * F(x, y)
y1 = y1 + dx * F(x + dx / 2, y1 + dx / 2 * F(x, y1))
x = x + dx
Console.WriteLine("{0,4:F1} {1,9:F4} {2,10:F4} {3,10:F4} {4,12:F4} {5,12:F4} {6,7:F3}", x, y, Teor(x), Teor(x) - y, y1, Teor(x) - y1, (Teor(x) - y) / (Teor(x) - y1))
Next i
Console.ReadLine()
End Sub
End Module