Тема 3. Решение дифференциальных уравнений
Постановка задачи:
Решить дифференциальное уравнение y=x+sin(y/3) с начальными условиями y(x0)=4,6 методом Эйлера и методом Рунге-Кутта на интервале [a;b]=[1,6;2,6] с шагом интегрирования h=0,1.
Решение:
-
Метод Эйлера
Sub метод_эйлера()
h = 0.1
x0 = 1.6
xk = 2.6
y0 = 4.6
x = x0
y = y0
i = 2
Do
f = x + Sin(y / 3)
y = y + h * f
x = x + h
Worksheets("Лист3").Cells(i, 1).Value = x
Worksheets("Лист3").Cells(i, 2).Value = y
i = i + 1
Loop While x > xk
End Sub
-
Метод Рунге-Кутта
Function f1(x, y)
f1 = x + Sin(y / 3)
End Function
Sub метод_рунге_кутта()
h = 0.1
x0 = 1.6
xk = 2.6
y0 = 4.6
x = x0
y = y0
i = 2
Do
k0 = f1(x, y) * h
k1 = f1(x + h / 2, y + k0 / 2) * h
k2 = f1(x + h / 2, y + k1 / 2) * h
k3 = f1(h + h, y + k2) * h
y = y + (k0 + 2 * k1 + 2 * k2 + k3) / 6
x = x + h
Worksheets("Лист3").Cells(i, 6).Value = x
Worksheets("Лист3").Cells(i, 7).Value = y
i = i + 1
Loop While x < xk
End Sub
Результаты:
x= |
y= |
|
|
|
x= |
y= |
1,7 |
4,85993 |
|
|
|
1,7 |
4,839965 |
1,8 |
5,129809 |
|
|
|
1,8 |
5,087877 |
1,9 |
5,408842 |
|
|
|
1,9 |
5,343028 |
2 |
5,69616 |
|
|
|
2 |
5,604665 |
2,1 |
5,990831 |
|
|
|
2,1 |
5,871996 |
2,2 |
6,291888 |
|
|
|
2,2 |
6,144214 |
2,3 |
6,598345 |
|
|
|
2,3 |
6,420505 |
2,4 |
6,909227 |
|
|
|
2,4 |
6,700074 |
2,5 |
7,223592 |
|
|
|
2,5 |
6,982156 |
2,6 |
7,540557 |
|
|
|
2,6 |
7,266036 |
метод Эйлера |
|
|
|
метод Рунге-Кутта |
Вывод:
К классу одношаговых методов относится метод Эйлера, метод Рунге-Кутта. Вывод: Метод Рунге-Кутта наиболее распространен для обыкновенных дифференциальных уравнений, требует на каждом шаге четырехкратного вычисления правой части уравнения, повышенная точность, что дает возможность производить расчеты с более крупным шагом. Метод Эйлера не настолько точен как предыдущий метод, он содержит больше погрешностей.
Тема 4. Численное интегрирование
Постановка задачи:
Вычислить значение интеграла методами средних, левых, правых прямоугольников, трапеции, Симпсона.
Решение:
Function f(x)
f = (1 + 0.4 * x ^ 2) / (1.2 + Sqr(1.2 * x ^ 2 + 1))
End Function
Sub метод_средних_прямоугольников()
a = 1.4
b = 2.84
n = 50
s = 0
h = (b - a) / n
For x = a + h To b Step h
s = s + f(x + h / 2)
Next x
I = s * h
Worksheets("Лист5").Range("B2").Value = I
End Sub
Sub метод_левых_прямоугольников()
a = 1.4
b = 2.84
n = 50
s = 0
h = (b - a) / n
For x = a To b - h Step h
s = s + f(x + h)
Next x
I = s * h
Worksheets("Лист5").Range("C2").Value = I
End Sub
Sub метод_правых_прямоугольников()
a = 1.4
b = 2.84
n = 50
s = 0
h = (b - a) / n
For x = a - h To b - h Step h
s = s + f(x + h)
Next x
I = s * h
Worksheets("Лист5").Range("D2").Value = I
End Sub
Sub метод_средних_прямоугольников1()
a = 1.4
b = 2.84
n = 100
s = 0
h = (b - a) / n
For x = a + h To b Step h
s = s + f(x + h / 2)
Next x
I = s * h
Worksheets("Лист5").Range("B4").Value = I
End Sub
Sub метод_левых_прямоугольников1()
a = 1.4
b = 2.84
n = 100
s = 0
h = (b - a) / n
For x = a To b - h Step h
s = s + f(x + h)
Next x
I = s * h
Worksheets("Лист5").Range("C4").Value = I
End Sub
Sub метод_правых_прямоугольников1()
a = 1.4
b = 2.84
n = 100
s = 0
h = (b - a) / n
For x = a - h To b - h Step h
s = s + f(x + h)
Next x
I = s * h
Worksheets("Лист5").Range("D4").Value = I
End Sub
Sub Метод_трапеции()
a = 1.4
b = 2.84
n = 50
h = (b - a) / n
s = (f(a) + f(b)) / 2
For x = a + h To b - h Step h
s = s + f(x)
Next x
I = s * h
Worksheets("Лист5").Range("I2").Value = I
End Sub
Sub Метод_Симпсона()
a = 1.4
b = 2.84
n = 50
h = (b - a) / n
s = f(a) + f(b)
c = 1
For x = a + h To b - h Step h
s = f(x) * (3 + c) + s
c = -c
Next x
I = (s * h) / 3
Worksheets("Лист5").Range("H2").Value = I
End Sub
Sub Метод_трапеции1()
a = 1.4
b = 2.84
n = 50
h = (b - a) / n
s = (f(a) + f(b)) / 2
For x = a + h To b - h Step h
s = s + f(x)
Next x
I = s * h
Worksheets("Лист5").Range("I4").Value = I
End Sub
Sub Метод_Симпсона1()
a = 1.4
b = 2.84
n = 50
h = (b - a) / n
s = f(a) + f(b)
c = 1
For x = a + h To b - h Step h
s = f(x) * (3 + c) + s
c = -c
Next x
I = (s * h) / 3
Worksheets("Лист5").Range("H4").Value = I
End Sub
Результаты:
n=50 |
1,098887 |
1,093712 |
1,110664 |
1,08856 |
1,088566 |
|
мд ср пр |
мд лев пр |
мд пр пр |
мд трап |
мд симпс |
n=100 |
1,080063 |
1,077513 |
1,085989 |
1,08856 |
1,088566 |
Вывод: