- •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. Некоторые вычислительные модели
Здесь будут рассмотрены некоторые простейшие методы при-ближенного решения популярных задач в системе Mcad, преследуя две цели:
1) на конкретных примерах научиться программированию;
2) заглянуть в "кухню" алгоритмов, используемых в пакете
Mcad, чтобы пользоваться ими сознательно.
5.2.1. Системы уравнений
В общем, в простейшей ситуации здесь можно воспользоваться кнопкой "Solve", блоками Given . . Find, Given . . Minerr, а также функциями Root, Polyroot (для многочленов), Lsolve (для линейных систем уравнений), обратной матрицей, обобщенной обратной матри-цей (Geninv), а в случае двух переменных функциями Slope, Intercept.
5.2.1.1. Системы линейных уравнений
В этом пункте будет обсуждаться самая популярная (после опти-мизации) задача решения системы линейных уравнений вида A x = b, где А – прямоугольная (чаще всего квадратная) матрица, х – искомый вектор, b – вектор (или матрица) правой части. Если А – квадратная матрица, а b – вектор, то задача легко решается либо использованием обратной матрицы (x = A-1b), либо применением встроенной функции Lsolve(A, b), возвращающей вектор решения. Но заглянем поглубже.
А. Обыкновенная квадратная хорошо обусловленная (определи-тель матрицы А не слишком мал по сравнению с ее элементами) систе-ма уравнений. Ее можно легко решить методом Крамера и методом исключения Гаусса. Программирование метода Крамера довольно оче-
видно:
Cramer(A, b) := d |A|
for k 0 .. Last(b)
C A, C b
x k |C| ∙ d
x
Метод Гаусса удобно программировать для расширенной матрицы
C = (A, b), используя в одном проходе полное исключение (по типу
преобразования Жордана):
Gauss(A, b) := n Last(b), C Augment(A, b)
for i 0 .. n
p C i,, i-1
for j 0 .. n + 1
Ci, j Ci, j ∙ p
for k 0 .. n
if k ≠ i
p Ck, i ,
for j i .. n + 1
Ck, j Ck, j – Ci, j ∙ p
C
B. В более сложных ситуациях необходимы специальные прие-мы. В самом деле, как правило Крамера, так и метод Гаусса для реше-ния системы уравнений с n неизвестными требуют порядка n3 ариф-метических операций. Для больших систем уравнений это довольно пессимистичная оценка (в задачах экономики решаются системы уравнений с сотнями и тысячами неизвестных). Кроме того, не всегда требуется предельная точность результата. Рассмотрим для примера (который позволяет лишь заглянуть в "кухню" методов вычислений) систему линейных уравнений Ax = b с доминирующей главной диа-гональю, т. е. с матрицей А такой, что | A i, i | > | A i, j | . Вве- дем матрицу Т i, j = и вектор s i = b i / A i,i . Тогда сис-тему уравнений можно записать в виде x = s - Tx . Так как в данном случае можно выбрать норму матрицы Т (ее можно оценить как мак-симальное значение суммы модулей элементов матрицы в каждой строке) меньше единицы, то итерационный процесс уточнения ре-шения x (n + 1) = s - Tx (n), x (0) = s, n = 0, 1, ... , будет сходиться к точно-
му решению исходной задачи (метод итераций). На каждой итерации требуется лишь порядка n2 вычислений. Процесс можно оформить в
виде функции: