QR分解实验报告.doc 下载本文

内容发布更新时间 : 2024/5/16 8:19:52星期一 下面是文章的全部内容请认真阅读。

并行计算课程考核 实验报告

考核题目:QR分解算法的并行实现 并行实现方式:OpenMP

1. 问题概述

QR分解法是目前求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为householder矩阵,然后再应用QR方法求特征值和特征向量。它是将矩阵分解成一个正规正交矩阵Q与上三角形矩阵R,所以称为QR分解法。 2. 串行代码描述 串行主要代码如下: #include #include #include #include #define n 100 //maxN

void Matrix_print(double A[n][n]) { for (int i=0;i

double Matrix_norm(double a[n]) { double d=0; for (int i=0;i

void Matrix_multiply(double A[n][n],double B[n][n],double C[n][n]) { for (int i=0;i

}

void Matrix_copy(double A[n][n],double B[n][n]) { for(int i=0;i

void householder_trans(double A[n][n],int k,double Q[n][n]) { double a[n]; for(int i=0;i

void Matrix_input(double A[n][n]) { srand( (unsigned)time( NULL ) ); for(int i=0 ;i

void main()

{ double Q[n][n]; double A[n][n]; Matrix_input(A); printf(\ Matrix_print(A); for (int i=0;i=2;i--) householder_trans(A,i,Q); clock_t end = clock(); printf(\ Matrix_print(A); printf(\ Matrix_print(Q); printf(\串行时间time=%.0f ms\double(end - start)); system(\}

3. 并行化设计思路

a. 将有for循环且没有数据关系、计算量大的计算进行并行优化; b. 将毫不相关且可独立运行的代码块进行并行优化;

c. 程序主要优化是对householder变换里的乘法和矩阵赋值进行优化。 4. 并行代码描述 #include #include #include #include #include #define n 4 //maxN

void Matrix_print(double A[n][n]) { for (int i=0;i