Работа с матрицами в MathCAD
Рассмотрим простейшие операции матричной алгебры, реализованные в MathCAD в виде операторов, причем следует отметить, что их запись максимально приближена к математической форме записи. Наиболее часто используемые операции расположены на панели инструментов Матрица (Matrix) (рис. 13), остальные можно найти используя меню Вставка → Функция … категории функций Vector and Matrix.

Рис. 6.13. Панели инструментов Матрица и Логика
Транспонированием называют операцию, переводящую матрицу размерности M × N в матрицу размерности N × M, делая столбцы исходной матрицы строками, а строки — столбцами. Ввод символа транспонирования (transpose)
осуществляется с помощью панели инструментов Матрица (Matrix)
или нажатием клавиш <Ctrl>+<1>. Не забывайте, что для вставки символа транспонирования матица должна находиться между линиями ввода.
Сложение и вычитание. В MathCAD можно как складывать матрицы, так и вычитать их друг из друга. Для этих операторов применяются стандартные символы «+» или «-», соответственно. Матрицы должны иметь одинаковую размерность, иначе будет выдано сообщение об ошибке. Каждый элемент суммы двух матриц равен сумме соответствующих элементов матриц-слагаемых. Результат унарной операции смены знака матрицы эквивалентен смене знака всех ее элементов. Для того, чтобы изменить знак матрицы, достаточно ввести перед ней знак минуса, как перед обычным числом.
При умножении следует помнить, что матрицу размерности M × N допустимо умножать только на матрицу размерности N × P (P может быть любым). В результате получается матрица размерности M × P.
Чтобы ввести символ умножения, нужно нажать клавишу со звездочкой <*> или воспользоваться панелью инструментов Матрица (Matrix), нажав на ней кнопку
Dot Product (Умножение). Умножение матриц обозначается по умолчанию точкой.
Для получения сведений о характеристиках матриц или векторов предусмотрены следующие встроенные функции:
· rows (A) — число строк;
· cols (A) — число столбцов;
· length(v) — число элементов вектора;
· last (v) — индекс последнего элемента вектора,
где A — матрица или вектор; v — вектор.
Скалярное произведение векторов (vector inner product)
определяется как скаляр, равный сумме попарных произведений соответствующих элементов. Векторы должны иметь одинаковую размерность, скалярное произведение имеет ту же размерность. Скалярное произведение двух векторов u и v равно , где — угол между векторами. Если векторы ортогональны, то их скалярное произведение равно нулю. Обозначается скалярное произведение тем же символом, что и умножение.
Векторное произведение (cross product) двух векторов u и v с углом между ними равно вектору с модулем , направленным перпендикулярно плоскости векторов u и v. Обозначают векторное произведение символом <x>, который можно ввести нажатием кнопки Cross Product (Векторное произведение)
в панели Матрица (Matrix) или сочетанием клавиш <Ctrl>+<8>.
Определитель матрицы обозначается стандартным математическим символом. Чтобы ввести оператор нахождения определителя матрицы, можно нажать кнопку Determinant (Определитель) на панели инструментов Матрица (Matrix)
или набрать на клавиатуре < | > (нажав клавиши <Shift>+<\>).
Рангом (rank) матрицы называют наибольшее натуральное число k, для которого существует не равный нулю определитель k -го порядка подматрицы, составленной из любого пересечения k столбцов и k строк матрицы. Для определения ранга матрицы в MathCAD используется функция rank(A), где А — матрица, ранг которой требуется найти.
Как известно, поиск обратной матрицы возможен, если матрица квадратная и ее определитель не равен нулю. Произведение исходной матрицы на обратную по определению является единичной матрицей. Для ввода оператора поиска обратной матрицы нажмите кнопку Инверсия (Inverse)
на панели инструментов Матрица (Matrix).
В линейной алгебре используются различные векторные и матричные нормы (norm), которые ставят в соответствие матрице некоторую скалярную числовую характеристику. Норма матрицы отражает порядок величины матричных элементов. В разных специфических задачах линейной алгебры применяются различные виды норм. MathCAD имеет четыре встроенных функции для расчета разных норм квадратных матриц:
· norm1(A) — норма в пространстве L1;
· norm2 (А) — норма в пространстве L2;
· norme (A) — евклидова норма (euclidean norm);
· normi (A) — max-норма, или -норма (infinity norm):
где A — квадратная матрица.
Часто бывает нужно переставить элементы матрицы или вектора, расположив их в определенной строке или столбце в порядке возрастания или убывания. Для этого имеются несколько встроенных функций, которые позволяют гибко управлять сортировкой матриц:
· sort(v) — сортировка элементов вектора в порядке возрастания;
· reverse (v) — перестановка элементов вектора в обратном порядке;
· csort(A, i) — сортировка строк матрицы выстраиванием элементов i-столбца в порядке возрастания;
· rsort(A,i) — сортировка столбцов матрицы выстраиванием элементе i-й строки в порядке возрастания, где v — вектор; А — матрица; i — индекс строки или столбца.
Примеры работы рассмотренных выше операторов представлены на рис. 6.14.

