НГТУ, факультет РЭФ, кафедра ППиМЭ |
Лабораторный практикум «Информатика-3»Алгоритмы и программы вычислительных задачмикро- и наноэлектроники |
Лабораторная работа № 1 |
Работа с векторами и матрицами |
© Н.В.Усольцев Редакция 2007 г. Вариант № 3 от 03.09.07 |
Многие вычислительные методы и алгоритмы основаны на векторном и матричном представлении оперируемых величин. Вектор – это математический объект, определяемый совокупностью n вещественных величин, называемых компонентами, например, . Вектор может быть представлен как направленый отрезок в n-мерном эвклидовом пространстве, хотя в большинстве задач такого представления не требуется. Каждый компонент вектора имеет номер (индекс) i (i = 1, 2, 3, …, n), по которому осуществляется обращение к нему.
Матрица представляет собой прямоугольную таблицу вещественных значений, организованных в виде совокупности m строк и n столбцов:
Каждый элемент матрицы определяется двумя индексами – номером строки i (i = 1, 2, 3, …, m) и номером столбца j (j = 1, 2, 3, …, n).
В вычислительных задачах нумерация компонентов вектора, строк и столбцов матриц обычно начинается с единицы. В разрабатываемых программах следует придерживаться именно такой нумерации, несмотря на то, что все массивы в языке С/С++ имеют элементы с нулевыми индексами. Эти элементы просто не используются. Только в интерполяционных задачах принято нумеровать элементов одномерных массивов с нуля.
Векторно-матричное представление величин позволяет упростить формулировку задач и представление алгоритмов их решения. Так, система линейных алгебраических уравнений может быть представлена в виде:
, где даны - матрица коэффициентов и - вектор свободных членов, а - вектор неизвестных, который нужно определить.
В программировании вектору соответствует одномерный массив (элементы имеют один индекс), а матрице - двумерный (два индекса). В матричной алгебре различают понятия вектор-столбец (основная форма) и вектор-строка (транспонированная), но с точки зрения представления вектора в виде одномерного массива они неразличимы.
При работе с массивами необходимо выполнить их корректное описание и обеспечить правильную передачу в качестве данных между различными модулями программы. Эти вопросы были изучены в прошлом семестре (лабораторная работа № 6) и повторяются в данной работе. Настоятельно рекомендуем внимательно перечитать текст той лабораторной работы, особенно касающийся передачи массивов через список параметров функций, а также просмотреть свои результаты выполения заданий к ней и к работе № 7.
Новый материал в данной работе связан с использованием структур при программировании матрично-векторных алгоритмов, а также с использование динамических массивов.
Программы для научно-технических расчетов для выполнения отдельных вычислительных алгоритмов обычно используют универсальные модули – подпрограммы-функции. Эти модули должны быть максимально независимыми, поэтому передача данных в них и из них (в том числе и массивов) должна выполняться через списки фактических и формальных параметров. Использование глобальных переменных не рекомендуется, за исключением некоторых специальных случаев, которые будут обсуждены в последующих лабораторных работах. Правильное описание массивов обеспечивает правильное взаимодействие модулей.
При работе с массивами на языке С/С++ нужно руководствоваться следующими правилами:
1. В главной функции (main) массивы должны быть описаны с явным указанием их размеров через константы, например:
voidmain()
{
...
doubleX[100];
doubleA[10][10];
...
}
Максимальный размер массивов определяется размером стека (64 К), в который должны помещаться все массивы и все переменные программы. Для одного одномерного массива это соответствует 8191 элементам типа double, а для одного двумерного – 90х90 элементов типа double (см. программы 1maxsize.cppразделов 1Dimensionи 2Dimension комплекта Murka-2007). При превышении этих размеров компилятор выдает сообщение об ошибке.
Однако сбои в работе программы могут начаться при несколько меньших размерах. При определении больших массивов рекомендуется руководствоваться следующей таблицей, данные которой для Borlad C++ 3.1 получены опытным путем:
Предельные размеры одномерных и двумерных масивов
Количество массивов |
1 |
2 |
3 |
4 |
Одномерный массив – вектор (компонентов) |
7700 |
3850 |
2565 |
1920 |
Двумерный массив – матрица (строк и столбцов) |
86 |
61 |
49 |
42 |
2. Для одномерных массивов в списке формальных параметров функции могут быть пустые скобки:
void VectorWork(int n, double X[])
{
...
}
при этом ошибки передачи данных не возникает, так как при вызове функции в нее передается указатель на массив – адрес его нулевого элемента, а затем любой элемент может быть однозначно выбран по его индексу. Возможность пустых скобок обеспечивает универсальность функций, работающих с одномерными массивами.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.