Числовые методы вычисления корня

Автор работы: Пользователь скрыл имя, 01 Ноября 2013 в 15:48, курсовая работа

Краткое описание

Microsoft Excel имеет встроенный язык программирования - Visual Basic for Аpplications (VBA). Этот язык позволяет создавать приложения, выполняемые в среде Microsoft Office. Это могут быть разнообразные аналитические программы, финансовые системы, программы учета кадров, системы автоматического создания официальных писем/документов с помощью библиотеки готовых шаблонов и т.п. При этом интерфейс создаваемой программы может быть совершенно непохожим на интерфейс того приложения, в котором она написана.

Содержание

Введение
1. Условие задачи
2. Описание заданного численного метода
2.1 Программа процедуры вычисления корня
2.2 Главная программа
3. Блок схема
3.1 Аргументы процедуры Koren
3.2 Результаты вычисления значения корня для заданных
пяти вариантов допустимой ошибки
4. График функции
Заключение
Библиографический список

Прикрепленные файлы: 1 файл

кр.docx

— 186.33 Кб (Скачать документ)


Изм.

Лист

№ докум.

Подпись

Датафа

Лист

3

КР. ИС. 230200. ПЗ

 

 Разраб.

 Борисов В.Н.

 Провер.

Цвелик Е.А.

 

 

 Н. Контр.

 

 Утверд.

 

 

 

Лит.

Листов

24

 



Содержание

 

Введение

1. Условие  задачи

2. Описание  заданного численного метода

2.1 Программа  процедуры вычисления корня

2.2 Главная  программа

3. Блок схема

3.1 Аргументы процедуры Koren

3.2 Результаты вычисления значения корня для заданных

пяти вариантов  допустимой ошибки

            4. График функции

Заключение

Библиографический список

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

 

Microsoft Excel имеет встроенный язык программирования - Visual Basic for Аpplications (VBA). Этот язык позволяет создавать приложения, выполняемые в среде Microsoft Office. Это могут быть разнообразные аналитические программы, финансовые системы, программы учета кадров, системы автоматического создания официальных писем/документов с помощью библиотеки готовых шаблонов и т.п. При этом интерфейс создаваемой программы может быть совершенно непохожим на интерфейс того приложения, в котором она написана.

VBA сочетает  в себе практически неограниченные  возможности с простотой изучения  и использования. Теперь большинство  функций можно описать, не прибегая  к программированию. В том случае, если возможностей языка недостаточно, можно обратиться к API-функциям  Windows. Пожалуй, самое главное достоинство VBA в том, что этот язык является единым для всех офисных приложений Microsoft и поэтому позволяет связывать их между собой. Уже сейчас из программы, написанной в Excel, можно обращаться к объектам Word для Windows, а также Microsoft Project. Это открывает заманчивые перспективы. Представьте, что пользователь на конкретном рабочем месте должен на основе некоторых данных, извлекаемых из базы, делать их анализ, строить диаграммы и проектировать деятельность организации, а также автоматически выполнять рассылку этих обработанных данных по некоторым адресам вместе с сопроводительным письмом. Все это можно сделать средствами офисных продуктов Microsoft, однако при этом пользователь должен в совершенстве овладеть каждым из них.

В случае если программа для решения этой задачи написана на VBA, пользователю придется изучить только ее.

Программа MS Excel,  являясь лидером на  рынке программ обработки электронных таблиц,  определяет тенденции развития в этой  области.  Вплоть до   версии   14   программа   Excel представляла   собой   фактический стандарт  с точки зрения функциональных возможностей и удобства работы.

Одним  из важнейших функциональных расширений программы, предназначенным для  профессионалов,  является встроенная   в   Excel   Среда программирования  Visual  Basic  (VBA)  для решения прикладных задач.  Благодаря VBA  фирме Microsoft  удалось не   только      расширить возможности языка макрокоманд Excel 14, но и ввести новый уровень прикладного программирования,  поскольку VBA позволяет создавать полноценные прикладные пакеты,  которые по своим функциям выходят далеко за рамки обработки электронных таблиц.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        1. Условие задачи

