- •Программирование в 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.1.3. Метод Ньютона (касательных).
Метод Ньютона используют при решении уравнения f(x)=0, где f(x) непрервно-дифференцируемая функция (иллюстрация на рис.4.3, алгоритм – рис.4.4). Для начала вычислений требуется задание начального приближения x0. Последующие приближения вычисляются по формуле:
Xn+1=Xn-f(Xn)/f'(Xn), f'(Xn)0, n=0,1,2,3... |
(4.2) |
Получим формулу (4.2): точки с координатами (Xn, f(Xn)) и (Xn+1, 0) принадлежат одной прямой – касательной к функции f(x). Таким образом, можно составить два уравнения для этой касательной:
f(Xn)=k Xn+m;
k Xn+1+m=f(Xn)=0; где k=f'(Xn).
Совместное решение этих уравнений даст формулу (4.2).
Геометрически Xn+1 является значением абсциссы точки пересечения касательной к кривой у=f(х) в точке (Хn; f(Хn)) с осью абсцисс, поэтому метод Ньютона называют методом касательных.
В качестве начального приближения нужно выбрать ту граничную точку интервала, для которой знак f(x) совпадает со знаком второй производной. В противном случае в качестве следующего приближения можно получить значение аргумента, расположенное за пределами интервала [а; b], и может случится, что процесс не будет сходящимся.
Рис.4.3 Рис.4.4
Пример
При расчете аппарата однократного выпаривания для расчета необходимой температуры нужно решить следующее уравнение:
0.01*Т3-4*Т2+180*Т+8160=0.
Из физических соображений следует, что искомая температура (корень уравнения) находится в интервале 330-360К. Определим ее методом Ньютона с точностью =0.5К. Для расчета по формуле (4.2) необходимо найти первую производную. Она равняется
f'(x)=0.03*Т2-8*Т+180.
Для выбора начального приближения проверим знаки функции и ее второй производной в точке x=360:
f(x)=21120>0,
f''(x)=0.06*Т-8 =13.6 >0;
то есть, эту точку можно использовать в качестве начального приближения. Используя (4.2) последовательно вычисляем:
x1=x0-(f(x0)/f'(x0))=360-(21120/1188)=342.22
x2=x1-(f(x1)/f'(x1))=342.22-(2093/955.7)=340.03 |x2-x1|>
x3=x2-(f(x2)/f'(x2))=340.03-(2909/928.4)=340 |x3-x2|<
Ответ: Т=340К
4.1.4. Метод хорд (секущих).
В методе Ньютона на каждом шаге надо вычислять значения функции и производной. На практике чаще используют методы, которые требуют вычисления только значения функции. Одним из таких методов является метод хорд (иллюстрация на рис.4.5, алгоритм – рис.4.6). Этот метод основан на предположении, что на довольно маленьком отрезке функция y=f(x) изменяется линейно. Тогда кривую y=f(x) на этом отрезке можно заменить хордой и в качестве приближенного значения корня принять точку пересечения хорды с осью абсцисс. Проведем прямую сквозь точку с координатами (a, f(a)) и (b, f(b)) (где а и b -концы интервала, которые содержат корень), найдем точку пересечения этой прямой с осью абсцисс.
X1=a-(f(a)/(f(b)-f(a))*(b-a)) |
(4.3) |
Найденное значение x1 можно принимать как новую (левую или правую в зависимости от знака f(x)) точку границы сокращенного интервала.
Найдя значения f(x1) по формуле (4.3) повторим вычисления и найдем x2 и т.д. Степень приближения определяется выражением |xn+1-xn|< , где - заданная точность.
Формула (4.3) описывает метод секущих для функций, которые имеют небольшую кривизну.
Рис.4.5 Рис.4.6
Пример
Решить уравнение:
х3- 0.4*x2+0.9*x-0.36=0.
Корень лежит в интервале [0.2; 0.5]. Определить его с точностью =0.0005. Вычислим значения функции на концах интервала: f(0.2)=-0.188 f(0.5)=0.115. По формуле (4.3) найдем значения х: 0.2-(-0.188*(0.5-0.2)/(0.115-(-0.188)))=0.386. Потом определим f(x). Так как f(x1)=-0.015, то корень уравнения лежит в интервале |0.386;0.5|. Найдем следующее приближение х2: 0.386-(-0.015*(0.5-0.386)/(0.115-(-0.015)))=0.399. Так как |х2-х1|>, то повторим процедуру. Значение f(x2)=-0.0011 и x3=0.4. Поскольку |х3-х2|< ,то решение найдено. Ответ: х= 0.4.