Автор: Пользователь скрыл имя, 27 Марта 2015 в 20:48, курсовая работа
Цель курсовой работы.
Рассмотреть объект Range и его свойства. Выполнить сравнительный анализ методов решения уравнений.
Задачи курсовой работы.
Подобрать теоретический материал по свойствам объекта Range и методам решения уравнений (половинного деления и касательных). Выполнить расчеты в MS Excel используя встроенный язык программирования VBA и сделать анализ полученных результатов.
Задание на курсовую работу 3
Введение 4
Глава 1. Теоретическая часть 5
1.1 Свойства объекта Range 5
1.2 Метод половинного деления 11
1.2.1 Описание метода половинного деления 11
1.2.2 Алгоритм метода половинного деления: 11
1.3 Метод касательных 12
1.3.1 Описание метода касательных 12
1.3.2 Алгоритм метода касательных 14
Глава 2. Практическая часть 15
2.1 Решение уравнений 15
2.2 Анализ полученных решений уравнений 15
Заключение 17
Список литературы 18
Приложение 19
Приложение 20
Приложение 21
Приложение 22
В точке F(x0) строится касательная к кривой у = F(x) и ищется ее пересечение с осью х. Точка пересечения принимается за новую итерацию. Метод касательных самый быстрый способ нахождения корней уравнений [3,7].
Итерационная формула имеет вид:
Итерационный процесс проходит до того времени, пока не будет выполнено условие |f(x)|< e , где e - заданная точность.
В данном случае вторая производная функции положительна, поэтому в качестве начального приближения выбрана точка хо = b. Как видно из рисунка 2, метод имеет очень быструю сходимость среди всех методов решения нелинейных уравнений: обычно заданная точность достигается за 2-3 итерации.
Рисунок.2. Иллюстрация метода касательных
Сравнительный анализ методов
К плюсам метода половинного деления конечно стоит отнести его простоту. Им легко вычислять как аналитически, так и программно. К минусам нужно отнести затраты на приведенные итерации, по сравнению с методом хорд и касательных на пример. К плюсам метода касательных относится быстрота нахождения и меньшая затратность на приведенные итерации.
Глава 2. Практическая часть
В приложении 1 приведен листинг модуля на VBA решения примера 1 методом половинного деления (дихотомии). В приложении 2 приведен листинг модуля на VBA решения примера 1 методом касательных. В приложении 3 приведен листинг модуля на VBA решения примера 2 методом половинного деления (дихотомии). В приложении 4 приведен листинг модуля на VBA решения примера 2 методом касательных.
Пример 1
Результаты решения примера приведены в таблице 1.
Таблица 1 – Результаты решения примера 1
Интервалы | ||||||
(-6;-5) |
(-0,5;1) |
(1;2) | ||||
значение корня |
количество итераций |
значение корня |
количество итераций |
значение корня |
количество итераций | |
метод дихотомии |
-5,32 |
11 |
0 |
12 |
1,58 |
11 |
метод касательных |
-5,32 |
3 |
0 |
1 |
1,58 |
4 |
Пример 2
Результаты решения примера приведены в таблице 2.
Таблица 2 – Результаты решения примера 2
Интервалы | ||||
(-1;-0) |
(1;2) | |||
значение корня |
количество итераций |
значение корня |
количество итераций | |
метод дихотомии |
-0,72 |
11 |
1,22 |
11 |
метод касательных |
-0,72 |
4 |
1,22 |
5 |
Вывод: Утверждение, что метод касательных имеет очень быструю сходимость по сравнению с методом половинного деления, подтверждается при решении данных примеров. В таблицах приведены значения корней и количество итерация, необходимых для сходимости методов. Видим, что для метода касательных количество итераций намного меньше потребовалось.
Еще не так давно упоминание Basic (Бейсик) в качестве языка программирования вызывало лишь снисходительную усмешку (а порой и негодование) у большинства профессиональных разработчиков ПО. Объяснялось это просто: "Да, есть такой язык, которым пользуются любители (если не сказать "чайники"). Но ставить "Васик" в один ряд с настоящими средствами программирования - это просто смешно".
Сейчас вряд ли кто-то рискнет высказать такое мнение: за прошедшие годы Microsoft Visual Basic (VB) превратился в самый популярный в мире инструмент разработки приложений. Более того, знание его основ сегодня фактически является обязательным для всех программистов, какими бы средствами они не пользовались. Это объясняется двумя взаимосвязанными факторами. Во-первых, VB очень широко распространен и используется не только в качестве самостоятельного средства, но и в виде системы программирования, встроенной в многочисленные прикладные программы (в частности MS Office). Во-вторых, превратившись в серьезный профессиональный инструмент, VB остался очень удобным средством для обучения программирования и решения небольших задач.
В результате выполнения курсовой работы были решены следующие задачи: закрепление и углубление теоретических знаний по разделам информатики; овладение навыками самостоятельной работы (решение примеров с помощью встроенного языка программирования VBA в MS Excel). Выполнен анализ полученных решений и сделан вывод по сравнению методов решения уравнений – метод касательных имеет очень быструю сходимость по сравнению с методом половинного деления.
Решение примера 1 методом половинного деления
Sub dihotomia()
Dim a As Single: Dim b As Single: Dim c As Single: Dim e As Single: Dim kol As Integer
a = Val(InputBox("Введите левый конец интервала a"))
b = Val(InputBox("Введите правый
e = Val(InputBox("Введите точность e"))
kol = 1: c = (a + b) / 2
Do While Abs(b - a) > e And f(c) <> 0
c = (a + b) / 2
If f(c) * f(a) < 0 Then b = c Else a = c
kol = kol + 1
Loop
MsgBox "корень уравнения x=" & Format(c, "0.##") & "количество итераций-" & kol
End Sub
Function f(x As Single) As Single
f = (x - 1) ^ 2 * 2 ^ x - 1
End Function
Решение примера 1 методом касательных
Sub kasatelnaya()
Dim a As Single: Dim b As Single: Dim c As Single: Dim e As Single: Dim x0 As Single: Dim x1 As Single
Dim kol As Integer
a = Val(InputBox("Введите левый
b = Val(InputBox("Введите правый конец интервала b"))
e = Val(InputBox("Введите точность e"))
If f(a) * f3(a) >= 0 Then x0 = a Else If f(b) * f3(b) >= 0 Then x0 = b Else MsgBox "не верный ввод данных"
kol = 0
10:
kol = kol + 1
x1 = x0 - f(x0) / f2(x0)
If Abs(x1 - x0) > e Then x0 = x0 - f(x0) / f2(x0): GoTo 10 Else MsgBox "корень уравнения x=" & Format(x1, "0.##") & "количество итераций - " & kol
End Sub
Function f(x As Single) As Single
f = (x - 1) ^ 2 * 2 ^ x - 1
End Function
Function f2(x As Single) As Single
f2 = 2 ^ x * (2 * x - 2 + (x - 1) ^ 2 * Log(2))
End Function
Function f3(x As Single) As Single
f3 = (2 + 2 * Log(2) * (x - 1)) * 2 ^ x + 2 ^ (2 * x) * Log(2) * (2 * x - 2 + (x - 1) ^ 2 * Log(2))
End Function
Решение примера 2 методом половинного деления
Sub dihotomia2()
Dim a As Single: Dim b As Single: Dim c As Single: Dim e As Single
Dim kol As Integer
a = Val(InputBox("Введите левый
b = Val(InputBox("Введите правый конец интервала b"))
e = Val(InputBox("Введите точность e"))
kol = 1
c = (a + b) / 2
Do While Abs(b - a) > e And f2(c) <> 0
c = (a + b) / 2
If f2(c) * f2(a) < 0 Then b = c Else a = c
kol = kol + 1
Loop
MsgBox "корень уравнения x=" & Format(c, "0.##") & "количество итераций-" & kol
End Sub
Function f2(x As Single) As Single
f2 = x ^ 4 - x - 1
End Function
Решение примера 2 методом касательных
Sub kasatelnaya2()
Dim a As Single: Dim b As Single: Dim c As Single: Dim e As Single: Dim x0 As Single: Dim x1 As Single
Dim kol As Integer
a = Val(InputBox("Введите левый
b = Val(InputBox("Введите правый конец интервала b"))
e = Val(InputBox("Введите точность e"))
If f(a) * f3(a) >= 0 Then x0 = a Else If f(b) * f3(b) >= 0 Then x0 = b Else MsgBox "не верный ввод данных"
kol = 0
10:
kol = kol + 1
x1 = x0 - f(x0) / f2(x0)
If Abs(x1 - x0) > e Then x0 = x0 - f(x0) / f2(x0): GoTo 10 Else MsgBox "корень уравнения x=" & Format(x1, "0.##") & "количество итераций - " & kol
End Sub
Function f(x As Single) As Single
f = x ^ 4 - x - 1
End Function
Function f2(x As Single) As Single
f2 = 4 * x ^ 3 - 1
End Function
Function f3(x As Single) As Single
f3 = 12 * x ^ 2
End Function