При заданных пяти вариантах допустимой ошибки e заданным численным методом вычислить приближенное значение корня функционального уравнения вида f (x) = 0, если известно, что это уравнение имеет единственный корень на отрезке [a, b].

В работе должно быть предусмотрено:

проверка  корректности введенных значений исходных данных (выполнение условия a < b, выполнение условия e > 0),

перехват  и обработка ошибки времени выполнения, когда строку введенных символов невозможно интерпретировать как число, построение графика функции в  книге Excel с помощью процедуры VBA.

Условие заданного  численного метода соответствует третьему варианту:

F(x) = 3x – 4ln x –5 при х є [ 2; 4]

Вариант допустимой ошибки (при n=5):

2e–2; 8e–4; 8e–5; 1e–5; 1e–6;

Заданным  численным методом считать метод Ньютона, согласно варианту.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2  Описание заданного численного метода

Рисунок 1 поясняет метод Ньютона. Пусть имеется начальное приближение к корню, которое обозначим xn.

y = f (x)

y

x

a

b

xs

xn

x*

Рисунок 1 - Графическая иллюстрация метода Ньютона


 

Проведем  касательную к графику y = f (x) в точке с координатами (xn, f (xn)). Новое приближение к корню, которое мы будем называть следующим приближением, xs получим как точку пересечения этой касательной с осью абсцисс. Это правило приводит к следующей расчетной формуле:


При соблюдении некоторых условий (они называются условиями сходимости), которые будут  перечислены ниже, строго доказывается, что приближение xs находится ближе к корню, чем приближение xn.

Теперь  заменим значение начального приближения xn на значение только что полученного приближения xs . Мы пришли к той же самой задаче, но теперь начальное приближение расположено ближе к корню, чем до его изменения на xs. Каждое такое улучшение приближения к корню за счет вычисления следующего приближения называется итерацией.

Сколько нужно выполнить итераций, чтобы  нас могла устроить точность приближение xs к значению корня x*?

Обычно  считают, что требуемая точность достигнута, если после вычисления xs при выполнении очередной итерации соблюдается условие

|xs - xn |< e .         (2)

При выполнении неравенства (2) итерационный процесс уточнения корня следует прекратить и в качестве искомого приближенного значения корня взять

xw = xs .          (3)

При выполнении первой итерации в качестве начального приближения xn можно взять любую точку отрезка [a, b], например его середину:

xn = (a+b)/2.         (4)

Смысл условий  сходимости метода Ньютона состоит  в том, что начальное приближение xn, используемое при выполнении первой итерации, должно быть не слишком далеко от корня, а производная f(x) должна изменяется на отрезке [a, b] не очень быстро и не обращаться в ноль ни в одной точке отрезка [a, b]. Мы будем считать, что они выполняются.

Метод Ньютона  является наиболее быстрым среди  численных методов вычисления корня  функционального уравнения. На практике необходимая точность достигается  буквально после выполнения нескольких (не более 10) итераций.

Формулы (1) – (4) должны быть применены в алгоритме вычисления корня по методу Ньютона. Для вычисления входящей в формулу (1) производной f(x) следует найти ее аналитическое выражение, применить в программе функцию для вычисления значения производной.

 

  1. Программа процедуры вычисления корня

На основе Блок-схемы была написана процедура  Koren.

Private Sub koren(pred As Integer, a As Single, b As Single, eps As Single, xw As Single, it As Integer, Flag As Boolean)

    Dim xn As Single, xs As Single

    Dim fxn As Single, fxs As Single

    Dim p1xn As Single, Bool As Boolean

    xn = (a + b) / 2

    it = 0

Do

p1xn = p1(xn)

fxn = f(xn) ' вызов функции f для расчета ее значения в точке xn

xs = xn - fxn / p1xn   ' вычисление xs

        fxs = f(xs)

        it = it + 1

    Bool = Abs(xs - xn) < eps Or it > pred

    xn = xs

    Loop Until Bool     'если |xs-xn|<   или превышено количество итераций, то цикл заканчивается

    If it <= pred Then

        Flag = False

        xw = xs

    Else

        Flag = True

    End If

End Sub

 

  1. Главная программа

Процедура описания переменных.

Option Explicit

Dim Задано_a As Boolean

