Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2024-02-15 | 20 |
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-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!