Рис. 6.14. Работа с матрицами в MathCAD
Для задания логических функций в MathCAD имеется панель инструментов Логические (Boolean) рис. 6.13. На ней расположены кнопки, отражающие отношения (=, >, <, £, ³, ¹) и основные логические операции: конъюнкция
, дизъюнкция
, отрицание
и исключающее или (XOR)
. Как известно, все логические функции можно выразить через три основные: конъюнкция, дизъюнкция и отрицание, что и отражено в листинге MathCAD-программы на рис. 6.15. Также в MathCAD можно производить интерпретацию и сложных логических функций (рис. 6.15).

Рис. 6.15. Логические функции в MathCAD
Вопросы и задания для самопроверки
1. Для решения каких задач предназначена программа MathCAD?
2. Какие панели инструментов имеются в MathCAD? Поясните их назначение.
3. Перечислите символьные операции преобразования.
4. Каким образом можно вычислить предел, сумму, производную, интеграл в MathCAD?
5. Какие функции для решения одного уравнения в MathCAD Вы знаете? В чем их отличие?
6. Опишите порядок решения задачи Коши для ОДУ в среде MathCAD.
7. Какие операции с матрицами Вам известны. Как их реализовать в MathCAD?
8. Какие логические операции предусмотрены в MathCAD?
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой.

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.
Лабораторная работа №3. Матричные вычисления в среде mathcad План
Основные операции с матрицами располагаются на панели Matrix (рис. 1).

Рис. 1. Панель матрицы
Для создания матрицы необходимо нажать кнопку
на панели Matrix, в результате чего появится окно Insert Matrix (Вставка матрицы), приведенное на рис. 2.

Рис. 2. Окно Insert Matrix
В окне Insert Matrix необходимо ввести количество строк (Rows) и количество столбцов (Columns). Панель Matrix содержит следующие операторы (рис. 3):

Рис. 3.Назначение операторов на панели matrix
Нижний индекс (Subscript) – позволяет обратиться к элементу матрицы (вектора) по его индексам (индексу),
Обращение (Inverse) – позволяет найти обратную матрицу, если определитель матрицы не равен 0,
Определитель (Determinant) – вычисляет определитель квадратной матрицы,
Ранжированная переменная (Rang Variable) – позволяет создать ранжированную переменную с заданным шагом, например 0,1,2,3
Рисунок (Picture) – позволяет визуализировать матрицу в виде рисунка,
Транспонирование (Transpose) – транспонирование матрицы,
Сумма элементов вектора (Vector Sum) – вычисление суммы элементов вектора,
Векторное произведение (Cross Product) – вычисление векторного произведения векторов,
Скалярное произведение (Cross Product) – вычисление скалярного произведения векторов,
Столбец матрицы (Matrix Column) – позволяет вывести столбец матрицы,
Векторизация (Vectorize) – применяется для расчета функций от матрицы.
Примеры применения команд приведены в таблице 1.

Задана матрица А

Вывод элемента (1,1) матрицы А.
Внимание! Начальная индексация элементов матриц и векторов 0.

Вычислена обратная матрица.


Вычислена транспонированная матрица.

Извлечен нулевой столбец матрицы

