Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
reshenie_nelin_uravnenia_sredstvami_ME.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
993.28 Кб
Скачать

Лабораторная работа № 4 на тему «Программирование некоторых численных методов решения нелинейных уравнений на vba»

Цель работы:

  1. Получение практических навыков в организации итерационных процессов.

  2. Знакомство с численными методами решения алгебраических и трансцендентных уравнений.

  3. Получение навыков составления блок-схемы алгоритма и определения данных.

  4. Овладение практическими навыками решения нелинейных уравнений средствами программы MS Excel.

Постановка задачи:

Предварительно локализовав отрезок, содержащий первый положительный корень нелинейного уравнения f(x)=0, разработать проект VBA, позволяющий уточнить его с заданной точностью, используя: а) метод половинного деления; б) метод хорд; в) метод касательных; г) метод простой итерации.

Выбор метода решения нелинейного уравнения осуществить с помощью элементов управления OptionButton, помещённых на пользовательскую форму (UserForm). Элементы управления OptionButton сгруппировать с помощью элемента управления Frame. Для каждого из перечисленных выше численных методов спроектировать отдельную пользовательскую форму (UserForm) на которой разместить необходимые объекты (элементы управления Label – для подписи на форме комментариев для пользователя; элементы управления TextBox – для ввода точности, и вывода найденного корня и числа итераций, за которое удалось найти требуемое значение корня с заданной точностью; элементы управления CommandButton – для выхода, вычисления корня и перехода на следующую и (или) предыдущую формы). Необходимые вычисления оформить процедурами функциями.

Содержание отчета :

  1. Постановка задачи для конкретного варианта.

  2. Описание процесса отделения отрезка, содержащего положительный корень для конкретной функции из своего варианта (см. лаб. раб. №1).

  3. Обоснование сходимости (применимости метода) каждого из перечисленных в условии итерационных процессов в применении к конкретной функции и найденному отрезку.

  4. Эскизы всех пользовательских форм (UserForm) с подписанными именами нанесённых на них элементов управления.

  5. Тексты программ и блок-схемы всех необходимых процедур с указанием названия модуля в которых они сохранены.

  6. Результаты работы для каждого из методов решения нелинейных уравнений выписать в следующем виде:

    Решение уравнения

    f(x)=0

    Название численного метода

    метод половинного деления

    метод хорд

    метод касательных

    метод простой итерации

    Вычисленное значение корня

    Число итераций

  7. Расписать структуру полученного проекта.

  8. Отразить на схеме взаимосвязь имеющихся модулей.

  9. Проанализировать полученные результаты и сравнить с результатами предыдущих лабораторных работ.

Образец выполнения лабораторной работы №4

1. Постановка задачи для конкретного варианта.

Предварительно локализовав отрезок, содержащий первый положительный корень нелинейного уравнения e-x-x=0, разработать проект VBA, позволяющий уточнить его с заданной точностью, используя: а) метод половинного деления; б) метод хорд; в) метод касательных; г) метод простой итерации.

Выбор метода решения нелинейного уравнения осуществить с помощью элементов управления OptionButton, помещённых на пользовательскую форму (UserForm). Элементы управления OptionButton сгруппировать с помощью элемента управления Frame. Для каждого из перечисленных выше численных методов спроектировать отдельную пользовательскую форму (UserForm) на которой разместить необходимые объекты (элементы управления Label – для подписи на форме комментариев для пользователя; элементы управления TextBox – для ввода точности, и вывода найденного корня и числа итераций, за которое удалось найти требуемое значение корня с заданной точностью; элементы управления CommandButton – для выхода, вычисления корня и перехода на следующую и предыдущую формы). Необходимые вычисления оформить процедурами функциями.

  1. Описание процесса отделения отрезка, содержащего первый положительный корень для конкретной функции из своего варианта.

Этот пункт проделать самостоятельно (см. лаб. раб. №1). Мы воспользуемся результатами предыдущих лабораторных работ (2 и 3). Имеем: f(x)= e-x-x, начало отрезка a=0, конец отрезка b=1.

  1. Обоснование сходимости (применимости метода) каждого из перечисленных в условии итерационных процессов в применении к конкретной функции и найденному отрезку. (Этот пункт также проделать самостоятельно (см. лаб. раб. №2).)

  2. Эскизы всех пользовательских форм (UserForm) с подписанными именами нанесённых на них элементов управления.

а) UserForm1

Label1

OptionButton1

OptionButton2

OptionButton3

OptionButton4

CommandButton1

CommandButton2

Frame1

б) UserForm2

