- •Программирование в excel
- •Симферополь 2000
- •Факультет "Механизация сельского хозяйства" Программирование в excel
- •1. Основы программирования на vba
- •1.1. Создание, редактирование и запись программ
- •1.1.1. Запись макроса
- •1.1.2. Как найти макрос в проекте
- •1.1.3. Написание новой процедуры
- •Чем макрос отличается от процедуры
- •1.1.4. Процедуры типа Sub и Function
- •1.1.5. Закрытые и открытые процедуры
- •1.1.6. Использование значения, возвращаемого функцией
- •1.1.7. Выполнение процедуры Sub
- •1.1.8. Передача аргументов в процедуру
- •1.1.9. Именованные аргументы
- •1.1.10. Написание процедур для обработки событий
- •1.1.11. Где хранится код обработки события
- •1.1.12. Средства, ускоряющие написание программ
- •1.1.13. Как написать легкочитаемую программу
- •1.2. Переменные, константы и типы данных
- •1.2.1. Типы данных в Visual Basic
- •1.2.2. Объявление константы, переменной или массива
- •1.2.3. Объявление объектной переменной
- •1.2.4. Встроенные константы
- •1.3. Управляющие конструкции
- •1.3.1. Операторы ветвления
- •1.3.2. Операторы циклов
- •1.3.3. Вложение управляющих конструкций
- •1.3.4. Выход из циклов и процедур
- •1.4. Структура программы
- •2. Сортировка данных
- •2.1. Алгоритм сортировки обменами (алгоритм “пузырька”)
- •2.2. Алгоритм сортировки вставками
- •2.3. Алгоритм сортировки выбором элемента
- •2.4. Алгоритм быстрой сортировки (метод Хоора)
- •2.5. Алгоритм пирамиды (метод Уильямса-Флойда)
- •2.6. Учебные задачи по программированию сортировки данных
- •3. Работа vba с объектами Excel
- •3.1. Как получить справку по Visual Basic для Microsoft Excel
- •3.2. Объекты Microsoft Excel
- •3.3. Работа с объектом Application
- •3.4. Работа с объектом Workbook
- •3.4.1. Открытие рабочей книги
- •3.4.2. Закрытие рабочей книги
- •3.4.3. Создание и сохранение рабочей книги
- •3.5. Работа с объектом Range
- •3.6. Строковые ссылки в стиле а1 или имена диапазонов
- •3.6.1. Числовые индексы строк и колонок
- •3.6.2. Свойство Offset
- •3.6.3. Свойства CurrentRegion и UsedRange
- •3.6.4. Организация циклов для перебора ячеек диапазона
- •3.6.5. Применение свойства Address для отладки кода, работающего с объектом Range
- •3.7. Работа с событиями
- •3.7.1. Включение и отключение обработки событий
- •3.7.2. Использование событий, связанных с рабочими листами
- •3.7.3. События на уровне рабочего листа
- •3.7.4. События на уровне диаграммы
- •3.7.5. События на уровне рабочей книги
- •3.7.6. События на уровне приложения
- •3.7.7. Модули классов и события
- •4. Численные методы математики
- •4.1. Методы решения нелинейных уравнений
- •4.1.2. Метод деления отрезка пополам (метод дихотомии).
- •4.1.3. Метод Ньютона (касательных).
- •4.1.4. Метод хорд (секущих).
- •4.1.5. Метод итераций (метод последовательных приближений).
- •4.2.1. Теоретические сведения
- •4.2.2. Метод Крамера
- •4.2.3. Метод Гаусса
- •4.2.6. Метод Зейделя
- •4.3. Обработка экспериментальных данных
- •4.3.1. Задачи, которые возникают при обработке экспериментальных данных.
- •4.3.2. Интерполяция
- •4.3.2.1. Интерполяция функций
- •4.3.3.2. Определение параметров эмпирической формулы
- •4.4. Методы численного интегрирования
- •4.4.1. Метод трапеций
- •4.4.2. Метод Симпсона
- •4.4.3. Оценка точности формул численного интегрирования. Выбор шага интегриров-ания
- •4.4.3.1. Выбор шага интегрирования по оценке остаточного члена (ошибки)
- •4.4.3.2. Выбор шага интегрирования с помощью двойного пересчета
- •4.5.1. Теоретические сведения
- •4.5.2. Одноступенчатые методы
- •4.5.2.1. Решение с помощью рядов Тейлора
- •4.5.2.2 Метод Эйлера
- •4.5.2.3. Модифицированный метод Эйлера
- •4.5.2.4. Метод Эйлера-Коши
- •4.5.2.5 Метод Рунге-Кутта
- •4.5.3. Многоступенчатые методы
- •4.5.3.1. Методы прогноза и коррекции
- •4.6. Методы решения линейной краевой задачи для обыкновенных дифференциальных уравнений
- •4.6.1. Постановка задачи
- •4.6.2. Метод конечных разностей
- •4.6.3. Метод прогонки
- •4.6.4. Алгоритм решения краевой задачи методом прогонки.
4.6.3. Метод прогонки
При большом n непосредственное решение систем (4.58) или (4.60) становится очень громоздким. Для решения систем такого вида был разработан специальный метод, который получил название метода прогонки. Пусть имеем систему (4.58). Рассмотрим первое из n-1 уравнений
(Yi+2-2Yi+1+Yi )/h2+Pi(Yi+1-Yi )/h+giYi=Fi; (i=1, 2 ,..., n-1). |
|
После преобразований получаем:
Yi+2+(-2+hPi)Yi+1+(1-hPi+h2 gi)Yi=h2 Fi. |
(4.62) |
Введем обозначения:
Mi=-2+hPi; Ki=1-hPi+h2gi, (i=0, 1, 2,..., n-2). |
(4.63) |
Выполняем замены в (4.62):
Yi+2+MiYi+1+KiYi=h2Fi. |
(4.64) |
Решив (4.64) относительно Yi+1, получим:
Yi+1=h2Fi/Mi -Yi+2/Mi - KiYi/ Mi |
(4.65) |
Нетрудно убедиться в том, что, исключив Yi из (4.65) с помощью краевых условий системы (4.58), получим это уравнение в виде:
Yi+1=Ci(Di –Yi+2) (i=0, 1, 2,..., n-2), |
(4.66) |
где Ci, Di - некоторые коэффициенты.
Пусть, например, i=0; тогда (4.65) примет вид:
Y1=h Fi/M0 -Y2/M0 - K0Y0/M0 . |
(4.67) |
Из краевого условия A0Y0+A1( Y1-Y0 )/h =A найдем Y0:
Y0 =Ah/(A0-h)-A1Y1/(A0h-A1) |
и подставим его в (4.67). После преобразований получим:
Обозначим:
(4.68)
Из (4.66) можно записать:
Yi=Ci-1(Di-1-Yi+1).
Подставляя это выражение в (4.64), получим:
Yi+2+MiYi+1+KiCi-1(Di-1-Yi+1)=h2Fi.
Откуда:
Yi+1=[h2Fi-KiCi-1Di-1]/[Mi-KiCi-1] |
(4.69) |
Приравнивая (4.66) и (4.69), получим рекуррентные формулы для определения Ci и Di:
Ci=1/(Mi-KiCi-1); Di=hFi-KiCi-1Di-1, |
(4.70) |
где i=1, 2, ..., n-2; Ci, Di- прогоночные коэффициенты. Метод прогонки состоит из двух этапов: прямого и обратного хода. На первом этапе (прямой ход) на основе (4.68) находятся коэффициенты C0 и D0. После этого, последовательно используя рекуррентные формулы (4.70), получают значения Ci и Di (i=1, 2, ..., n-2). Второй этап (обратный ход) начинается с определения Yn. Используя второе краевое условие (4.58) и формулу (4.66) при i=n-2, запишем систему уравнений:
B0Yn+B1(Yn-Yn-1)/h=B; Yn-1=Cn-2(Dn-2-Yn). |
(4.71) |
Решив эту систему относительно Yn, получим:
Yn=[B1Cn-2Dn-2 + Bh]/[B1(1+Cn-2)+B0h]. |
(4.72) |
Подставив в (4.72) уже найденные прямым ходом Сn-2, Dn-2, находим Yn. После этого вычисляем Yn-1, Yn-2, Yn-3, ..., Y1, последовательно используя рекуррентную формулу (4.66):
Yn-1=Cn-2(Dn-2-Yn); Yn-2=Cn-3(Dn-3-Yn-1); ..............; Y1=C0(D0-Y2). |
(4.73) |
Значение Y0 находим по формуле, которая была получена из первого краевого условия (4.58):
Y0=(A1Y1-Ah)/(A1-A0h). |
(4.74) |