Практическая работа по информатике: Программирование в VBA
Тема 1: Вычисление значений таблично заданной функции.
Цель. Рассмотреть алгоритм решения таблично заданной функции и составить программу в VBA.
Sin(x)+lg(x) x>3.5
Y= X 2;5 ΔX=0.25
Cos2 (x) x<=3.5
Блок-схема
Мы водим в лист MS Excel начальные данные: Xmin, Xmax и h:
А |
В |
|
1 |
Xmin= |
2 |
2 |
Xmax= |
5 |
3 |
H= |
0,25 |
Создаем макрос:Сервис – Макрос – макросы. Задвем имя(решение). Вводим программу:
Sub решение()
Xmin = Cells(1, 2)
Xmax = Cells(2, 2)
h = Cells(3, 2)
For X = Xmin To Xmax Step h
If 3.5 < X Then
y = Sin(X) + Log(X)
ElseIf X <= 3.5 Then
y = (Cos(X)) ^ 2
End If
Cells(i + 2, 4) = X
Cells(i + 2, 5) = y
i = i + 1
Next X
End Sub
Запускаем программу: кнопка F5.
Сворачиваем программу и на листе MS Excel нам выдает данные:
X |
Y |
2 |
0,173178 |
2,25 |
0,394602 |
2,5 |
0,641831 |
2,75 |
0,854335 |
3 |
0,980085 |
3,25 |
0,988294 |
3,5 |
0,876951 |
3,75 |
0,750195 |
4 |
0,629492 |
4,25 |
0,55193 |
4,5 |
0,526547 |
4,75 |
0,558852 |
5 |
0,650514 |
Это и есть решение нашей функции.
Строим диаграмму:
Вывод. В ходе работы мы рассмотрели алгоритм решения таблично заданной функции(блок-схему) и составили программу в VBA.
Задача №2.
Тема: Поиск экстремумов функции.
Цель. Рассмотреть методику нахождения экстремумов функции, составить блок-схему и программу вычисления в VBA.
X3 -6x2+9x+4
Найти максимум на промежутке 0,2;1,5 с шагом 0,3. точность поиска экстремумов 10-5
Максимум функции будет, когда она начинает убывать. Если она начала убывать, то на этом промежутке находится максимальное значение У. для достижения заданной точности пользуемся правилом: если модуль(у-у1)> желаемой точности, то возвращаемся на 2 шага назад, уменьшаем шаг в 10 раз и опять повторяем до тех пор, пока условие не будет выполняться.
Блок-схема.
Мы водим в лист MS Excel начальные данные: Xmin, Xmax и h:
А |
В |
|
1 |
Xmin= |
0,2 |
2 |
Xmax= |
1,5 |
3 |
H= |
0,3 |
4 |
Eps= |
0,00001 |
Создаем макрос:Сервис – Макрос – макросы. Задаем имя(экстремуму). Вводим программу:
Sub экстремуму()
Xmin = Cells(1, 2)
Xmax = Cells(2, 2)
h = Cells(3, 2)
eps = Cells(4, 2)
For X = Xmin To Xmax Step h
Y = X ^ 3 - 6 * X ^ 2 + 9 * X + 4
Cells(i + 1, 4) = X
Cells(i + 1, 5) = Y
i = i + 1
Next X
Ymax = 0
Do
X = Xmin
Y0 = Ymax
Do
Y = X ^ 3 - 6 * X ^ 2 + 9 * X + 4
Y1 = (X + h) ^ 3 - 6 * (X + h) ^ 2 + 9 * (X + h) + 4
X = X + h
Loop While Y1 > Y
Ymax = Y
XYmax = X - h
Xmin = X - 2 * h
h = h / 10
Loop While Abs(Y - Y1) > eps
Cells(i + 2, 6) = XYmax
Cells(i + 2, 7) = Ymax
End Sub
Запускаем программу: кнопка F5.
Сворачиваем программу и на листе MS Excel нам выдает данные:
0,2 |
5,568 |
||
0,5 |
7,125 |
||
0,8 |
7,872 |
||
1,1 |
7,971 |
||
1,4 |
7,584 |
||
0,75 |
7,796875 |
||
1,05 |
7,992625 |
||
1,2 |
7,888 |
||
1,35 |
7,675375 |
||
1,5 |
7,375 |
||
1,00005 |
8 |
Вывод. В ходе работы мы рассмотрели методику нахождения экстремума функции, составили блок-схему и программу вычисления в VBA.
Задача 3.
Тема 3: Решение нелинейных уравнений.
Цель. Рассмотреть методы решения нелинейных уравнений : метод деления отрезка пополам. Составить алгоритм решения и реализовать программы в VBA.
0.8x4-2x2
Интервал 1;2 . точность 10-5
1) Метод деления отрезка пополам.
Делим отрезок пополам:
X=(a+b)/2
Определяют знак функции f(x) и выбирают ту половину отрезка, на концах которого функция принимает значение разных знаков и деление повторяется.
Если нужно найти корень с заданной точностью, то деление повторяют, пока разность между предыдущем значением корня и вновь посчитанным не станет меньше заданной точности.
Блок-схема.
Мы водим в лист MS Excel начальные данные: a, b,f(x), eps:
А |
В |
|
1 |
a= |
1 |
2 |
b= |
2 |
3 |
Eps= |
0,00001 |
4 |
Создаем макрос: Сервис – Макрос – макросы. Задаем имя(нелинейное). Вводим программу:
Sub нелинейное()
a = Cells(1, 2)
b = Cells(2, 2)
eps = Cells(3, 2)
X = 0
Do
X0 = X
X = (a + b) / 2
If f(a) * f(X) > 0 Then
a = X
Else
b = X
End If
Cells(i + 3, 4) = X
Cells(i + 3, 5) = f(X)
i = i + 1
Loop While Abs(X - X0) > eps
End Sub
Function f(X)
f = 0.8 * X ^ 4 - 2 * X ^ 2
End Function
Запускаем программу: кнопка F5.
Сворачиваем программу и на листе MS Excel нам выдает данные:
X |
f(x) |
1,5 |
-0,45 |
1,75 |
1,378125 |
1,625 |
0,29707 |
1,5625 |
-0,11444 |
1,59375 |
0,081361 |
1,578125 |
-0,01897 |
1,585938 |
0,03058 |
1,582031 |
0,005652 |
1,580078 |
-0,0067 |
1,581055 |
-0,00053 |
1,581543 |
0,002558 |
1,581299 |
0,001012 |
1,581177 |
0,00024 |
1,581116 |
-0,00015 |
1,581146 |
4,69E-05 |
1,581131 |
-5E-05 |
1,581139 |
-1,4E-06 |
2)Метод хорд.
Основан на предположении, что на маленьком отрезке функция изменяется линейно. Тогда кривую можно заменить хордой и в качестве приближенного значения принять точку пересечения хорды с осью абсцисс. Точка Х находиться по формуле Х=a-((b-a)*f(a))/(f(b)-f(a)). Определяют знак функции f(x) и выбирают ту половину отрезка, на концах которого функция принимает значение разных знаков и деление повторяется.
Если нужно найти корень с заданной точностью, то деление повторяют, пока разность между предыдущем значением корня и вновь посчитанным не станет меньше заданной точности.
Эти два метода очень похожи и различаются только способом нахождения Х. все остальное то же самое.
Мы водим в лист MS Excel начальные данные: a, b,f(x), eps:
А |
В |
|
1 |
a= |
1 |
2 |
b= |
2 |
3 |
Eps= |
0,00001 |
4 |
Создаем макрос: Сервис – Макрос – макросы. Задаем имя(нелинейное). Вводим программу:
Sub нелинейное()
a = Cells(1, 2)
b = Cells(2, 2)
eps = Cells(3, 2)
X = 0
Do
X0 = X
X = a - ((b - a) * f(a)) / (f(b) - f(a))
If f(a) * f(X) > 0 Then
a = X
Else
b = X
End If
Cells(i + 3, 4) = X
Cells(i + 3, 5) = f(X)
i = i + 1
Loop While Abs(X - X0) > eps
End Sub
Function f(X)
f = 0.8 * X ^ 4 - 2 * X ^ 2
End Function
Вывод. В ходе работы мы рассмотрели методы решения нелинейных уравнений: метод деления отрезка пополам и метод хорд. Составили алгоритм решения и реализовали программу в VBA.