Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
расчеты и графики Excel.doc
Скачиваний:
758
Добавлен:
20.03.2016
Размер:
404.48 Кб
Скачать

4.2. Создание простых функций пользователя

Библиотеку функций Excel можно дополнить функциями пользователя. Это делается средствами Visual Basic.

Проверьте, есть ли в Мастере функций раздел "Определенные пользователем". Он может уже существовать, если до Вас кто-то уже создавал собственные функции. В противном случае, он отсутствует и появится после того, как Вы создадите свою.

Теперь откройте окно редактора Visual Basic. Вы можете сделать это или, как выше, через СервисМакросМакросы…<Изменить>, или непосредственно через СервисМакросРедактор Visual Basic.

После последнего из записанных макросов (слов End Sub соответствующей подпрограммы) наберите, например, следующий текст:

Function МояПервая(x)

МояПервая=x^2+sqr(x)/x

End Function

Последняя строчка появится сама, без Вашего участия, поэтому позаботьтесь, чтобы она не оказалась набранной дважды.

Закройте окно Редактора Visual Basic и вернитесь в окно Excel. Теперь вы можете убедиться, что в Мастере функций существует раздел "Определенные пользователем", а в нем функция "МояПервая", созданная Вами. Выбрав её и нажав <ОК>, вы получите перед собой окно Вашей функции с полем аргумента «x». Введите в это поле какое-либо значение (например, 4) и Вы получите результат (16,5) в соответствии с определенной Вами функцией. Нажмите <ОК>, и результат окажется в той ячейке листа Excel, которая была выделена перед обращением к мастеру функций.

Задание.

Определите, как описано выше, еще несколько Ваших собственных функций, с разными именами, с разным числом аргументов и заставьте их работать на Вас. Вы вполне можете ограничиться Вашими знаниями языка Quick Basic, несмотря на то, что программируете функции в Visual Basic.

Ниже мы рассмотрим несколько конкретных примеров функций, полезных для расчетов в Excel.

4.3. Вычисление определенного интеграла

В Excel 2000 среди стандартных математических функций отсутствуют функции, вычисляющие определенный интеграл. Создадим такую функцию сами.

Пусть нам необходимо вычислить интеграл .

Для приближенного вычисления определенного интеграла используем, как и в п. 3.4, метод трапеций. В методе трапеций приближенное значение интеграла вычисляется по итоговой формуле:

,

где h – ширина интервала значений аргумента x, после разбиения промежутка интегрирования на n равных частей, yi =f(xi) – значения функции на границах этих интервалов.

Соответствующую подпрограмму-функцию создадим так же, как в предыдущем параграфе.

Function IntTrap(a, b)

Dim i, n As Integer

n = 128

h = (b - a) / n

s = (f(a)+f(b))/2

For i = 1 To n - 1

x=a + i * h

s = s + f(x)

Next i

IntTrap = h * s

End Function

Здесь оператор Dim… явно описывает по типу "целые" (Integer) переменную n – число разбиений на интервалы величиной h промежутка интегрирования от a до b и вспомогательную переменную i, которая является параметром цикла For…Next i и изменяется в этом цикле с шагом 1.

В данной подпрограмме f(x) является подынтегральной функцией, от которой вычисляется определенный интеграл. Эта функция также должна быть задана подпрограммой. Если, например, f(x)=x2, то:

Function f(x)

f = x ^ 2

End Function

После написания этих двух функций в редакторе Visual Basic в Мастере функций, в разделе «определенные пользователем» появятся две соответствующие функции IntTrap и f. Для вычисления интеграла надо выбрать функцию IntTrap и задать параметры a и b – пределы интегрирования. Если нужно вычислить определенный интеграл от другой функции, измените функцию f(x) в редакторе Visual Basic. Функцию IntTrap менять не надо.

Приведем также пример подпрограммы-функции, вычисляющей определенный интеграл методом Симпсона. Этот метод более точный, чем метод трапеций. В методе Симпсона интеграл вычисляется по следующей итоговой формуле:

S=[ y0 + yn + 4*(y1 + y3+ … yn-1)+ 2*(y2 + y4 + … yn-2)] * h / 3

Соответствующая подпрограмма может быть написана так:

Function IntSimp(a, b, Optional n As Integer =128)

Dim i As Integer

h = (b - a) / n

s1 = 0: s2 = 0

For i = 1 To n - 1 Step 2

x=a + i * h

s1 = s1 + f(x)

Next i

For i = 2 To n - 2 Step 2

x=a + i * h

s2 = s2 + f(x)

Next x

IntSimp = (f(a) + f(b) + 4* s1 + 2 * s2) * h / 3

End Function

В этой подпрограмме-функции в число параметров введено число интервалов разбиения промежутка интегрирования, n. Этот параметр описан как целое число (Integer), он является необязательным (Optional) и ему назначено значение =128 по умолчанию. В результате Вы можете изменять точность вычисления интеграла, меняя значение параметра n в Мастере функций, а можете вообще не вводить этот параметр, тогда его значение останется равным 128.