Работа с векторами и матрицами (Лабораторная работа № 1)

Страницы работы

Содержание работы

НГТУ, факультет РЭФ, кафедра ППиМЭ

Лабораторный практикум «Информатика-3»

Алгоритмы и программы вычислительных задач

микро- и наноэлектроники

Лабораторная работа № 1

Работа с векторами и матрицами

© Н.В.Усольцев       Редакция 2007 г.       Вариант № 3 от 03.09.07

1. Введение

Многие вычислительные методы и алгоритмы основаны на векторном и матричном представлении оперируемых величин. Вектор – это математический объект, определяемый совокупностью n вещественных величин, называемых компонентами, например, . Вектор может быть представлен как направленый отрезок в n-мерном эвклидовом пространстве, хотя в большинстве задач такого представления не требуется. Каждый компонент вектора  имеет номер (индекс) i (i = 1, 2, 3, …, n), по которому осуществляется обращение к нему.

Матрица представляет собой прямоугольную таблицу вещественных значений, организованных в виде совокупности m строк и n столбцов:

Каждый элемент матрицы  определяется двумя индексами – номером строки i (i = 1, 2, 3, …, m)  и номером столбца j (j = 1, 2, 3, …, n).

В вычислительных задачах нумерация компонентов вектора, строк и столбцов матриц обычно начинается с единицы. В разрабатываемых программах следует придерживаться именно такой нумерации, несмотря на то, что все массивы в языке С/С++  имеют элементы с нулевыми индексами. Эти элементы просто не используются. Только в интерполяционных задачах принято нумеровать элементов одномерных массивов с нуля.

Векторно-матричное представление величин позволяет упростить формулировку задач и представление алгоритмов их решения. Так, система линейных алгебраических уравнений может быть представлена в виде:

, где даны          - матрица коэффициентов и  - вектор свободных членов, а  - вектор неизвестных, который нужно определить.

В программировании вектору соответствует одномерный массив (элементы имеют один индекс), а матрице - двумерный (два индекса). В матричной алгебре различают понятия вектор-столбец (основная форма) и вектор-строка (транспонированная), но с точки зрения представления вектора в виде одномерного массива они неразличимы.

При работе с массивами необходимо выполнить их корректное описание и обеспечить правильную передачу в качестве данных между различными модулями программы. Эти вопросы были изучены в прошлом семестре (лабораторная работа № 6) и повторяются в данной работе. Настоятельно рекомендуем внимательно перечитать текст той лабораторной работы, особенно касающийся передачи массивов через список параметров функций, а также просмотреть свои результаты выполения заданий к ней и к работе № 7.

Новый материал в данной работе связан с использованием структур при программировании матрично-векторных алгоритмов, а также с использование динамических массивов.

2. Организация работы с массивами в программах сложной модульной структуры

Программы для научно-технических расчетов для выполнения отдельных вычислительных алгоритмов обычно используют универсальные модули – подпрограммы-функции. Эти модули должны быть максимально независимыми, поэтому передача данных в них и из них (в том числе и массивов) должна выполняться через списки фактических и формальных параметров. Использование глобальных переменных не рекомендуется, за исключением некоторых специальных случаев, которые будут обсуждены в последующих лабораторных работах. Правильное описание массивов обеспечивает правильное взаимодействие модулей.

При работе с массивами на языке С/С++ нужно руководствоваться следующими правилами:

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[])

{

...

}

при этом ошибки передачи данных не возникает, так как при вызове функции в нее передается указатель на массив – адрес его нулевого элемента, а затем любой элемент может быть однозначно выбран по его индексу. Возможность пустых скобок обеспечивает универсальность функций, работающих с одномерными массивами.

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Методические указания и пособия
Размер файла:
134 Kb
Скачали:
0