
- •«Решение нелинейных уравнений средствами Microsoft Excel»
- •Ó Ростовский государственный строительный университет, 2011 Введение
- •1. Отделение корней
- •Лабораторная работа № 1 на тему: «Отделение корней нелинейного уравнения аналитически и графически»
- •Образец выполнения лабораторной работы №1
- •Варианты заданий для лабораторной работы №1
- •2. Уточнение корней нелинейного уравнения при помощи некоторых численных методов
- •2.1. Уточнение корней методом половинного деления (дихотомии)
- •2.2. Уточнение корней методом хорд
- •2.3. Уточнение корней методом касательных (метод Ньютона)
- •2.4. Уточнение корней методом простой итерации
- •2.5. Сравнение эффективности методов
- •Лабораторная работа № 2 на тему: «Уточнение корней нелинейного уравнения при помощи некоторых численных методов»
- •Образец выполнения лабораторной работы №2
- •3. Нахождение корней нелинейного уравнения средствами ms Excel
- •3.1. Нахождение корней с помощью циклических ссылок
- •3.2. Нахождение корней с помощью подбора параметра
- •3.3. Нахождение корней с помощью поиска решения
- •Лабораторная работа № 3 на тему «Решение нелинейных уравнений средствами программы ms Excel»
- •Образец выполнения лабораторной работы №3
- •Численные методы решения нелинейных уравнений средствами vba
- •4.1. Начальные сведения: vba-проект, редактор vba, модуль
- •Общие процедуры
- •Процедуры обработки событий
- •4.2.2. Процедуры-функции (Function) Встроенные функции
- •Функции преобразования типов
- •Математические функции
- •Системные функции
- •Определяемые функции
- •4.2.3. Создание процедур и (или) определяемых функций
- •4.3. Объявление переменных
- •Базовые типы переменных Visual Basic
- •Лабораторная работа № 4 на тему «Программирование некоторых численных методов решения нелинейных уравнений на vba»
- •Образец выполнения лабораторной работы №4
- •Варианты заданий для лабораторных работ №2, №3, №4
- •Ответы к лабораторной работе №1
- •Ответы к лабораторным работам №2, №3, №4
- •Использованная литература
Лабораторная работа № 4 на тему «Программирование некоторых численных методов решения нелинейных уравнений на vba»
Цель работы:
Получение практических навыков в организации итерационных процессов.
Знакомство с численными методами решения алгебраических и трансцендентных уравнений.
Получение навыков составления блок-схемы алгоритма и определения данных.
Овладение практическими навыками решения нелинейных уравнений средствами программы MS Excel.
Постановка задачи:
Предварительно локализовав отрезок, содержащий первый положительный корень нелинейного уравнения f(x)=0, разработать проект VBA, позволяющий уточнить его с заданной точностью, используя: а) метод половинного деления; б) метод хорд; в) метод касательных; г) метод простой итерации.
Выбор метода решения нелинейного уравнения осуществить с помощью элементов управления OptionButton, помещённых на пользовательскую форму (UserForm). Элементы управления OptionButton сгруппировать с помощью элемента управления Frame. Для каждого из перечисленных выше численных методов спроектировать отдельную пользовательскую форму (UserForm) на которой разместить необходимые объекты (элементы управления Label – для подписи на форме комментариев для пользователя; элементы управления TextBox – для ввода точности, и вывода найденного корня и числа итераций, за которое удалось найти требуемое значение корня с заданной точностью; элементы управления CommandButton – для выхода, вычисления корня и перехода на следующую и (или) предыдущую формы). Необходимые вычисления оформить процедурами функциями.
Содержание отчета :
Постановка задачи для конкретного варианта.
Описание процесса отделения отрезка, содержащего положительный корень для конкретной функции из своего варианта (см. лаб. раб. №1).
Обоснование сходимости (применимости метода) каждого из перечисленных в условии итерационных процессов в применении к конкретной функции и найденному отрезку.
Эскизы всех пользовательских форм (UserForm) с подписанными именами нанесённых на них элементов управления.
Тексты программ и блок-схемы всех необходимых процедур с указанием названия модуля в которых они сохранены.
Результаты работы для каждого из методов решения нелинейных уравнений выписать в следующем виде:
Решение уравнения
f(x)=0
Название численного метода
метод половинного деления
метод хорд
метод касательных
метод простой итерации
Вычисленное значение корня
Число итераций
Расписать структуру полученного проекта.
Отразить на схеме взаимосвязь имеющихся модулей.
Проанализировать полученные результаты и сравнить с результатами предыдущих лабораторных работ.
Образец выполнения лабораторной работы №4
1. Постановка задачи для конкретного варианта.
Предварительно локализовав отрезок, содержащий первый положительный корень нелинейного уравнения e-x-x=0, разработать проект VBA, позволяющий уточнить его с заданной точностью, используя: а) метод половинного деления; б) метод хорд; в) метод касательных; г) метод простой итерации.
Выбор метода решения нелинейного уравнения осуществить с помощью элементов управления OptionButton, помещённых на пользовательскую форму (UserForm). Элементы управления OptionButton сгруппировать с помощью элемента управления Frame. Для каждого из перечисленных выше численных методов спроектировать отдельную пользовательскую форму (UserForm) на которой разместить необходимые объекты (элементы управления Label – для подписи на форме комментариев для пользователя; элементы управления TextBox – для ввода точности, и вывода найденного корня и числа итераций, за которое удалось найти требуемое значение корня с заданной точностью; элементы управления CommandButton – для выхода, вычисления корня и перехода на следующую и предыдущую формы). Необходимые вычисления оформить процедурами функциями.
Описание процесса отделения отрезка, содержащего первый положительный корень для конкретной функции из своего варианта.
Этот пункт проделать самостоятельно (см. лаб. раб. №1). Мы воспользуемся результатами предыдущих лабораторных работ (2 и 3). Имеем: f(x)= e-x-x, начало отрезка a=0, конец отрезка b=1.
Обоснование сходимости (применимости метода) каждого из перечисленных в условии итерационных процессов в применении к конкретной функции и найденному отрезку. (Этот пункт также проделать самостоятельно (см. лаб. раб. №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-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
Результаты работы для каждого из методов решения нелинейных уравнений выписать в следующем виде:
Решение уравнения
e-x-x=0
Название численного метода
метод половинного деления
метод хорд
метод касательных
метод простой итерации
Вычисленное значение корня
0,5672
0,5672
0,5671
0,5671
Число итераций
14
5
4
14
Расписать структуру полученного проекта.
Отразить на схеме взаимосвязь имеющихся модулей.
Модуль UserForm1
Модуль UserForm2
Модуль UserForm3
Модуль UserForm4
Модуль UserForm5
Модуль1
Проанализировать полученные результаты и сравнить с результатами предыдущих лабораторных работ.
Таблица 3