Вычислен синус от каждого элемента матрицы.
Внимание! Применена операция векторизации.
Упражнение 1. Создать матрицу А (по вариантам). Выполнить следующие операции:
а) Вывести верхний левый элемент.
б) Нижний правый элемент.
в) Вычислить обратную матрицу.
г) Найти определитель матрицы.
д) Найти транспонированную матрицу.
е) Извлечь первый столбец (начальная индексация 0).
ё) Вычислить косинус от каждого элемента матрицы.

















Пример применения операций с векторами приведен на рис. 4.
Заданы два вектора:

Вычислено скалярное произведение

Вычислен модуль вектора

Найден косинус угла между векторами.

Здесь модуль вектора задается при помощи кнопки Absolute value (абсолютное значение) на панели Calculator (Калькулятор).
Вычислено векторное произведение

Найдены суммы элементов векторов

Рис. 4. Примеры операций с векторами
Упражнение 2. Создать два вектора и вычислить скалярное и векторное произведение.
Найти сумму элементов вектора а. Найти модули векторов и угол между векторами.










Ранжированные переменные
Ранжированные переменные в Mathcad являются разновидностью векторов и предназначены, главным образом, для создания циклов или итерационных вычислений. Простейший пример ранжированной переменной — это массив с числами, лежащими в некотором диапазоне с некоторым шагом.
Например, для создания ранжированной переменной s с элементами 0,1,2,3,4,5:
1. Поместите курсор ввода в нужное место документа.
2. Введите имя переменной (s) и оператор присваивания «:».
3. Нажмите кнопку Range Variable (Ранжированная переменная) на панели
Matrix (Матрица), показанную на рисунке 5, либо введите символ точки с
запятой с клавиатуры.
4. В появившиеся местозаполнители (рис. 5) введите левую и правую границы диапазона изменения ранжированной переменной 0 и 5.

Рис. 5. Создание ранжированных переменных
Чтобы создать ранжированную переменную с шагом, не равным 1, например, с ранжированную переменную 1,3,5,7 , у которой шаг равен 2:
1. Создайте ранжированную переменную в диапазоне от о до 8 (см. рис. 6).
2. Поместите линии ввода на значение начала диапазона (1).
3. Введите запятую.
4. В появившийся местозаполнитель (рис. 6) введите следующее значение изменения ранжированной переменной (3).

Рис. 6. Ранжированная переменная с шагом 2
Упражнение 3. Создайте ранжированную переменную.
Начальное значение 2
Конечное значение 20
Начальное значение 10
Конечное значение 20
Начальное значение 0
Конечное значение 15
Начальное значение -10
Конечное значение 10
Начальное значение -5
Конечное значение 5
Начальное значение -3
Конечное значение 4
Начальное значение -7
Конечное значение 7
Начальное значение -2
Конечное значение 2
Начальное значение -4
Конечное значение 4
Начальное значение -2
Конечное значение 7
Начальное значение -2
Конечное значение 1
Начальное значение -2
Конечное значение 1
Начальное значение -4
Конечное значение 4
Начальное значение -4
Конечное значение 5
Начальное значение -2
Конечное значение 4
Начальное значение -4
Конечное значение 10
Начальное значение -4
Конечное значение 7
Начальное значение -7
Конечное значение 10
Начальное значение -4
Конечное значение 1
Начальное значение -4
Конечное значение 4
По числовым данным матрицы (массива) может быть построен график. Пример построения графика, заданного числовыми значениями матрицы приведен на рис. 7.

Рис. 7. Построение графика по элементам матрицы
Упражнение 4. Построить x-y график, по данным представленных в форме матриц
,
где а – порядковый номер студента в списке группы. В узлах графика необходимо поставить символ .
Создание матриц специального вида
В Mathcad легко создать матрицы определенного вида с помощью одной из встроенных функций. Примеры использования этих функций приведены на рисунке 8.
identity(N) — единичная матрица размера NxN;
diag(v) — диагональная матрица, на диагонали которой находятся элементы вектора v.

Рисунок 8 – Создание матриц специального вида
Упражнение 5. Создайте единичную матрицу размера (N+1)x(N+1), где N — порядковый номер студента в списке группы. Создайте вектор
,
где а – порядковый номер студента в списке группы и по этому вектору создайте диагональную матрицу.
Ранг матрицы
Рангом (rank) матрицы называют наибольшее натуральное число к, для которого существует не равный нулю определитель k-го порядка подматрицы, составленной из любого пересечения к столбцов и к строк матрицы. Для вычисления ранга в Mathcad предназначена функция rank (см. рисунок 9).

