- •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. Сглаживание и осреднение рядов
- •Задания
- •Литература
Iter(a, b, e) n Last (b)
for i 0 . . n
r (A i, i ) -1, x i b i ∙ r
s i x i , y i 0
for j 0 . . n
T i, j if (i = j, 0, A i, j ∙ r)
while |x - y| > e
y x, x s - Ty
x
C. Во многих задачах матрицы линейных систем уравнений ока-зываются сильно разреженными (бóльшая часть элементов – нули). Эту специфику также можно "употребить во благо". Например, в слу-чае 3-диагональных систем уравнений (А i,j = 0 при | i - j | > 1), очень эффективен метод "прогонки", использующий лишь эти три диагона-ли матрицы данных. Будем считать, что система линейных уравнений
имеет вид:
Из первого уравнения имеем: x 0 = b 0 / a 01 , x 1 = u 0 - v 0 x 1 . Если уже
найдено представление
x i - 1= u i - 1 - v i - 1 x i ( i > 1), (1)
то из уравнения a i 0 (u i - 1 - v i - 1 x i ) + a i 1 x i + a i 2 x i + 1 = b i получаем
x i = u i - v i x i + 1 , где теперь
u i = v i = (i = 1, 2, ...) . (2)
Тогда из последнего уравнения x n - 1 = и по форму-ле (1) получаем x i для всех i = n - 2, n - 3, ... , 1, 0 (обратный ход про-гонки, формулы (2) определяют прямой ход). Очевидно, что для хра-нения значений u i , v i можно использовать измененные x i , b i . Поэ-тому программа, реализующая процесс прогонки, может быть записа-на достаточно компактно и просто. С вычислительной точки зрения метод прогонки имеет много очевидных преимуществ перед методом итераций (например, программа легко справляется с системой уравне-ний с более чем 10000 неизвестных). В MathCad метод можно офор-мить в виде функции:
P rog(A, b) n Last(b)
x 0 b 0 (A 0, 1) -1, b 0 A 0, 2 (A 0, 1) -1
for i 1 . . n
p (A i, 1 - A i, 0 b i - 1) -1
x i (b i - A i, 0 x i - 1) p, b i A i, 2 p
for i n - 1 . . 0
x i x i - b i x i + 1
x
D. Переопределенные системы линейных уравнений удобно ре-
шать методом обобщенной обратной матрицы A+, возвращаемой функ-цией Geninv. Матрица A+ = (ATA)-1AT обладает свойством аналогич-ным свойству настоящей обратной матрицы: A+AA+ = A+, AA+A = A. Полученное "решение" не является решением системы уравнений в обычном смысле, оно минимизирует скалярный квадрат разности меж-ду левой и правой частями системы (метод наименьших квадратов). Пусть, например, через точки (x i , y i ), i = 0, ... ,n - 1, плоскости нужно провести параболу вида у = ах2 + bх + с, наименее уклоняющуюся (в смысле наименьших квадратов) от исходных данных. Составим матри-цу для i = 0 ... n - 1, j = 0 ... 2, A i, j . Тогда решение за-дачи, т. е. вектор коэффициентов (a, b, c), возвращает Geninv(A) y.
Аналогично можно решать любую линейную задачу среднеквадратич-
ного приближения (см. также функции Slope, Intercept, Regress). Для простейшей ситуации y = a x + b (линейная регрессия) коэффициенты
получаются стандартно как a = Slope(x, y), b = Intercept(x, y).