Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
|
из
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). Проведите несколько вычислительных экспериментов, изменяя размеры объектов.
__
|
|
|
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!