ФИО, группа, дата
Задание №1
Комбинированный метод решения уравнений с одним неизвестным
Вариант №0
Задание: Комбинированным методом уточнить корень уравнения
f(x) ≡ sin(x) – x + 0.25 = 0 на отрезке [a;b] = [1.1;1.3] с погрешностью ε = 0.0001.
Создать приложение, которое может уточнять корень уравнения. Алгоритм уточнения можно посмотреть в лекциях.
Примерный вид приложения показан ниже
На форме разместить всего два объекта: командную кнопку «вычислить» и командную кнопку «выход».
В таблице №1 перечислены объекты, их свойства и значения, которые устанавливаются первоначально.
Таблица №1
№ Объект
1 Форма (Form)
Свойство
Name
Caption
Значение
frmKombiM1
Комбинированный метод (случай f(b)*f’’(b)>0)
2 Кнопка (CommandButton) Name
Caption
3 Кнопка (CommandButton) Name
Caption
btnCalc
Вычислить
btnStop
Выход
Перейдя в окно кодов, в области General описать функцию, задающую уравнение
Private Function f(x)
' описание функции, задающей уравниние
f = Sin(x) - x + 0.25
End Function и описать производную функции f(x)
Private Function f1(x)
' описание функции, задающей первую производную от f(x)
f1 = Cos(x) - 1
End Function
С кнопкой «Вычислить» свяжем процедуру
Private Sub btnCalc_Click()
' уточнение корня комбинированным методом
' *********************************
' f(x)=0 *
' *********************************
' случай
' *********************************
' f(b)*f''(b) > 0 *
' *********************************
' [a,b]- отрезок содержащий корень уравнения
' a1, a2 - два последовательных приближения корня по недостатку
' b1, b2 - два последовательных приближения корня по избытку
' hn- длина отрезка [a,b]
' eps- погрешность
Dim a As Single, b As Single
Dim a1 As Single, a2 As Single, b1 As Single, b2 As Single
Dim hn As Single, eps As Single
Open "d:\vb\vb1\vvIn.txt" For Input As #1
Open "d:\vb\vb1\vyvOut.txt" For Output As #2
Input #1, a, b, eps
a1 = a
b1 = b
hn = b1 - a1
' собственно уточниние
Do While Abs(hn) > eps
Print "a1="; Format(a1, "##.####"), "b1="; Format(b1, "##.####"),
Print "hn="; Format(hn, "##.####")
Print #2, "a1="; Format(a1, "##.####"), "b1="; Format(b1, "##.####"),
Print #2, "hn="; Format(hn, "##.####")
' метод хорд
a2 = a1 - (f(a1) / (f(b1) - f(a1))) * (b1 - a1)
' метод касательных
b2 = b1 - f(b1) / f1(b1)
' запоминаем отрезок для следующего шага
a1 = a2
b1 = b2
hn = b1 - a1
Loop
xk = (a1 + b1) / 2
Print "корень xk="; Format(xk, "##.####");
Print " плюс/минус"; eps
Print #2, "корень xk="; Format(xk, "##.####");
Print #2, " плюс/минус"; eps
End Sub
С кнопкой «Выход» свяжем процедуру
Private Sub btnStop_Click()
End
End Sub
Сохранить форму у себя на диске N папке n:\numMtd\kombiM\ в файле под именем kombiM1.frm и проект под именем proKombiM1.vbp
Прежде чем запускать проект на исполнение, Блокнотом создать файл исходных данных
1.1 1.3 0.0001 и сохранить его в папке n:\numMtd\mpi\ под именем vvIn.txt.
Запустить проект, показать его работу преподу. В MS Word’e написать шапку, задание, собрать все процедуры, описание функции, файл исходных данных и файл результатов расчета
a1=1,1 b1=1,3 hn=,2
a1=1,1646 b1=1,182 hn=,0174
a1=1,1712 b1=1,1713 hn=,0001 корень xk=1,1712 плюс/минус 0,0001 и вывести все это на печать.
Для случая f(a)*f’’(a)>0 приведем только код программы, связанный кнопкой «Вычислить», т.к. все решается аналогично
Private Function f(x)
' описание функции, задающей уравниние
f = Cos(x) - x + 3.5
End Function
Private Function f1(x)
' описание функции, задающей первую производную от f(x)
f1 = -Sin(x) - 1
End Function
Private Sub btnCalc_Click()
' уточнение корня комбинированным методом
' f(x)=0 *
' случай
' f(a)*f''(a) > 0 *
' [a,b]- отрезок содержащий корень уравнения
' a1, a2 - два последовательных приближения корня по недостатку
' b1, b2 - два последовательных приближения корня по избытку
' hn- длина отрезка [a,b]
' eps- погрешность
Dim a As Single, b As Single
Dim a1 As Single, a2 As Single, b1 As Single, b2 As Single
Dim hn As Single, eps As Single
Open "d:\vb\vb2\vvIn.txt" For Input As #1
Open "d:\vb\vb2\vyvOut.txt" For Output As #2
Input #1, a, b, eps
a1 = a
b1 = b
hn = b1 - a1
' собственно уточниние
Do While Abs(hn) > eps
Print "a1="; Format(a1, "##.####"), "b1="; Format(b1, "##.####"),
Print "hn="; Format(hn, "##.####")
Print #2, "a1="; Format(a1, "##.####"), "b1="; Format(b1, "##.####"),
Print #2, "hn="; Format(hn, "##.####")
' метод касательных
a2 = a1 - f(a1) / f1(a1)
' метод хорд
b2 = b1 - (f(b1) / (f(b1) - f(a1))) * (b1 - a1)
' запоминаем отрезок для следующего шага
a1 = a2
b1 = b2
hn = b1 - a1
Loop
xk = (a1 + b1) / 2
Print "корень xk="; Format(xk, "##.####");
Print " плюс/минус"; eps
Print #2, "корень xk="; Format(xk, "##.####");
Print #2, " плюс/минус"; eps
End Sub
Прежде чем запускать проект на исполнение, Блокнотом создать файл исходных данных
2.5,.2.7, 0.0001 и сохранить его в папке n:\numMtd\kombiM2\ под именем vvIn.txt.
Запустить проект, показать его работу преподу. В MS Word’e написать шапку, задание, собрать все процедуры, описание функции, файл исходных данных и файл результатов расчета
a1=2,5 b1=2,7 hn=,2
a1=2,6244 b1=2,6313 hn=,0069 корень xk=2,6287 плюс/минус 0,0001 и вывести все это на печать.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.