
- •Решение типовых задач вычислительной математики с помощью инструментальных средств vb и ms excel
- •Содержание
- •Введение
- •1. Решения задач численными методами в системе Visual Basic
- •Решение нелинейных уравнений
- •1.1.1. Теоретическая часть
- •1.1.2. Практическая часть
- •1.1.3. Варианты заданий
- •1.1.4. Контрольные вопросы
- •1.2. Вычисление определенных интегралов
- •1.2.1. Теоретическая часть
- •1.2.2. Практическая часть
- •1.2.3. Варианты заданий
- •1.2.4. Контрольные вопросы
- •1.3. Вычисление несобственных интегралов
- •1.3.1. Теоретическая часть
- •1.3.2. Практическая часть
- •1.3.3. Варианты заданий
- •1.3.4. Контрольные вопросы
- •1.4. Решение дифференциальных уравнений
- •1.4.1. Теоретическая часть
- •1.4.2. Практическая часть
- •1.4.3. Варианты заданий
- •1.4.4. Контрольные вопросы
- •1.5. Решение систем нелинейных уравнений
- •1.5.1. Теоретическая часть
- •1.5.2. Практическая часть
- •1.5.3. Варианты заданий
- •1.5.4. Контрольные вопросы
- •1.6. Создание Windows-приложений в системе Visual Basic
- •1.6.1. Теоретические основы проектирования меню
- •1.6.2. Программа-шаблон для курсовой работы
- •1.6.3. Контрольные вопросы
- •2. Примеры решения задач в табличном процессоре Excel
- •2.1. Теоретическая часть
- •2.2. Практическая часть
- •2.3. Создание меню пользователя
- •2.4. Варианты заданий
- •2.5. Контрольные вопросы
- •3. Примеры решения задач в субд Access
- •3.1. Теоретическая часть
- •3.2. Практическая часть
- •3.2.1. Создание файла базы данных и таблиц.
- •3.2.2. Поиск, замена и фильтрация данных
- •Отбор записей с помощью фильтра
- •3.2.3. Запросы
- •3.2.4. Формы
- •3.2.4.1. Создание однотабличной формы
- •3.2.4.2. Создание многотабличной формы
- •3.2.4.3. Создание кнопок управления с помощью мастера
- •3.2.4.4. Кнопочная форма
- •3.2.4.5. Запуск приложения
- •3.2.5. Макросы
- •3.2.6. Отчеты
- •3.3. Варианты заданий
- •3.4. Контрольные вопросы
- •Список литературы
- •Примеры решения некоторых задач для курсовых работ
- •Примеры решения некоторых задач для курсовых работ
1.4.1. Теоретическая часть
Алгоритм решение дифференциального уравнения n-го порядка
на отрезке x[a;b] при начальных условиях y0=y(x0), y′0=y′(x0),…, yn-10=yn-1(x0) методом Рунге-Кутта четвертого порядка (Задача Коши).
Исходное уравнение сведем к системе дифференциальных уравнений 1-го порядка, введя обозначение y=z. Тогда получим систему следующего вида:
На каждом шаге воспользуемся формулами интегрирования по методу Рунге-Кутта:
yi = yi-1 +1/6(k1 +2k2 +2k3 + k4 );
z1,i = z1,i-1+1/6(l1 +2l2 +2l3 + l4 );
……………………………………………
zn-1,i = zn-1,i-1+1/6(m1 +2m2 +2m3 + m4 );
Здесь k1=h*f1(xi-1, yi-1, z1,i-1, …, zn-1,i-1);
l1=h* f2(xi-1, yi-1, z1,i-1, …, zn-1,i-1);
……………………………………
m1=h* fn(xi-1 , yi-1 , z1,i-1, …, zn-1,i-1);
k2 =h* f1(xi-1+h/2, yi-1+ k1/2, z1,i-1+ l1/2,…, zn-1,i-1 + m1/2);
l2 =h* f2(xi-1+h/2, yi-1+ k1/2, z1,i-1+ l1/2,…, zn-1,i-1 + m1/2);
……………………………………
m2=h* fn(xi-1+h/2, yi-1 + k1/2, z1,i-1+ l1/2,…, zn-1,i-1 + m1/2);
k3 =h* f1(xi-1+h/2 , yi-1+ k2/2 , z1,i-1+ l2/2,…, zn-1,i-1 + m2/2);
l3 =h* f2(xi-1+h/2 , yi-1+ k2/2 , z1,i-1+ l2/2,…, zn-1,i-1 + m2/2);
……………………………………
m3=h* fn(xi-1+h/2, yi-1 + k2/2, z1,i-1+ l2/2,…, zn-1,i-1 + m2/2);
k4 =h* f1(xi-1+h , yi-1+ k3 , z1,i-1+ l3,…, zn-1,i-1 + m3);
l4 =h* f2(xi-1+h , yi-1+ k3 , z1,i-1+ l3,…, zn-1,i-1 + m3);
……………………………………
m4=h* fn(xi-1+h, yi-1 + k3, z1,i-1+ l3,…, zn-1,i-1 + m3);
где h=(b-a)/n – шаг интегрирования, n - число шагов.
1.4.2. Практическая часть
Постановка задачи. Решить дифференциальное уравнение 2-го порядка
на отрезке [1;1,5], удовлетворяющее начальным условиям y0 =y(1)= 5 и z0= y(1)=z(1)= –1. На этом же отрезке вычислить точное (аналитическое) решение этого дифференциального уравнения: y=5-ln(x).
Алгоритм решение дифференциального уравнения 2-го порядка
на отрезке [a;b] при начальных условиях y0=y(x0) и y′0=y′(x0) методом Рунге-Кутта.
Исходное уравнение сведем к системе дифференциальных уравнений 1-го порядка, введя обозначение y=z. Тогда получим систему следующего вида:
На каждом шаге воспользуемся формулами интегрирования по методу Рунге-Кутта:
yi = yi-1 +1/6(k1 +2k2 +2k3 + k4 );
zi = zi-1+1/6(l1 +2l2 +2l3 + l4 ) ,
Здесь k1=h*f(xi-1 , yi-1 , zi-1);
l1=h*g(xi-1 , yi-1 , zi-1);
k2 =h*f(xi-1+h/2 , yi-1+k1/2 , zi-1+l1/2);
l2 =h*g(xi-1+h/2 , yi-1+k1/2 , zi-1+l1/2);
k3 =h*f(xi-1+h/2 , yi-1+k2/2 , zi-1+l2/2);
l3 =h*g(xi-1+h/2 , yi-1+k2/2 , zi-1+l2/2);
k4 =h*f(xi-1+h , yi-1+k3 , zi-1+l3);
l4 =h*g(xi-1+h , yi-1+k3 , zi-1+l3),
Для решения дифференциального уравнения 2-го порядка модифицированным методом Эйлера следует воспользоваться формулами интегрирования:
yi = yi-1 +(k1+k2)/2 ;
zi = zi-1 +(l1+l2)/2 ,
где k1=h*f(xi-1 , yi-1 , zi-1); l1=h*g(xi-1 , yi-1 , zi-1);
k2=h*f(xi-1+h , yi-1+ k1 , zi-1+ l1);
l2=h*g(xi-1+h , yi-1+ k1 , zi-1 + l1).
Программный код решения дифференциального уравнения 2-го порядка методом Рунге-Кутта.
Dim ymax As Double, ymin As Double
Dim xmax As Double, xmin As Double
Dim ax() As Double, ay() As Double
Dim a As Double, b As Double, n As Double
Private Function f(x As Double, y As Double, z As Double) As Double
f = z
End Function
Private Function g(x As Double, y As Double, z As Double) As Double
g = -z / x ‘Это все равно, что y″= -y′/x
End Function
Private Sub Form_Load()
ss$ = ""
a = InputBox("Нижняя граница Х",,1)
b = InputBox("Верхняя граница Х",,1.5)
n = InputBox("Число точек на границе",,10)
y0# = InputBox("Начальное зн.функции","y", 5)
z0# = InputBox("Начальное зн.производной","dy", -1)
y# = y0
z# = z0
x# = a
h# = (b - a) / n
ReDim ax(n)
ReDim ay(n)
i = 0
Do While x < b + h
yy# = 5 - Log(x)
ss = ss & "X=" & Format(x, "#0.000") & Space(5) & _
"Точ. решение = " & Format(yy, "#0.00000000") & Space(5) & _
" Y = " & Format(y, "#0.00000000") & vbCrLf
k1# = h * f(x, y, z)
i1# = h * g(x, y, z)
k2# = h * f(x + h / 2, y + k1 / 2, z + i1 / 2)
i2# = h * g(x + h / 2, y + k1 / 2, z + i1 / 2)
k3# = h * f(x + h / 2, y + k2 / 2, z + i2 / 2)
i3# = h * g(x + h / 2, y + k2 / 2, z + i2 / 2)
k4# = h * f(x + h, y + k3, z + i3)
i4# = h * g(x + h, y + k3, z + i3)
ax(i) = x : ay(i) = y
y = y + (k1 + 2 * k2 + 2 * k3 + k4) / 6
z = z + (i1 + 2 * i2 + 2 * i3 + i4) / 6
x = x + h
i = i + 1
Loop
Text1 = ss
i = 0
ymax = ay(i)
ymin = ay(i)
xmin = a
xmax = b
D
Рис.7
If ay(i) > ymax Then ymax = ay(i)
If ay(i) < ymin Then ymin = ay(i)
i = i + 1
Loop Until>UBound(ay) '>n
If ymin > 0 Then ymin = 0
If ymax < 0 Then ymax = 0
If xmin > 0 Then xmin = 0
If xmax < 0 Then xmax = 0
Picture1.Scale (xmin - 0.05, _
ymax + 0.1)-(xmax + 0.05, _
ymin - 0.1)
End Sub
Private Sub Picture1_Click()
Label1.Visible = False
Picture1.Cls
Picture1.BackColor = vbWhite
Picture1.DrawWidth = 2
Picture1.Line (xmin, ymin)-(xmax, ymin)
Picture1.Line (xmin, ymin)-(xmin, ymax) 'ОСИ: x, y
i& = 0
Picture1.DrawWidth = 3
Do 'Graphic
If i <= n - 1 Then
Picture1.Line (ax(i), ay(i))-(ax(i + 1), ay(i + 1)), vbRed
End If
i = i + 1
Loop Until i > UBound(ay)
Picture1.DrawWidth = 1
Picture1.DrawStyle = 2
For j# = xmin To xmax Step 0.5 'Grid
Picture1.Line (j, ymin)-(j, ymax), vbBlack
Next
For j# = ymin To ymax Step 0.5
Picture1.Line (xmin, j)-(xmax, j), vbBlack
Next
Picture1.FontBold = True
Picture1.CurrentX = xmin + 0.05 'Label's
Picture1.CurrentY = ymax - 0.1
Picture1.Print "Y"
Picture1.CurrentX = xmax - 0.1
Picture1.CurrentY = ymin + 0.5
Picture1.Print "X"
P
Рис.8
Picture1.CurrentX = xmax - 0.03
Picture1.CurrentY = ymin + 0.5
Picture1.Print Format(b, "#0.0")
Picture1.CurrentX = xmax - 0.53
Picture1.CurrentY = ymin + 0.5
Picture1.Print Format(a, "#0.0")
Picture1.CurrentX = xmin - 0.05
Picture1.CurrentY = ymax - 0.01
Picture1.Print Format(ymax,"#0")
Picture1.CurrentX = xmin - 0.05
Picture1.CurrentY = ymin + 0.5
Picture1.Print Format(ymin,"#0")
End Sub