Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Топ:
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Перед выполнением матрично-векторного умножения сначала разработаем функцию для корректного завершения процесса вычислений. Для этого необходимо освободить память, выделенную динамически в процессе выполнения программы. Реализуем соответствующую функцию ProcessTermination. Память выделялась для хранения исходных матрицы pMatrix и вектора pVector, а также для хранения результата умножения pResult. Следовательно, эти объекты необходимо передать в функцию ProcessTermination в качестве аргументов:
// Function for computational process termination
void ProcessTermination(double* pMatrix,double* pVector,double* pResult) {
delete [] pMatrix;
delete [] pVector;
delete [] pResult;
}
Вызов функции ProcessTermination необходимо выполнить перед завершением той части программы, которая выполняет умножение матрицы на вектор:
// Memory allocation and data inialization
ProcessInitialization(pMatrix, pVector, pResult, Size);
// Matrix and vector output
printf ("Initial Matrix: \n");
PrintMatrix (pMatrix, Size, Size);
printf ("Initial Vector: \n");
PrintVector (pVector, Size);
// Computational process termination
ProcessTermination(pMatrix, pVector, pResult);
Скомпилируйте и запустите приложение. Убедитесь в том, что оно выполняется корректно.
Реализация умножения матрицы на вектор
Выполним теперь разработку основной вычислительной части программы. Для выполнения умножения матрицы на вектор реализуем функцию SerialResultCalculation, которая принимает на вход исходные матрицу pMatrix и вектор pVector, размеры этих объектов Size, а также указатель на вектор в памяти, где должен быть сохранен результат pResult.
В соответствии с алгоритмом, изложенным в задании 1, код этой функции должен быть
следующий:
// Function for matrix-vector multiplication
void SerialResultCalculation(double* pMatrix, double* pVector, double*
pResult,
int Size) {
int i, j; // Loop variables
for (i=0; i<Size; i++) {
pResult[i] = 0;
for (j=0; j<Size; j++)
pResult[i] += pMatrix[i*Size+j]*pVector[j];
}
}
Следует отметить, что приведенный программный код может быть оптимизирован (вычисление индексов, использование кэша и т.п.).
Выполним вызов функции вычисления умножения матрицы на вектор из основной программы. Для контроля правильности выполнения умножения распечатаем результирующий вектор:
// Memory allocation and data initialization
ProcessInitialization(pMatrix, pVector, pResult, Size);
// Matrix and vector output
printf ("Initial Matrix: \n");
PrintMatrix (pMatrix, Size, Size);
printf ("Initial Vector: \n");
PrintVector (pVector, Size);
// Matrix-vector multiplication
SerialResultCalculation(pMatrix, pVector, pResult, Size);
// Printing the result vector
printf (“\n Result Vector: \n”);
PrintVector(pResult, Size);
// Computational process termination
ProcessTermination(pMatrix, pVector, pResult);
Скомпилируйте и запустите приложение. Проанализируйте результат работы алгоритма умножения матрицы на вектор. Если алгоритм реализован правильно, то результирующий вектор должен иметь следующую структуру: i-ый элемент результирующего вектора равен произведению размера вектора Size на номер элемента i. Так, если размер объектов Size равен 4, результирующий вектор pResult должен быть таким: pResult = (0, 4, 8, 12). Проведите несколько вычислительных экспериментов, изменяя размеры объектов.
__
|
|
|
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!