Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.docx
Скачиваний:
9
Добавлен:
02.01.2024
Размер:
2.27 Mб
Скачать

Приложение d. Код проекта

Option Strict On

Option Explicit On

Imports System.Math

Module Module1

'Процедура ввода исходных данных

Sub add(ByRef a As Double, ByVal t As TextBox)

a = Val(t.Text)

End Sub

'Процедура вывода массива значений y

Sub printLBy(ByRef masiv() As Double, ByRef l As ListBox)

Dim i As Integer

For i = 0 To UBound(masiv) - 1

l.Items.Add(Format(masiv(i), "0.0000000"))

Next i

End Sub

'Процедура вывода массива значений x

Sub printLBx(ByRef masiv() As Double, ByRef l As ListBox)

Dim i As Integer

For i = 0 To UBound(masiv) - 1

l.Items.Add(Format(masiv(i), "0.0"))

Next i

End Sub

'Пррцедуры, реализующей метод автоматического выбора шага

Sub Runge_step(ByVal x0 As Double, ByVal y0 As Double, ByVal h0 As Double, ByVal n As Integer, ByVal eps As Double, ByRef xm() As Double, ByRef ym() As Double)

Dim h, y, y1, x As Double

Dim m As Integer 'коэффициент дробления шага

Dim p As Integer

Dim i As Integer = 0

Form3.ListBox1.Items.Add(i)

Form3.ListBox4.Items.Add(vbNewLine)

Form3.ListBox5.Items.Add(vbNewLine)

p = 1 'метод Эйлер - это формула Рунге-Кутта 1 порядка отсюда следует ,что p=1

xm(0) = x0

ym(0) = y0

For i = 1 To n

h = h0

m = 1

y = r(x0, y0, h, m)

Do

y1 = y : h = h / 2

x = x0 : y = y0

m = 2 * m

y = r(x, y, h, m)

Loop Until Abs(y - y1) / (2 ^ p - 1) < eps

x0 = x0 + h0

y0 = y

xm(i) = x0

ym(i) = y0

Form3.ListBox1.Items.Add(i)

Form3.ListBox4.Items.Add(h)

Form3.ListBox5.Items.Add(m)

Next i

printLBx(xm, Form2.ListBox1)

printLBy(ym, Form2.ListBox2)

printLBx(xm, Form3.ListBox2)

printLBy(ym, Form3.ListBox3)

End Sub

'Процедура решения ОДУ методом Эйлера

Function r(ByVal x As Double, ByVal y As Double, ByVal h As Double, ByVal m As Double) As Double

For j = 1 To m

y = y + h * f_odu(x, y)

x = x + h

Next j

r = y

End Function

'Функция вычисления значения функции

Function f_odu(ByVal x As Double, ByVal y As Double) As Double

f_odu = Sqrt(x) + Sqrt(y)

End Function

' Процедура получения интеграла от таблицы решения ОДУ

Sub Integral_ot_ODU(ByRef ym() As Double, ByVal h As Double, ByRef integral_I As Double)

Dim i As Integer

Dim y0 As Double ' в эту переменную записывается значение y(0)

Dim y1_9 As Double 'в эту переменную записывается сумма значений y(1) до y(9)

Dim y10 As Double ' в эту переменную записывается значение y(10)

integral_I = 0

For i = 0 To UBound(ym)

If i = 0 Then

y0 = ym(i)

ElseIf (i <> 0) And (i <> UBound(ym) - 1) Then

y1_9 = y1_9 + ym(i)

Else

y10 = ym(i)

End If

Next i

integral_I = h / 2 * (y0 + 2 * (y1_9) + y10)

Form2.ListBox4.Items.Add(Format(integral_I, "0.0000000"))

End Sub

' Процедура получения полинома Лагранжа в явном виде

Sub Lagrange_polynom(ByRef xm() As Double, ByRef ym() As Double, ByRef a As Double, ByRef b As Double, ByRef c As Double)

Dim t As String

a = ym(0) / ((xm(0) - xm(5)) * (xm(0) - xm(10))) + ym(5) / ((xm(5) - xm(0)) * (xm(5) - xm(10))) + ym(10) / ((xm(10) - xm(0)) * (xm(10) - xm(5)))

b = (ym(0) * (-1) * (xm(5) + xm(10))) / (xm(0) - xm(5) * (xm(0) - xm(10))) - (ym(5) * (xm(0) + xm(10))) / ((xm(5) - xm(0)) * (xm(5) - xm(10))) - (ym(10) * (xm(0) + xm(5))) / ((xm(10) - xm(0)) * (xm(10) - xm(5)))

c = (ym(0) * xm(5) * xm(10)) / (xm(0) - xm(5) * (xm(0) - xm(10))) + (ym(5) * xm(0) * xm(10)) / ((xm(5) - xm(0)) * (xm(5) - xm(10))) + (ym(10) * xm(0) * xm(5)) / ((xm(10) - xm(0)) * (xm(10) - xm(5)))

t = Format(a, "0.00000") + "*" + "x^2" + "+" + Format(b, "0.00000") + "*" + "x" + "+" + CStr(c)

