- •Bведение
- •1. Основы языка Basic
- •1.1. Основные структуры
- •1.2. Операторы ввода, вывода, позиционирования
- •1.3. Числа
- •1.4. Строки
- •1.5. Операторы def, dim, пользовательский тип
- •1.6. Разветвление и альтернатива
- •1.7. Циклы
- •If k then print "пароль принят" else print "ошибка пароля"
- •Input "Введите произвольный текст : ", txt
- •Input X
- •1.8. Программные стэки
- •1.9. Массивы
- •If I and jb then
- •Input n
- •1.10. Функции, подпрограммы
- •1.11. Файлы
- •1.12. Сегментирование программы
- •Input n
- •1.13. Работа с графической информацией
- •If nu then gosub Move 'перемещение рисунка
- •1.14. Звуковое воспроизведение
- •2. Элементы vba
- •2.1. Типы переменных
- •2.2. Использование массивов
- •2.3. Разветвление и циклы
- •2.4. Работа с ячейками листа
- •If y X Then
- •If Check Then
- •2.5. Элементы управления
- •If X 0 Then
- •2.6. Пользовательские классы
- •If IsEmpty(Text2) Then Exit Sub
- •2.7. Построение графиков в excel
- •2.8. Построение графиков и таблиц в word
- •3. Ключи в word
- •4. Гипертекстовая разметка
- •4.1. Основные тэги html
- •4.2. Форматирование таблиц
- •4.3. Фреймы
- •5. Основы программирования в среде MathCad
- •5.1. Особенности языка MathCad
- •5.2. Некоторые вычислительные модели
- •5.2.1. Системы уравнений
- •5.2.1.1. Системы линейных уравнений
- •Iter(a, b, e) n Last (b)
- •5.2.1.2. Нелинейные уравнения и системы
- •5.2.2. Определенный интеграл
- •5.2.3. Функции на дискретном множестве
- •5.2.4. Обыкновенные дифференциальные уравнения
- •5.2.5. Минимизация функций
- •5.2.5.1. Функции одной переменной
- •5.2.5.2. Функции многих переменных
- •5.2.6. Pазностная модель и прогноз
- •1 Otherwise (коэффициенты непрерывной модели)
- •5.2.7. Сглаживание и осреднение рядов
- •Задания
- •Литература
5.2.1.2. Нелинейные уравнения и системы
А. Простые итерации типа x n + 1 = f(x n ) (n = 0, 1, ... , x 0 – на-чальное приближение) приводят при n ∞ к решению уравнения x = f(x), если выполнено условие | f ′ (x) | M < 1 (достаточное условие сходимости) в некоторой окрестности точного решения. Уравнение F(x) = 0 всегда можно привести к указанному виду, записав его как x = x + k F(x) (k – параметр релаксации). Тогда итерации
x n + 1 = x n + kF(x n ) (n = 0, 1, 2, …) будут сходиться при условии | 1 + kF′(x) | M < 1. Параметр k можно выбирать произвольно при выполнении указанных условий. При оптимальном выборе параметра k на каждом шаге 1 + kF′(x n) = 0, откуда получаем k = - (F′(x n )) -1 - это метод Ньютона: x n + 1 = x n - (F′(x n )) -1 F(x n ) (для уравнения F(x) = 0). Например, получается как решение уравнения x m - a = 0 и метод Ньютона здесь приводит к итерациям x n + 1 = , х 0 = 1 (например), которые быстро сходятся к точному решению для
произвольного m > 1. Итерации легко оформить в виде функции:
root(m, a) x 1, y a
while |x - y| > 0.000001
y x, x
x
В сложных случаях производную можно заменить секущей k = = - (F′()) -1 для некоторого : (x n - )( - x n - 1) > 0,
что приводит к методу (секущих, квазиньютона):
x n + 1 = (n = 1, 2, ... ).
Методы легко программируются. Приведем для примера метод релаксаций и квазиньютона и результат их применения для прибли-женного решения уравнения ln(x) = (1 + x 2) -1, или (1 + x 2)ln(x) - 1 = 0, т. е. F(x) = 0 при F(x) = (1 + x 2)ln(x) – 1 и сравним с результатом
работы блока Given ... Find. Поиск начинается всюду с точки х = 2.
Relax(F, x, k, ) n 0, t x + 1
while |t - x| >
t x, n n + 1
x t + kf(t)
Quanew(F, x, ) n 0, z x + 1, y x + 100
fx F(x), fy F(y)
while |z - x| >
z (fyx - fxy)(fy - fx) -1
x y, y z, fx fy
fy F(z), n n + 1
(здесь - точность приближения, n - число итераций). Обе програм- мы для = 10 -5 дают приближенное решение х = 1.4013215 и х = =1.4013216 со значением функции в первом случае -2.610 -7, во вто-ром 2.1410 -12. Релаксация требует при k = - 0.1, -0.3, -0.5 n = 27, 7 и 18 итераций. Метод секущих (Quanew) достигает результата за семь итераций. Встроенный блок Given ... Find находит значение х = 1.4013212 со значением функции - 1.16910 -6.
В. Для нелинейных систем уравнений F(x) = 0 (F: ℝ ℝ ),
используя метод Ньютона, аналогично предыдущему получим:
x (n + 1) = x (n) - [DF(x (n))] -1 F(x (n)) , n = 0, 1, ... ,
где DF(x(n)) - матрица частных производных F в точке x (n). Здесь на
каждой итерации нужно решать линейную систему уравнений
DF(x(n)) (x(n + 1) – x(n)) = - F(x(n))
относительно вектора s = x(n + 1) – x(n) . Тогда процесс уточнения ре-
шения принимает вид (здесь D(f, х) = Df(х)):
Zero(F, D, x, ) d ← 1, t ← x
while d >
s ← f(t), M ← D(F, t)
s ← Lsolve(M, s)
d ← |s|, t ← t - s
Например, для двух функций с двумя переменными имеем:
F(x, y) = , DF(x, y) = .
Для произвольного числа переменных (и уравнений) удобнее рабо- тать с векторами (как отмечено в начале пункта). Тогда дифференци-рование по координатам проще вычислять отношением приращений функции и аргумента (см. конец п. 1).
Пример. Рассмотрим систему трех уравнений с тремя неизвест-ными с отправной точкой x = y = z = 2. Положим n = 3 i 0 . . n - 1 x i 2 , введем вектор-функцию
f(x)
и выполним R Zero(f, D, x, 10 -6) . Обратим внимание на то, что ре-зультат R является вектором, компоненты которого (их нельзя наз-вать "координаты") также векторы. Поэтому непосредственный вывод результата в MathCad выглядит так: R = (каждый элемент – матрица из трех строк и одного столбца, т. е. вектор). Получим реше-ние R 0 и значение R 1 функции f: R 0 = , R 1 =
- практически точно.