Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB-для курсового проектирования4.doc
Скачиваний:
16
Добавлен:
23.08.2019
Размер:
2.36 Mб
Скачать

Введение

Методические указания ориентируют студентов на современную технологию решения задач на ЭВМ с использование визуального и объектного программирования в системе Visual Basic и пакетах MS Excel и Access. Выполнение заданий предусматривает разработку интерфейса приложения. Рассматриваются, широко применяемые в инженерной практике, численные методы решения типовых математических задач, таких, как решение нелинейных алгебраических уравнений и систем, вычисление интегралов, решения дифференциальных уравнений. Студентам предлагается теоретический материал и программа шаблон для практической реализации создания простых Windows-приложений с использованием меню и других элементов управления, как в проектах системы Visual Basic (VB), так и офисных приложениях.

1. Решения задач численными методами в системе Visual Basic

    1. Решение нелинейных уравнений

Цель работы: изучение методов численного решения нелинейных уравнений и приобретение практических навыков по реализации их на ЭВМ.

1.1.1. Теоретическая часть

  • Алгоритм численного решение нелинейного уравнения f(x)=0 на отрезке [a,b] методом деления этого отрезка пополам состоит в следующем.

    • Вычисляются значения функций f(a) и f(b) соответственно для левой и правой границ интервала и делится интервал пополам (для определения точки х).

    • После определения половины текущего интервала, содержащей корень, переменным a или b присваиваем значение х, которое определяем из условия, заданного в условном операторе IF f(a)*f(x)>0 then a=x Else b=x.

    • Процесс повторяется с начала, пока не будет достигнута заданная точность . Условием окончания цикла является истинное значение логического выражения (Abs(b-a)<=) and (Abs(f(x))<=).

  • Алгоритм решение нелинейного уравнения f(x)=0 на отрезке [a,b] методом Ньютона (касательных) состоит в следующем.

    • Корень уравнения на отрезке [a, b] получаем как предел последовательности: .

    • Уточняем корень с точностью  до тех пор, пока не будет выполняться условие . Для сходимости метода достаточно, чтобы отрезок [a, b] содержал единственный корень, а функция f(x) имела на этом отрезке непрерывные производные f(x), f(x) отличные от нуля.

    • Начальное приближение x0 выбирается так, чтобы выполнялось условие f(x0)*f(x0)>0 или |f(x0)*f(x0)|<|f(x0)|2.

  • Алгоритм решение нелинейного уравнения f(x)=0 на отрезке [a,b] методом простой итерации состоит в следующем.

    • Уравнения f(x)=0 преобразуем к виду x=(x), и корень определяем как предел последовательности: .

    • Уточняем корень с точностью  до тех пор, пока не выполнится условие . Условием сходимости процесса итераций является неравенство для всех х в интервале определения корня.

1.1.2. Практическая часть

  • Постановка задачи. Решить уравнение f(x)=x2 - 8x+15=0 на заданном отрезке [a, b] с точностью  методами: деления отрезка пополам, касательных – Ньютона и простой итерации. Допускается, что отрезок [a, b] содержит единственный корень.

    • Программный код решения нелинейного уравнения методом деления отрезка пополам.

Function f(x As Single) As Single

f = x * x - 8 * x + 15

End Function

Private Sub Form_Load()

Dim ss As String

Caption = "Метод деления отрезка пополам"

e! = InputBox("введите погрешность",,0.00001)

Do

a! = InputBox("введите левую границу аргумента" ,, 1)

b! = InputBox("введите правую границу аргумента" ,, 4)

If f(a)*f(b) > 0 Then

MsgBox "На отрезке корны нет", , "Введите новые значения"

End If

Loop Until f(a) * f(b) < 0

Do

x! = (a + b) / 2

If f(a) * f(x) > 0 Then

a = x

Else

b = x

End If

ss = ss & Format(x, "#0.0000000") & vbCrLf

Loop Until Abs(b - a) <= e And Abs(f(x)) <= e

Text1 = ss & vbCrLf & "Корень=" & Format(x, "#0.000") & _

" Функция в корне = " & Format(f(x), "#0.0000000")

End Sub

Рис.1

    • Программный код решения нелинейного уравнения методом Ньютона (касательных).

Function f(x As Single) As Single

f = x * x - 8 * x + 15

End Function

Function df(x As Single) As Single

df = 2 * x - 8

End Function

Function d2f(x As Single) As Single

d2f = 2

End Function

Private Sub Form_Load()

Dim ss As String, t1 As Boolean, t2 As Boolean

Caption = "Метод касательных"

e! = InputBox("введите погрешность",,0.00001)

Do

a! = InputBox("введите левую границу аргумента",,1)

b! = InputBox("введите правую границу аргумента",,4)

t1 = f(a) * d2f(a) > 0

t2 = f(b) * d2f(b) > 0

If t1 Then x! = a

If t2 And Not t1 Then x! = b

Loop Until t1 Or t2

Do

d! = f(x) / df(x)

x = x - d

ss = ss & Format(x, "#0.000") & vbCrLf

Loop Until Abs(d) < e

Text1 = ss & vbCrLf & "Корень=" & Format(x, "#0.000") & _

" Функция в корне = " &_ Format(f(x), "#0.000")

End Sub

Рис.2

    • Программный код решения нелинейного уравнения методом простой итерации.

Function f(x As Single) As Single

f = x * x - 8 * x + 15

End Function

Function fi(x As Single) As Single

fi = (x * x + 15) / 8

End Function

Function dfi(x As Single) As Single

dfi = x / 4

End Function

Private Sub Form_Load()

Dim ss As String, x1 As Single

Caption = "Метод итераций"

e! = InputBox("введите погрешность", , 0.00001)

Do

x! = InputBox("введите нач. приближение корня, например",,4)

If Abs(dfi(x)) > 1 Then

MsgBox "Измените начальное приближение"

End If

Loop Until Abs(dfi(x)) <= 1

Do

x1 = x

x = fi(x1)

ss = ss & Format(x, "#0.000000") & vbCrLf

Loop Until Abs(x1 - x) < e

Text1 = ss & vbCrLf & "Корень=" & Format(x, "#0.000") & _

" Функция в корне = " &_ Format(f(x), "#0.000")

End Sub

Рис.3

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]