Рисунок 9 – Пример вычисления ранга матрицы
Упражнение 6. Создайте матрицу
,
где а – порядковый номер студента в списке группы и найдите ее ранг.
Загрузка рисунка в Mathcad
Чтобы загрузить рисунок в Mathcad, необходимо воспользоваться кнопкой Picture на панели Matrix и в появившемся местозаполнителе ввести путь к местоположению файла рисунка на диске (рисунок 9).

Рисунок 9 – Загрузка рисунка в Mathcad
Упражнение 7. Создайте произвольный рисунок в любом графическом редакторе (например Paint) и загрузите его в Mathcad.
Ввод-вывод во внешние файлы
Важный компонент ввода-вывода — это ввод-вывод во внешние файлы. Ввод внешних данных в документы Mathcad применяется чаще вывода, поскольку Mathcad имеет гораздо лучшие возможности представления результатов расчетов, чем многие пользовательские программы. Для общения с внешними файлами данных в Mathcad имеется несколько разных способов. Самый простой из них — использовать имеющееся семейство встроенных функций. Перечислим встроенные функции для работы с текстовыми файлами:
READPRN(«file») — чтение данных в матрицу из текстового файла;
WRITEPRN(«file») — запись данных в текстовый файл.
Примеры использования встроенных функций иллюстрируются рисунками 10—11. Результат действия примеров можно понять, просмотрев получающиеся текстовые файлы, например с помощью Блокнота Windows.

Рисунок 10 — Запись данных в текстовый файл