Form2.ListBox3.Items.Add(t)

End Sub

' Процедура получения интеграла от полинома Лагранжа 2 степени

Sub Integral_ot_Lagranga(ByVal a As Double, ByVal b As Double, ByVal eps As Double, ByVal aa As Double, ByVal bb As Double, ByVal cc As Double, ByRef integral_L As Double)

Dim n As Integer

Dim h As Double

Dim s, s1 As Double

Dim i As Integer

Dim p As Integer = 2 'метод Трапеций, p=2

n = 1

h = (b - a)

s = (Polynom(a, aa, bb, cc) + Polynom(b, aa, bb, cc)) * h / 2

Do

n = 2 * n

h = (b - a) / n

s1 = s

s = Polynom(a, aa, bb, cc) + Polynom(b, aa, bb, cc)

For i = 1 To n - 1

s = s + 2 * Polynom(a + i * h, aa, bb, cc)

Next i

s = s * h / 2

Form4.ListBox1.Items.Add(h)

Form4.ListBox2.Items.Add(Format(s, "0.0000000"))

Loop Until Abs(s - s1) / (2 ^ p - 1) < eps

integral_L = s

Form2.ListBox5.Items.Add(Format(s, "0.0000000"))

End Sub

'Функция, вычисляющая значение подынтегральной функции,

Function Polynom(ByVal x As Double, ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double

Polynom = a * x ^ 2 + b * x + c

End Function

End Module

'Форма с исходных данных

Option Strict On

Option Explicit On

Imports System.Math

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Form2.Show()

Form2.Focus()

Me.Visible = False

Dim a As Double 'Левая граница отрезка и нижний предел интегрирования

Dim b As Double 'Правая граница отрезка и верхний предел интегрирования

Dim x0 As Double 'начальные условие ОДУ

Dim y0 As Double ' начальные условие ОДУ

Dim h0 As Double ' Шаг вычисления

Dim eps As Double ' Требуемая точность

Dim n As Integer

Dim integral_I As Double 'Интеграл, полученный от таблицы решения ОДУ

Dim integral_L As Double 'Интеграл, полученный от полинома Лагранжа 2 степени

Dim R As Double 'Погрешность от разницы Интегралов от таблицы решения ОДУ и полинома Лагранжа 2 степени

Dim aa As Double 'Коэффициент многочлена Лагранжа

Dim bb As Double 'Коэффициент многочлена Лагранжа

Dim cc As Double 'Коэффициент многочлена Лагранжа

add(a, TextBox1)

add(b, TextBox2)

add(x0, TextBox3)

add(y0, TextBox4)

add(h0, TextBox5)

add(eps, TextBox6)

n = CInt((b - a) / h0) 'количество точек в таблице

Dim xm(n + 1) As Double 'массив значений x(i)

Dim ym(n + 1) As Double ' массив значений y(i)

Runge_step(x0, y0, h0, n, eps, xm, ym)

Integral_ot_ODU(ym, h0, integral_I)

Lagrange_polynom(xm, ym, aa, bb, cc)

Integral_ot_Lagranga(a, b, eps, aa, bb, cc, integral_L)

R = integral_I - integral_L

Form2.ListBox6.Items.Add(Format(R, "0.0000000"))

Button1.Enabled = False

Button2.Enabled = True

End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

Form2.Show()

Form2.Focus()

Me.Visible = False

End Sub

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

End

End Sub

'Кнопка сброса для ввода новых значений

Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click

Form2.ListBox1.Items.Clear() : Form3.ListBox1.Items.Clear() : Form4.ListBox1.Items.Clear()

Form2.ListBox2.Items.Clear() : Form3.ListBox2.Items.Clear() : Form4.ListBox2.Items.Clear()

Form2.ListBox3.Items.Clear() : Form3.ListBox3.Items.Clear()

Form2.ListBox4.Items.Clear() : Form3.ListBox4.Items.Clear()

Form2.ListBox5.Items.Clear() : Form3.ListBox5.Items.Clear()

Form2.ListBox6.Items.Clear()

Me.TextBox1.Text = ""

Me.TextBox2.Text = ""

Me.TextBox3.Text = ""

Me.TextBox4.Text = ""

Me.TextBox5.Text = ""

Me.TextBox6.Text = ""

Button1.Enabled = True

Button2.Enabled = False

End Sub

End Class

'Форма с основными результатами

Public Class Form2

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Form1.Show()

Form1.Focus()

Me.Visible = False

End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

End

End Sub

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

form3.show()

Form3.Focus()

Me.Visible = False

End Sub

Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click

Form4.show()

Form4.Focus()

Me.Visible = False

End Sub

End Class

' Форма с промежуточными результатами решение ОДУ

Public Class Form3

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Form2.Show()

Form2.Focus()

Me.Visible = False

End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

End

End Sub

End Class

' Форма с промежуточными результатами интегрирования

Public Class Form4

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Form2.Show()

Form2.Focus()

Me.Visible = False

End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

End

End Sub

End Class