- •Программирование в 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. Методы решения линейной краевой задачи для обыкновенных дифференциальных уравнений
4.6.1. Постановка задачи
Пусть дано ОДУ второго порядка:
Y"+P(x)Y'+g(x)Y=f(x) |
(4.54) |
где P(x), g(x), f(x) - известные непрерывные на отрезке [a, b] функции. Линейная краевая задача для (4.54) состоит в том, что его решение на концах интервала должно удовлетворять линейным краевым условиям:
A0Y(a)+A1Y'(a)=A B0Y(b)+B1Y'(b)=B |
(4.55) |
где A0, A1, B0, B1 - заданные постоянные, причем A0, A1, B0, B1 не равняются одновременно нулю (|A0|+|A1|0; |B0|+|B1|0). Если A=B=0, то краевые условия (4.55) называются однородными. Линейная краевая задача называется однородной, если однородно уравнение (4.54) (f(x)=0) и краевые условия (4.55). Поскольку условия (4.55) должны выполняться в двух точках - на концах интервала [a, b], их называют двухточечными краевыми условиями, а краевую задачу - двухточечной краевой задачей. Точное решение краевой задачи возможно в редких случаях. Поэтому на практике часто используют приблизительные методы решения, которые можно разбить на две группы:
а) аналитические;
б) разностные.
Рассмотрим один из разностных методов - метод конечных разностей.
4.6.2. Метод конечных разностей
Одним из наиболее простых методов решения линейной краевой задачи (4.54 - 4.55) является сведение ее к системе конечно-разностных уравнений. Классическое определение производной функции одной переменной записывается в виде:
Конечно, на ЭВМ мы не можем провести предельного перехода. С другой стороны, мы можем предоставить h некоторое маленькое, хотя и ненулевое значение и проверить, что приближение получается довольно точным (проблема точности), и что ошибка не увеличивается в ходе процесса вычислений (проблема устойчивости). Этот метод (конечных разностей) сводится к тому, что мы заменяем производную разностью. Разобьем отрезок [a, b] на n равных частей длиной h (шаг). h=(b-a)/n
Обозначим точки деления отрезка [a, b]:
X0=a; Xn=b; Xi=X0+ih (i=1, 2, ..., n-1);
Pi=P(Xi); gi=g(Xi); fi=f(Xi); Yi=Y(Xi); Yi'=Y'(Xi); Yi"=Yi"(Xi).
Заменим приблизительно в любой внутренней точке Xi отрезка [a, b] производные Yi' и Yi" на конечно-разностные отношения:
Yi'=(Yi+1-Yi)/h; Yi"=(Yi+2-2Yi+1+Yi)/h2. |
(4.56) |
Для предельных точек X0=a и Xn=b представим:
Y0'=(Y1-Y0)/h; Yn'=(Yn-Yn-1)/h. |
(4.57) |
Используя формулы (4.56) и (4.57), приблизительно заменим уравнения (4.54) и краевые условия (4.55) системой n+1 линейных алгебраических уравнений с n+1 неизвестными Y0,Y1,Y2,...,Yn, которые представляют собой значения искомой функции Y=Y(x) в точках X0,X1,X2,...,Xn:
(Yi+2-2Yi+1+Yi)/h2 +Pi(Yi+1-Yi)/h+giYi=Fi; (i=0, 1, 2, ..., n-2) A0Y0+A1(Y1-Y0)/h=A; B0Yn+B1(Yn-Yn-1)/h=B. |
(4.58) |
Решив эту систему, можно получить таблицу приблизительных значений искомой функции Y=Y(x). На практике часто производные Yi' и Yi" во внутренних точках Xi отрезка [a, b] заменяют центрально-разностными отношениями:
Yi'=(Yi+1-Yi-1)/2h; Yi"=(Yi+1-2Yi+Yi-1)/h2, |
(4.59) |
а для предельных точек X0=a и Xn=b справедливы формулы (4.57). Тогда система уравнений для определения Y0, Y1, ... ,Yn принимает вид:
(Yi+1-2Yi+Yi-1)/h2+Pi(Yi+1-Yi-1)/2h+giYi=Fi; (i=0, 1, 2, ..., n-1) A0Y0+A1(Y1-Y0)/h=A; B0Yn+B1(Yn-Yn-1)/h=B. |
(4.60) |
Для оценки погрешности метода конечных разностей на практике часто используют следующее приблизительное выражение:
Yi*-Y(Хi)=1/3 [Yi*-Yi], |
(4.61) |
где Y(Хi)-значение точного решения краевой задачи в точке X=Xi; Yi -значение приблизительного решения, вычисленного в точке X=Xi с шагом h; Yi*-значение приблизительного решения, вычисленного в точке X=Xi с шагом h/2.
Чтобы найти приблизительное решение краевой задачи с заданной точностью , необходимо провести вычисления с шагом h и h/2 и сравнить полученные результаты. Если [Yi* -Yi]<, то значение Yi* (i=1,2,...,n) можно принять за решение краевой задачи.