Рисунок 11 — Чтение данных в матрицу из текстового файла
и построения по ним графика
Упражнение 8. Создать с помощью программы Блокнот текстовый файла с данными
Загрузить данные из текстового файла в Mathcad и построить по ним график.
Иллюстрированный самоучитель по MathCAD 12
Вычисление определителей и обращение квадратных матриц. Определитель квадратной матрицы.
Рассмотрим еще несколько исключительно важных действий линейной алгебры, связанных с понятием определителя матрицы. Несмотря на то, что некоторые из них реализованы в Mathcad также в виде операторов, они требуют (при проведении расчетов по численным алгоритмам) несравненно больше внимания, нежели операторы упомянутые в двух предыдущих разделах.
Определитель (Determinant) матрицы обозначается стандартным математическим символом. Чтобы ввести оператор нахождения определителя матрицы, можно нажать кнопку Determinant (Определитель) на панели инструментов Matrix (Матрица) (листинг 7.14) или набрать на клавиатуре | (нажав клавиши SHIFT + \). В результате любого из этих действий появляется местозаполнитель, в который следует поместить матрицу. Чтобы вычислить определитель уже введенной матрицы:
- Переместите курсор в документе таким образом, чтобы поместить матрицу между линиями ввода (напоминаем, что линии ввода – это вертикальный и горизонтальный отрезки синего цвета, образующие уголок, указывающий на текущую область редактирования).
- Введите оператор нахождения определителя матрицы.
- Введите знак равенства (либо символьного вывода), чтобы вычислить определитель (численно или аналитически соответственно, как это показано в листинге 7.14).
Внимание!
Не путайте операторы вычисления определителя квадратной матрицы и длины вектора. В Matncad 12 введен принудительный контроль действий пользователя при вводе этих операторов во избежание путаницы (т. к. один и тот же символ используется для этих двух операций). При попытке вычислить определитель матрицы с помощью оператора |А|, введенного с панели Calculator (Калькулятор), а не Matrix (Матрица), будет выдано сообщение об ошибке, а результат вычисления детерминанта появится только после того, как пользователь вызовет контекстное меню и подтвердит в нем, что он собирается вычислить именно определитель матрицы. То же самое касается и длины вектора, если попытаться ввести его не с панели Calculator (Калькулятор), а с панели Matrix (Матрица).
Листинг 7.14. Вычисление определителя квадратной матрицы:
MathCAD — это просто! Часть 11. Продолжаем работать с матрицами
Матрицы — вещь важная, а потому было бы просто непростительно отводить на них всего одну статью из нашего цикла о работе в среде MathCAD. Узнав о том, как можно транспонировать матрицы, вычислять определители, обратные матрицы, а также перемножать и складывать их, сегодня мы с вами продолжим издевательства над этими важными в математике объектами. Думаю, что изложенные ниже сведения будут полезны и в практических вычислениях, производимых в среде MathCAD, ведь матрицы очень часто встречаются в реальных задачах.
Еще о вспомогательных функциях
В прошлый раз мы немного поговорили о специальных MathCAD’овских функциях, позволяющих разрезать матрицы на составные части или же склеивать их. Это не единственные из вспомогательных функций, действующих над матрицами, которые могут пригодиться в практике повседневной работы. Пришло время познакомиться с некоторыми другими функциями, которые также имеют неплохой шанс оказаться весьма и весьма полезными. Особую роль в матричном исчислении играют единичные матрицы. На всякий случай напомню, что единичной называется такая матрица, у которой все недиагональные элементы равны нулю, а элементы, расположенные на главной диагонали (от верхнего левого угла к нижнему правому), равны единице. Единичные матрицы могут иметь самые разные размеры. Чтобы пользователь не тратил свое время на вбивание нулей и единиц в строки и столбцы такой матрицы, в MathCAD’е имеется специальная функция Identity, создающая единичную матрицу заданного размера. У этой функции есть единственный аргумент, задающий размерность матрицы.
Еще она по своему действию довольно близкая к Identity функция называется Diag. Она создает не матрицы, а векторы, состоящие из диагональных элементов квадратных матриц (т.е. из тех элементов, которые стоят на ее главной диагонали). Стоит при этом отметить, что размер вектора, получаемого на выходе, автоматически определяется размером входной матрицы.
Для определения размера матриц можно использовать функции Rows и Cols. Каждая из них имеет один-единственный входной параметр, которым является сама матрица, а на выходе выдают значения числа строк и столбцов соответственно. Для определения размера вектора можно использовать функцию length, которая работает аналогично указанным для матриц функциям.
Интересной также является предоставляемая MathCAD’ом функция для сортировки элементов векторов. Называется она просто и незатейливо — Sort. В качестве входного параметра этой функции нужно передать вектор, сортировкой которого мы будем заниматься, и на выходе получим почти такой же вектор, только его элементы будут упорядочены по возрастанию. Для сортировки строк и столбцов матрицы можно воспользоваться соответственно функциями Rsort и Csort, которым нужно передать в качестве параметров саму матрицу и номер того столбца или строки, которые должны быть отсортированы. Правда, работают эти функции несколько загадочно, иногда сортируя не только нужный столбец (строку), но и все остальные (см. соответствующую иллюстрацию). Чтобы изменить порядок следования чисел в векторе или порядок строк в матрице на противоположный, нужно воспользоваться функцией Reverse, в качестве аргумента для которой нужно передать изменяемые матрицу или вектор.
Ранг и норма матрицы
Два фундаментальных понятия, играющих очень важную роль в линейной алгебре — это ранг и норма матрицы. MathCAD позволяет пользователю вычислять эти характеристики матриц без лишних усилий, и сейчас я расскажу, как именно это делается.
Минором матрицы порядка k называется определитель, вычисленный для матрицы, образованной из k столбцов и k строк данной матрицы. Главным минором называется минор, для которого номера выбранных столбцов совпадают с номерами выбранных строк. Понимаю, это определение звучит несколько громоздко, но я думаю, если вы прочитаете его внимательно еще раз, то все станет просто и понятно. Рангом матрицы называется наибольший порядок среди всех ее ненулевых миноров. Ранг матрицы характеризует число линейно независимых столбцов или строк матрицы, а потому в матричной алгебре эта характеристика используется весьма широко. Для вычисления ранга матрицы в MathCAD’е используется функция Rank, которой в качестве аргумента передается та самая матрица, ранг которой нужно вычислить.
Норма матрицы — понятие более расплывчатое, чем ранг. Для полного определения нормы матрицы используется система ограничений, которым должен подчиняться строящийся по определенным правилам функционал. Вы можете найти подробное определение нормы матрицы в любом учебнике по линейной алгебре. Мы же сейчас удовлетворимся знанием того, что норма матрицы — это некоторый аналог величины, который для векторов называют длиной (норма вектора как раз и есть его длина). Впрочем, в отличие от длины вектора, где все понятно и определенно, норма матрицы может вычисляться несколькими разными способами, и в зависимости от способа вычисления ее величина может быть различной. Всем функциям для вычисления нормы матрицы, о которых здесь идет речь, требуется в качестве аргумента передавать ту матрицу, для которой будет вестись вычисление нормы. Функция Norm1 определяет норму путем складывания модулей элементов для каждого из столбцов и выбором наибольшей из получившихся для столбцов сумм. Функция Normi работает аналогичным образом, только для вычисления сумм там используются не столбцы, а строки. Функция Norme вычисляет норму матрицы по тому же алгоритму, по какому вычисляется норма вектора: квадраты всех элементов матрицы суммируются, а затем из полученного числа извлекается корень.
Собственные вектора и собственные значения матриц
Собственным вектором x и собственным значением ? матрицы X называются такие вектор и число соответственно, которые удовлетворяют соотношению xX = ?x. Обычно матрица имеет несколько собственных векторов и соответствующих им собственных значений, а потому мы будем рассматривать именно этот случай. Конечно, в MathCAD’е не слишком сложно с помощью некоторых преобразований рассчитать необходимые числа и вектора самостоятельно, однако можно еще больше упростить себе жизнь, воспользовавшись встроенными в эту среду функциями.
Функция Eigenvecs принимает в качестве входного параметра некоторую матрицу, а возвращает другую, содержащую собственные вектора исходной. При интерпретации результатов работы этой функции необходимо помнить, что в MathCAD’е вектора записываются в виде столбцов, так что и в этой матрице каждый из столбцов является собственным вектором первоначальной матрицы. Другая функция, Eigenvals, также принимает на вход некоторую матрицу, однако выдает для нее уже не собственные вектора, а собственные значения. Записываются они также в виде столбика. В этом столбце они идут в том же порядке, что и столбцы в матрице, возвращаемые первой функцией. То есть i-му столбцу матрицы, получаемой на выходе функцией Eigenvecs, соответствует i-е собственное значение в векторе. Впрочем, проследить соответствие собственных векторов и собственных значений для матрицы можно и более наглядным образом. Для этого существует специальная функция Eigenvec (не путайте с Eigenvecs), которой на вход передаются матрица и одно из ее собственных значений, а она уже вычисляет соответствующий этому собственному значению собственный вектор.
Скалярное и векторное произведение векторов
Напоследок поговорим о вещах довольно простых, но очень распространенных в практике решения задач, а потому особенно важных. Сейчас мы рассмотрим, как с помощью MathCAD’а вычислять скалярное и векторное произведение векторов. Напомню, что скалярным произведением x.y называется число, равное x0y0 + x1y1 + x2y2 + … + xnyn, а вот с векторным все несколько сложнее. Оно определяется только для трехмерных векторов и вычисляется как определитель матрицы, составленной из базисных векторов (i, j и k) и элементов тех векторов, для которых вычисляется векторное произведение. Традиционно в математике векторное произведение обозначают c помощью крестика, который ставится между двумя перемножаемыми векторами.
Для вычисления скалярного и векторного произведения векторов обратимся снова к панели матричных вычислений, неоднократно выручавшей нас в наших упражнениях с MathCAD’ом. Скалярное произведение называется на ней Dot Product и обозначается как точка между двумя векторами, а векторное — Cross Product и обозначается крестиком, как я уже говорил выше. Чтобы перемножить два вектора, вы можете сначала обозначить их с помощью каких- либо символьных обозначений, а можете сразу записывать произведения между столбцами чисел.
Теперь, пожалуй, о матрицах самое основное и важное сказано. Как видите, в плане работы с векторами и матрицами MathCAD ничуть не менее мощный, чем во всем остальном. Поэтому использовать эту среду для матричных вычислений можно и нужно. Ну а как это делать, вы теперь уже знаете.
SF, spaceflyer@tut.by
Компьютерная газета. Статья была опубликована в номере 24 за 2008 год в рубрике soft