Найти
корень уравнения F(x) =0, где функция F(x)
задается программистом и реализована на VBA.
Для решения задачи 4 я написал на VBA две функции. Вот как они выглядят:
Public Function
Polinom4(Cofs As Variant, X As Variant) As Variant
'Вычисляет значение
полинома 4-й степени в точке,
'заданной
параметром X.
'Коэффициенты
полинома передаются в первом параметре Cofs.
'Значением
параметра Cofs
может быть объект Range.
Polinom4 = (((Cofs.Cells(1)
* X + Cofs.Cells(2))
* X + _
Cofs.Cells(3))
* X + Cofs.Cells(4))
* X + Cofs.Cells(5)
End Function
Public Function
Pr4(Cofs
As Variant, X As Variant)
As Variant
'Вычисляет значение
производной полинома 4-й степени в точке,
'заданной
параметром X.
'Коэффициенты
полинома передаются в первом параметре Cofs.
'Значением
параметра Cofs
может быть объект Range.
Pr4 = ((4 * Cofs.Cells(1) * X + 3 * Cofs.Cells(2)) * X + _
2 * Cofs.Cells(3))
* X + Cofs.Cells(4)
End Function
Затем я практически повторил действия, предпринятые для решения задачи 3. Реально, конечно, я ничего не повторял, а просто создал копию листа 4 и внес в нее необходимые изменения. Эти изменения коснулись тех ячеек, в которых вычисляется значение функции и ее производной. В ячейке B12 я заменил формулу, вычисляющую функцию, на вызов функции Polinom4:
“=Polinom4($C$9
: $G$9; A12)”
Аналогично в ячейке B26 появилась формула:
“=Polinom4($C$9
: $G$9; A26)”
а в ячейке C26:
“=Pr4($C$9 : $G$9; A12)”
Обратите внимание, я передаю вызываемым функциям объект Range в качестве первого параметра, в котором записаны значения коэффициентов полинома. В качестве второго параметра также передается объект Range, но определяющий уже единственную ячейку. Заметьте, при передаче первого параметра я использовал абсолютные имена, поскольку коэффициенты полинома находятся в строго фиксированных ячейках и их адреса не должны меняться при копировании формулы. Для второго параметра использован относительный адрес, поэтому он должным образом будет меняться при копировании формул.
Наш пример интересен и
тем, что в нем показано, как передается
массив ячеек и отдельная ячейка
рабочего листа в функцию VBA. С другой
стороны, результат вычисления функции
передается в формулу рабочего листа.
Заметьте, что хотя формальный параметр
функций имеет тип Variant,
ему можно в
качестве фактического параметра
передавать объекты Range. В теле функции можно
работать с этим параметром, как с объектом
Range, вызывая его свойства и методы, как это
делается в наших функциях, где вызывается
свойство Cells
этого объекта. Я еще вернусь в последующем к
теме передачи информации между рабочим
листом и процедурами и функциями VBA и
остановлюсь на этом более подробно. В
заключение, взгляните, как выглядит решение
этой задачи. Поскольку ищутся корни той же
функции, что и в задаче 3, то, чтобы избежать
повторения рисунков, я привожу решение, в
котором найден другой корень нашей функции:
Рис. 6 Вычисление корня функции, заданной программой на VBA