Label1

Label2

Label3

CommandButton2

CommandButton1

CommandButton3

TextBox1

TextBox2

TextBox3

в) UserForm3, UserForm4, UserForm5 спроектируйте аналогично UserForm2. (Все элементы управления и их имена аналогичны тем, что размещены на UserForm2. Поменять только свойство Caption соответствующих форм на название того метода который в данный момент реализуется.)

  1. Тексты программ и блок-схемы всех необходимых процедур с указанием названия модуля в которых они сохранены.

Ниже приводятся тексты всех необходимых процедур. Блок-схемы тех процедур, в которых реализуются тот или иной численный метод решения нелинейных уравнений приводятся в прил 1-4. Естественно, что они требуют адаптации под написанные ниже тексты программ. Недостающие блок-схемы оформить самостоятельно.

а) Модуль UserForm1

Private Sub CommandButton1_Click()

UserForm1.Hide

End Sub

Private Sub CommandButton2_Click()

UserForm1.Hide

If OptionButton1.Value = True Then

UserForm2.Show

ElseIf OptionButton2.Value = True Then

UserForm3.Show

ElseIf OptionButton3.Value = True Then

UserForm4.Show

ElseIf OptionButton4.Value = True Then

UserForm5.Show

End If

End Sub

Private Sub UserForm_Initialize()

OptionButton1.Value = True

End Sub

б) Модуль UserForm2

Private Sub CommandButton1_Click()

UserForm2.Hide

UserForm1.Show

End Sub

Private Sub CommandButton3_Click()

UserForm2.Hide

UserForm3.Show

End Sub

Private Sub CommandButton2_Click()

Dim c As Single

Dim n As Integer

a = 0

b = 1

eps = Val(TextBox1.Text)

n = 0

Do While (b - a)>= eps

xn = (a + b) / 2

n = n + 1

If f(a)*f(xn)<= 0 Then b = xn Else a = xn

Loop

TextBox2.Text = xn

TextBox3.Text = n

End Sub

Private Sub UserForm_Initialize()

TextBox2.Enabled = False

TextBox3.Enabled = False

End Sub

в) Модуль UserForm3

Процедуры обработки событий для CommandButton1 и 3, а также пользовательской формы (Initialize) написать самостоятельно.

Private Sub CommandButton2_Click()

a = 0

xn=1

eps = Val(TextBox1.Text)

n = 0

Do

xn = xn - f(xn) * (xn - a) / (f(xn) - f(a))

n = n + 1

Loop While Abs(f(xn)) >= eps

TextBox2.Value = xn

TextBox3.Value = n

End Sub

г) Модуль UserForm4

Процедуры обработки событий для CommandButton1 и 3, а также пользовательской формы (Initialize) написать самостоятельно.

Private Sub CommandButton2_Click()

xn=0

eps = Val(TextBox1.Text)

n = 0

Do Until Abs(f(xn)) < eps

xn = xn - f(xn) / производная_f(xn)

n = n + 1

Loop

TextBox2.Value = xn

TextBox3.Value = n

End Sub

д) Модуль UserForm5

Процедуры обработки событий для CommandButton1 и 3, а также пользовательской формы (Initialize) написать самостоятельно.

Private Sub CommandButton2_Click()

a=0

b=1

eps = Val(TextBox1.Text)

xn = (a + b) / 2

n = 0

Do

xn = fi(xn)

n = n + 1

Loop Until Abs(f(xn))< eps

TextBox2.Value = xn

TextBox3.Value = n

End Sub

е) Module1

Public Function f(ByVal x As Single) As Single

f = Exp(-x) - x

End Function

Public Function производная_f(ByVal x As Single) As Single

производная_f = -Exp(-x) - 1

End Function

Public Function fi(ByVal x As Single) As Single

fi = Exp(-x)

End Function

  1. Результаты работы для каждого из методов решения нелинейных уравнений выписать в следующем виде:

    Решение уравнения

    e-x-x=0

    Название численного метода

    метод половинного деления

    метод хорд

    метод касательных

    метод простой итерации

    Вычисленное значение корня

    0,5672

    0,5672

    0,5671

    0,5671

    Число итераций

    14

    5

    4

    14

  2. Расписать структуру полученного проекта.

  1. Отразить на схеме взаимосвязь имеющихся модулей.

Модуль UserForm1

Модуль UserForm2

Модуль UserForm3

Модуль UserForm4

Модуль UserForm5

Модуль1

  1. Проанализировать полученные результаты и сравнить с результатами предыдущих лабораторных работ.

Таблица 3

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