Dim Задано_b As Boolean

Dim Задано_eps As Boolean

Dim a As Single, b As Single

Dim eps As Single

При нажатии  кнопки «Выход» происходит выход  из программы.

Private Sub cmdВыход_Click()

End

End Sub

 

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

Private Sub UserForm_Activate()

Задано_a = False

Задано_b = False

Задано_eps = False

Txta.SetFocus

End Sub

Процедуры ввода начальных данных для выполнения расчетов.

Private Sub Txta_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 13 Then

a = Txta.Text

Задано_a = True

LblСообщ.Visible = False

Txtb.SetFocus

End If

End Sub

Private Sub Txtb_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 13 Then

b = Txtb.Text

Задано_b = True

LblСообщ.Visible = False

Txteps.SetFocus

End If

End Sub

 

Private Sub Txteps_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 13 Then

eps = Txteps.Text

Задано_eps = True

LblСообщ.Visible = False

CmdПуск.SetFocus

End If

End Sub

 

Private Sub txta_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    On Error GoTo L

    LblСообщ.ForeColor = RGB(0, 0, 0)

    LblСообщ.Caption = _

    "Закончив ввод, нажмите клавишу Enter!"

    LblСообщ.Visible = True

    Txta.ForeColor = RGB(0, 0, 0)

Select Case KeyAscii

Case 0, 8, 44, 45, 48 To 57, 101

Case Else

KeyAscii = 0

End Select

Exit Sub

LblСообщ.ForeColor = RGB(255, 0, 0)

LblСообщ.Caption = _

"Это  не число! Исправьте!"

L:   LblСообщ.Visible = True

Txta.ForeColor = RGB(255, 0, 0)

End Sub

 

Private Sub txtb_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

On Error GoTo L

LblСообщ.ForeColor = RGB(0, 0, 0)

LblСообщ.Caption = _

"Закончив ввод, нажмите клавишу Enter!"

LblСообщ.Visible = True

  Txtb.ForeColor = RGB(0, 0, 0)

Select Case KeyAscii

Case 0, 8, 44, 45, 48 To 57, 101

Case Else

KeyAscii = 0

End Select

Exit Sub

L:  LblСообщ.ForeColor = RGB(255, 0, 0)

LblСообщ.Caption = _

"Это  не число! Исправьте!"

LblСообщ.Visible = True

Txtb.ForeColor = RGB(255, 0, 0)

End Sub

 

Private Sub txteps_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

On Error GoTo L

LblСообщ.ForeColor = RGB(0, 0, 0)

LblСообщ.Caption = _

"Закончив  ввод, нажмите клавишу Enter!"

LblСообщ.Visible = True

Txteps.ForeColor = RGB(0, 0, 0)

Select Case KeyAscii

Case 0, 8, 44, 45, 48 To 57, 101

Case Else

KeyAscii = 0

End Select

Exit Sub

L:  LblСообщ.ForeColor = RGB(255, 0, 0)

LblСообщ.Caption = _

    "Это не число! Исправьте!"

    LblСообщ.Visible = True

    Txteps.ForeColor = RGB(255, 0, 0)

End Sub

Функция вычисления значений функции f(x)=0.

Private Function f(x As Single) As Single

    f = 3 * x - 4 * Log(x) - 5

End Function

Private Function p1(x As Single) As Single

p1 = 3 - 4 / x

End Function

Private Sub koren(pred As Integer, a As Single, b As Single, eps As Single, xw As Single, it As Integer, Flag As Boolean)

    Dim xn As Single, xs As Single

    Dim fxn As Single, fxs As Single

    Dim p1xn As Single, Bool As Boolean

    xn = (a + b) / 2

    it = 0

Do

p1xn = p1(xn)

fxn = f(xn) ' вызов функции f для расчета ее значения в точке xn

xs = xn - fxn / p1xn   ' вычисление xs

        fxs = f(xs)

        it = it + 1

    Bool = Abs(xs - xn) < eps Or it > pred

    xn = xs

    Loop Until Bool     'если |xs-xn|<   или превышено количество итераций, то цикл заканчивается

    If it <= pred Then

        Flag = False

Информация о работе Числовые методы вычисления корня