- •Кафедра вычислительной математики и программирования
- •Практическое решение инженерных и научных задач на пк с использованием математических пакетов
- •Описание последовательности решения задачи
- •Обоснование выбора методов
- •Проверка сходимости выбора методов
- •Тестирование процедур
- •Описание программы
- •Основные результаты и выводы по работе
- •Содержание отчета
- •Результаты, полученные в ходе выполнения курсовой работы
- •Проверка решения задачи
Описание программы
Интерполяция
методом Ньютона
Поиск минимума методом
золотого сечения
Код модуля
Option Strict On
Option Explicit On
Imports System.Math
Module Module1
Public eps As Double = 0.0001
Public y1, y2 As Double
Sub KonechnyyeRaznosti(ByVal f() As Double, ByRef DY(,) As Double, ByVal n As Integer)
Dim i, j As Integer
For i = 0 To n
DY(i, 0) = f(i)
For j = 1 To n
DY(i, j) = 0
Next j
Next i
For j = 1 To n
For i = 0 To n - j
DY(i, j) = DY(i + 1, j - 1) - DY(i, j - 1)
Next i
Next j
End Sub
Sub newton(ByVal q As Double, ByVal m As Integer, ByVal DY(,) As Double, ByRef p As Double, ByRef R As Double)
Dim qq, fact As Double
Dim j As Integer
p = DY(0, 0)
qq = 1
fact = 1
For j = 1 To m
fact = fact * j
qq = qq * (q - j + 1)
R = qq * DY(0, j) / fact
p = p + R
Next j
End Sub
Function interp_po_newtonu(ByVal x As Double, ByVal DY(,) As Double, ByVal x0 As Double, ByVal h As Double, ByVal n As Integer) As Double
Dim i As Integer
Dim p As Double
Dim q As Double, R As Double
q = (x - x0) / h
i = 1
newton(q, i, DY, p, R)
Do While Abs(R) > eps And i < n
i = i + 1
newton(q, i, DY, p, R)
Loop
Return p
End Function
Function F(ByVal x As Double) As Double
Return y1 * x ^ 2 - 2.5 * y2 * x - 3
End Function
Sub sechenie(ByVal a As Double, ByVal b As Double, _
ByVal eps As Double, ByRef xmin As Double, _
ByRef z As String)
Dim x1, x2, F1, F2, k1, k2 As Double
z = ""
k1 = (3 - Sqrt(5)) / 2
k2 = 1 - k1
x1 = a + k1 * (b - a)
x2 = a + k2 * (b - a)
F1 = F(x1)
F2 = F(x2)
z = Format(a, "0.00000") + Space(3) + Format(b, "0.00000") _
+ Space(3) + Format(x1, "0.00000") + Space(3) + _
Format(x2, "0.00000") + Space(3) + Format(F1, "0.00000") _
+ Space(3) + Format(F2, "0.00000") + Space(3) + _
Format(b - a, "0.00000") + vbNewLine
Do Until b - a < eps
If F1 < F2 Then
b = x2
x2 = x1
F2 = F1
x1 = a + k1 * (b - a)
F1 = F(x1)
Else
a = x1
x1 = x2
x2 = a + k2 * (b - a)
F1 = F2
F2 = F(x2)
End If
z = z + Format(a, "0.00000") + Space(3) + Format(b, "0.00000") _
+ Space(3) + Format(x1, "0.00000") + Space(3) + _
Format(x2, "0.00000") + Space(3) + Format(F1, "0.00000") _+ Space(3) + Format(F2, "0.00000") + Space(3) + _Format(b - a, "0.00000") + vbNewLine
Loop
xmin = (a + b) / 2
End Sub
End Module
Код Form1
Option Strict On
Option Explicit On
Public Class Form1
Sub vvod(ByRef x() As Double, ByRef y() As Double, ByRef x1 As Double, ByRef x2 As Double)
Dim i As Integer
For i = 0 To UBound(x)
x(i) = Val(RichTextBox1.Lines(i))
y(i) = Val(RichTextBox2.Lines(i))
Next
x1 = Val(TextBox1.Text)
x2 = Val(TextBox2.Text)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x(6), y(6) As Double
Dim x1, x2 As Double
Dim DY(6, 6) As Double
Dim g(6) As Double
vvod(x, y, x1, x2)
KonechnyyeRaznosti(y, DY, 6)
y1 = interp_po_newtonu(x1, DY, 0, 0.1, 6)
g = y
Array.Reverse(g)
KonechnyyeRaznosti(g, DY, 6)
y2 = interp_po_newtonu(x2, DY, 0.6, -0.1, 6)
TextBox4.Text = CStr(y1)
TextBox5.Text = CStr(y2)
Button2.Enabled = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Form2.Show()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
End
End Sub
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
End Sub
Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label6.Click
End Sub
End Class
Код Form2
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, xmin As Double
Dim z As String = ""
a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
sechenie(a, b, eps, xmin, z)
TextBox3.Text = z
TextBox4.Text = CStr(xmin)
TextBox5.Text = CStr(F(xmin))
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub
End Class
