- •Е.В. Наумов, е.В. Демьянова,
- •Наумов Евгений Владимирович,
- •Этапы подготовки задач к решению на компьютере. Понятие алгоритма, его свойства и способы описния
- •Виды алгоритмов
- •Лабораторная работа №1
- •Задания
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Задания
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Задания
- •Порядок выполнения работы
- •Содержание отчета
- •Задания
- •Порядок выполнения работы
- •Содержание отчета
- •Программная реализация метода бисекции
- •Порядок выполнения работы
- •Содержание отчета
- •Задания
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Задания
- •Порядок выполнения работы
- •Для пошагового выполнения программы на этапе суммирования значений элементов массива необходимо выполнить следующие действия:
- •Содержание отчета
- •Контрольные вопросы
- •Литература
Программная реализация метода бисекции
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-10x |
[0;1] |
29 |
x-2-ln(x) |
[0;1] |
15 |
e^x-x^2 |
[0;1] |
30 |
2x-sin(x) |
[-1;2] |