Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika_Chast_3_2009_Naumov.docx
Скачиваний:
17
Добавлен:
10.02.2015
Размер:
1.19 Mб
Скачать

Программная реализация метода бисекции

Function F (Byval x As Single) As Single

F=(x–1)^2–1

End Function

Private Sub Расчет (Byval xn As Single, Byval xk As Single, └┘

Byval e As Single, ByRef x As Variant)

Dim N As Integer, c As Single ‘Объявление локальных переменных

Dim mas () ‘Объявление динамического массива

If F(xn)*F(xk)>0 Then

x =”?”

MsgBox ”на данном интервале корня нет или четное кол-во корней.”└┘

+ Chr(13) └┘ &└┘

”Задайте интервал, содержащий один корень”

Exit Sub

End If

N=0

c=(xn+xk)/2

Do While xk-xn>℮ And Abs(F(c))> ℮

c=(xn+xk)/2

N=N+1

ReDim Preserve mas (1 Tо N)

mas (N) =C

If F(xn)*F(c)>0 Then xn=c Else xk=c

Loop

x=c

If N=0 Then

ReDim Preserve mas(1 To 1)

mas (1)=x

End If

List1.List=mas

End Sub

Private Sub Cmd Решение _Click( )

Dim a As Single, b As Single, eps As Single, └┘––

корень As Variant

a=CSng(Text1.Text)

b=CSng(Text2.Text)

eps=CSng(Text3.Text)

Расчет a, b, eps, корень

Text4.Text = корень

End Sub

Private Sub List1_Click()

Text5.Text=F(CSng(List1))

End Sub

Пояснения

Данный проект является реализацией одного из численных методов поиска корня нелинейного уравнения.

Проект реализован структурированной программой. В главной (командной) подпрограмме с именем «CmdРешение» выполняется считывание с полей формы (ввод) основных исходных данных, вызов вспомогательной подпрограммы с именем «Расчет» и передача в поле формы (вывод) вычисленного значения корня.

В структуре программы содержатся описания:

  • функции с именем «F», лежащей в основе уравнения;

  • вспомогательной подпрограммы с именем «Расчет»;

  • дополнительной подпрограммы с именем «List1», передающей в поле формы значения функции при последовательных приближениях к корню.

Алгоритм метода поиска корня формально описан во вспомогательной подпрограмме с именем «Расчет».

При записи в подпрограмме оператора цикла Do…Loop со служебным словом While (пока), помещённым вначале, составное условие для входа и продолжения цикла должно быть истинным, когда длина интервала поиска и значение функции в пробной (центральной) точке больше допустимой погрешности. Такое соединение условий реализуется логической операцией «And» («и»).

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

Последняя ситуация (нет входа в цикл) приводит к неопределенности динамического массива с именем «mas», содержащего приближения к корню (координаты центральных точек интервала поиска) и наращиваемого по длине по мере надобности (количество элементов определяется счётчиком N). Если не было входа в цикл (N=0), то искусственно массив формируется из одного элемента, которому передается значение координаты первой пробной точки, являющейся точкой корня.

Динамический массив «mas» определяется в два этапа: сначала в инструкции «Dim» с помощью двух подряд круглых скобок (открывающей и закрывающей), помещаемых после имени массива, принципиально объявляется массив; далее в цикле с помощью инструкции «ReDim» (Return Dimension – возврат к определению размерности) задаются границы нумерации элементов массива. Служебное слово «Preserve» является обязательным, без этого слова значения элементов массива не сохраняются в памяти.

В подпрограмме «Расчет» (в самом её начале) проверяется условие локализации. В условном операторе, выполняющем эту проверку, фигурирует обратное условие. Если оно истинно, то выводится соответствующее сообщение и выполняется выход (Exit) из подпрограммы. А перед этим величине «x» (переменной универсального типа Variant, соответствующей фактическому параметру «корень»), присваивается значение некоторой символьной константы (символы помещаются в кавычки, например, «???»; возможна пустая строка – двое кавычек (открывающих и закрывающих) подряд; тогда на форме проекта поле значения корня будет пустым). Если определить формальную переменную «x» и соответствующую ей в главной подпрограмме фактическую переменную «корень» как числовую, а при отсутствии корня в интервале поиска не присвоить этой переменной никакого значения, то в поле вывода автоматически будет вывод значения «0» (ноль), что не соответствует истине.

Дополнительно в данный проект включена возможность наблюдать за процессом последовательных приближений к корню. Для этого в подпрограмме расчёта накапливается упомянутый выше массив «mas». В конце данной подпрограммы этот массив передается на форму в списковое поле с именем «List1» (стандартное имя ListBox).

В программу включена также возможность отображать на форме значения функции при отдельных значениях приближений к корню. Это реализуется в подпрограмме с именем «List1». Она выполняется при щелчке ЛКМ на выбранной строке в поле «List1». Значение, отображённое символами в строке, считывается и в преобразованном числовом виде передаётся как аргумент функции с именем «F», определяющей выражение уравнения, а вычисленное значение функции выводится на форму в поле с именем «Text5».

В качестве примера в данном проекте взято уравнение, выражающееся функцией f(x) = (x – 1)^2-1 и имеющее два корня: x1 = 0 и x2 = 2.

Оборудование, инструменты и приборы: ПЭВМ, программное обеспечение Microsoft Office (Excel 2007).

Таблица 5

Варианты заданий

Для всех вариантов допустимая погрешность вычисления корня нелинейного уравнения  = 0,01.

№ варианта

F(x)

[a;b]

№ варианта

F(x)

[a;b]

1

sin(x)

[2;5]

16

(x-2)^2-1

[0;1]

2

sin(x)

[7;10]

17

(x-2)^2-1

[2;4]

3

-sin(x)

[-1;2]

18

(x-2)^2-2

[0;2]

4

-sin(x)

[5;8]

19

(x-2)^2-2

[3;5]

5

cos(x)

[-1;3]

20

-(x-2)^2+3

[0;2]

6

cos(x)

[3;5]

21

-(x-2)^2+3

[3;5]

7

-cos(x)

[-2;1]

22

(x-3)^2-1

[0;3]

8

-cos(x)

[2;5]

23

(x-3)^2-1

[3;5]

9

ln(x)

[0,5;3]

24

sin(x)-x^2

[0,5;1]

10

ln(x-1)

[1,5;4]

2

cos(x)-ln(x)

[0,5;2]

11

ln(x-2)

[2,5;4]

26

-2(x-)+sin(x-1)

[0;3]

12

ln(x-3)

[3,5;5]

27

x-cos(x)

[0;3]

13

e^x-2

[0;1]

28

x+cos(x)

[-1;1]

14

e^x-10x

[0;1]

29

x-2-ln(x)

[0;1]

15

e^x-x^2

[0;1]

30

2x-sin(x)

[-1;2]

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