
- •На вкладке "Вид" поставьте галочку на "область навигации" или "схема документа", щелкните мышкой на листе. Слева появится содержание. Нажимая по названию, можно переходить в нужный раздел.
- •Вопросы по курсу мкхтп
- •Основные приемы работы в среде ms Excel и vba Введение
- •Р Рис.1. Таблица расчета функции абота с таблицей и диаграммами в Excel Построение таблицы
- •Работа в vba
- •Алгоритмы методов
- •Метод итераций
- •Метод касательных(хорд)
- •Метод деления отрезка пополам
- •Реализация решений в среде Excel
- •Реализация решений типовыми командами Excel
- •Примеры решения типовых задач
- •Аналитический способ нахождения экстремума.
- •Численные методы нахождения экстремума.
- •Алгоритмы методов
- •Метод золотого сечения
- •Выполнение работы
- •Интеграл, физический смысл и геометрическое представление
- •Способы вычисления интегралов, сравнение их точности.
- •Вычисления интеграла по площади криволинейной трапеции.
- •Метод вычисления интеграла по прямоугольнику с высотой в средней точке отрезка.
- •Метод вычисления интеграла по площади трапеции
- •Вычисления интеграла по площади криволинейной трапециипри ее аппроксимации полиномом второго порядка
- •Алгоритм вычисления интеграла
- •В Рис.4. Алгоритм интегрирования функции ыполнение работы
- •Заключение
- •Самостоятельная работа
- •Контрольные вопросы
- •Понятие первообразной (метод Эйлера)
- •Правило 1
- •Правило 2
- •Правило 3
- •Ме́тоды Ру́нге — Ку́тты
- •Прямые методы Рунге — Кутты
Работа в vba
Вспомним приемы программирования в среде VBA for Excel, для этого построим две функции, которые мы будем использовать дальше.
Первая из них – это функция пользователя, которая должна содержать нашу модель для исследования, чтобы ее каждый раз не набирать средствами Excel. В нашем случае это следующее уравнение – Y=3·(Х-0,2)3+15·Ln(X)
Открываем VBA, используя комбинацию клавиш «Alt+F11» или непосредственно вызывая команду из меню MS Excel – «Сервис»–«Макрос»–«Редактор Visual Basic». Вставляем в наш проект модуль командой «Insert»–«Module». В списке проекта появляется новый объект «Module1».
В
Рис.14. Окно создания
процедуры.
Public Function My_fun()
End Function
Наша функция должна иметь один входной формальный параметр «Х». Поэтому в первой строке между скобками после имени функции пишем Х. Теперь надо записать саму процедуру вычисления функции. Возьмем ту же функцию, что и на листе Excel и введем ее в код функции между уже имеющимися строками, написав – Y=3*(Х-0.2)^3+15*Log(X). Здесь надо помнить, что разделителем десятичных знаков в коде программы является точка «.». Имена переменных лучше создавать латинскими буквами и не смешивать их с русскими, т.к. поиск ошибок в данном случае становится очень сложным из-за одинакового написания ряда символов. Чтобы сообщить системе, что надо возвращать из функции, дописываем еще одну строку – My_fun=Y. Можно было сразу же в первой строке вместо Y записать My_fun, мы сделали так для того, чтобы показать, что наша функция может быть очень сложной и только последний оператор передаст результат в основную программу.
Public Function My_fun(X)
Y = 3 * ((X - 0.2) ^ 3) + 15 * Log(X)
My_fun = Y
End Function
Проверим работоспособность нашей функции. Для этого перейдем снова на «Лист1» и в первую ячейку третьего столбце запишем заголовок «My_fun», во вторую ячейку введем нашу функции используя мастер построения функции (см. рис.4), сначала выберем категорию – «Созданные пользователем» и там видим единственную функцию, которую мы только что создали. Выбираем ее и в качестве параметра указываем значение в текущей строке столбца «Х». После ввода маркером заполнения (+) растянем формулу на весь столбец, как и делали это во время построения вычислений в предыдущем столбце. Данные двух столбцов должны совпадать.
В
Рис.15. Корень
уравнений
, (1)
где в числителе разность значений функции между правой и левой точками, а в знаменателе сумма двух шагов, на которые мы отступаем от точки. Надо помнить, что отнимать надо всегда от правой левую точку. Второй вопрос, как опередить шаг? Если мы ведем вычисления с точностью до 5%, то шаг должен быть не более 2% от значения аргумента Х. Принимаем шаг равный 1% от значения параметра, что приводит к следующему алгоритму расчета:
(2)
есть Х=0 принимаем шаг равным 0,01, в других случаях шаг равняется 0,01 от значения Х.
Теперь создадим данную функцию, назвав ее «Difr». Для этого вставляем новую процедуру с этим именем и вводим следующие операторы:
Public Function Difr(Xt)
If Xt <> 0 Then
dH = 0.01 * Xt
Else
dH = 0.01
End If
Difr = (My_fun(Xt + dH) - My_fun(Xt - dH)) / (2 * dH)
End Function
Т
Рис.16. Графики
модельной функции и ее производной
Для добавления новых данных надо вызвать контекстное меню диаграммы и выбрать команду «Исходные данные». В открывшемся окне выбрать закладку «Ряд» (см. рис.7б) и, используя кнопку «Добавить», внести новые данные – «Имя:» – выберете заголовок столбца или можно написать «Производная», как показано на рис.16, «Значения Х:» – данные из столбца Х без заголовка и «Значения Y:» – данные из столбца Difr без заголовка.
Недостатком данной функции является необходимость каждый раз создавать новую подпрограмму для новой функции пользователя, переписывая строку, где записана наша модельная функция «My_Fun». Нашу функцию лучше передавать в подпрограмму как фактический параметр. Попробуем исправить эту проблему.
Сначала сделаем копию нашей подпрограммы «Difr». Теперь изменим заголовок функции на «Dif_Ur» и добавляем еще один формальный параметр «Fn», определив его как строковая переменная, для исключения возможных ошибок при вызове команды Run, которая требует ввода имени подпрограммы в формате строки. Потом введем два новых оператора для вычисления значений функций на левой (YL) и правой (YR) границах, используя команду приложения «Run». Здесь мы встречаемся в необходимостью ввода служебных слов. Для их выбора можно пользоваться командой Ctrl+J. Разберем порядок ввода таких слов. Встаем на новую строку и вводим первую букву служебного слова, затем вызываем список служебных слов (Ctrl+J) и продолжаем ввод символов, наблюдая за показанным списком, пока не будет выбрано нужное слово или просто прокрутим список с поиском этого слова. Когда слово найдено, просто вводим символ, который должен следовать за ним (это точка или скобка), после этого слово автоматически достраивается и предлагается список объектов для завершения команды. В нашем случае порядок действий будет следующим. Встаем в конец строки «End If» и нажимаем «Enter». Курсор перемещается на начало следующей строки. Вводим имя переменной «YL=» латинскую букву «А», потом нажимаем «Ctrl+J», появляется список служебных слов. Продолжаем ввод символов «ppl», в списке появляется слово «Application». Вводим «.», список меняется на перечень объектов «Application». Продолжаем ввод нужных символов «ru», как только появляется объект «Run» и завершаем ввод открывающей скобкой «(».
Теперь водим нужные параметры, сначала имя нашей функции «Fun» и потом через запятую значение параметра Х. Так же вводим вторую строку для вычисления YR и изменяем последнюю строку программы в которой исправляем имя функции и вместо двух вызовов нашей модельной функции ставим вычисленные значения функций. Наша новая подпрограмма готова.
Public Function Dif_Ur(Xt, Fn as String)
If Xt <> 0 Then
dH = 0.01 * Xt
Else
dH = 0.01
End If
YL = Application.Run(Fn, Xt - dH)
YR = Application.Run(Fn, Xt + dH)
Dif_Ur = (YR - YL) / (2 * dH)
End Function
Попробуйте решить практическую задачу. Мы имеем полином третьего порядка, который может иметь от одного до трех корней. Чтобы их локализовать, надо построить графики перовой и второй производных и найти на них точки пересечения оси Х.
Для это сначала создадим новую функцию «My_fun1» вида
Public Function My_fun1(X)
My_fun1 = 1 - 3 * X - 0.75 * X ^ 2 + 0.5 * X ^ 3
End Function
И создадим еще одну подпрограмму, которая будет находить вторую производную, которая будет использовать в качестве первого вычисления функцию обращения к подпрограмме «Dif_Ur». Данная подпрограмма имеет следующий код:
Public Function Dif_Ur2(Xt, Fn As String)
If Xt <> 0 Then
dH = 0.01 * Xt
Else
dH = 0.01
End If
YL = Dif_Ur(Xt - dH, Fn)
YR = Dif_Ur(Xt + dH, Fn)
Dif_Ur2 = (YR - YL) / (2 * dH)
End Function
Теперь на втором листе книги построим новую таблицу расчета этой функции и ее производных. В первой строке заполним заголовки столбцов. Параметр Х заполним прогрессией от -3 до 4, во второй столбец внесем функция «My_fun1» со ссылкой на соответствующую ячейку столбца «Х», в третьем столбце поместим функцию «Dif_Ur» с ссылками на параметр «Х» и заголовок функции, определив эту ссылку как абсолютную (используем клавишу «F4»). Для второй производной используем новую функцию «Dif_Ur2» с теми же параметрами, что и в предыдущей ячейке. Теперь три ячейки с функциями можем выделить и затем растянуть на всю таблицу Вид таблицы с формулами показан на рис.17, а полная таблица с данными на рис.18.
Рис.17. Заголовки столбцов таблицы и вид формул второй строки
Н
Рис.18. Таблица
расчетных
данных
Рис.19. График полинома третьего порядка и его производных
Заключение
В результате выполнения работы были восстановлены приемы работы в среде Excel и VBA, которые будут использованы в следующих работах курса, а так же при выполнении расчетов во время курсовых и дипломных работ.
Самостоятельная работа
Реализуйте данную работу для других функций:
Контрольные вопросы
Что такое функция пользователя?
Как создается и записывается код функций пользователя?
Опишите алгоритм вычисления производных.
Лабораторная работа № 2
Нахождение корней уравнения Введение
Корень уравнения, геометрический смысл, методы нахождения.
К
Рис.1 Корень
уравнений
В графическом представлении корень показан на рис.1. К данной задаче можно привести и нахождение точки пересечения двух уравнений, используя их разность, как функцию, корень которой надо найти.
У
Рис.2 Корни
квадратного уравнения
Рис.3 Существующий
и несуществующий корни
Как это выглядит графически показано на примере кубического уравнения (может быть до 3-х корней) (рис.3). Как видно области первого и второго корня лежат выше нуля оси Х, таким образом, они просто отсутствуют среди рациональных чисел.
Возникает вопрос, как найти экстремум функции. Наиболее простой вариант этого решения – взять производную для уравнения по Х и найти корень полученной функции. Вычисление производных так же можно выполнить численным методом, рассмотренным в предыдущей работе.