| 查看: 4304 | 回复: 2 | ||
二驴新虫 (小有名气)
|
[求助]
求矩阵QR分解的源代码程序 已有2人参与
|
» 本主题相关价值贴推荐,对您同样有帮助:
形成5*5的方阵,分别输出方阵中个元素,上三角和下三角元素的vb代码
已经有5人回复
求C++ MFC矩阵相乘代码!!!
已经有5人回复
matlab 有限元计算扩散问题,建立整体矩阵好慢。大家帮忙看看代码
已经有8人回复
求矩阵增加一行代码
已经有4人回复
hppdyx
木虫 (知名作家)
- 应助: 60 (初中生)
- 金币: 3242.5
- 散金: 1145
- 红花: 48
- 帖子: 6010
- 在线: 297.6小时
- 虫号: 2428506
- 注册: 2013-04-21
- 性别: GG
- 专业: 岩土与基础工程

2楼2013-12-13 13:10:24
【答案】应助回帖
|
我提供一个Fortran版本的代码: ======================Fortran源码============================= subroutine qr_matrix_decomp(m,n,A, Q,R) ! 采用Gram-Schmit正交化方法进行QR分解 implicit real*8 (a-h,o-z) integer ::m,n real*8 :: A(m,n),Q(m,m),R(m,n),vec_tmp(m) R(1,1) = dsqrt(dot_product(A(:,1),A(:,1))) Q(:,1) = A(:,1)/R(1,1) do k=2,n do j=1,k-1 R(j,k) = dot_product(Q(:,j),A(:,k)) end do vec_tmp = A(:,k) do j=1,k-1 vec_tmp = vec_tmp - Q(:,j)*R(j,k) end do R(k,k) = dsqrt(dot_product(vec_tmp,vec_tmp)) Q(:,k) = vec_tmp/R(k,k) end do return end subroutine program qr_main implicit real*8 (a-h,o-z) integer :: i real*8 :: A(4,4),Q(4,4),R(4,4) A = reshape( (/1.0, 2.0,-1.0, 1.0, & 2.0, 5.0, 0.0, 3.0, & 1.0, 7.0, 9.0, 2.0, & 8.0,-1.0,-2.0, 1.0 /),(/4,4/)) call qr_matrix_decomp(4,4,A, Q,R) print*, 'Q=' do i = 1,4 print '(4(f14.8,x))',Q(i, ![]() end do print*, 'R=' do i = 1,4 print '(4(f14.8,x))',R(i, ![]() end do stop end program ============================================================ 编译后运行,结果为 Q= 0.37796447 -0.05902813 0.14256649 0.91287093 0.75592895 0.29514067 0.45621276 -0.36514837 -0.37796447 0.88542200 0.19959308 0.18257419 0.37796447 0.35416880 -0.85539892 0.00000000 R= 2.64575131 5.66946710 3.02371578 3.40168026 0.00000000 2.42015348 10.68409218 -2.18404094 0.00000000 0.00000000 3.42159569 -0.57026595 0.00000000 0.00000000 0.00000000 7.30296743 Matlab的结果为: >> A A = 1 2 -1 1 2 5 0 3 1 7 9 2 8 -1 -2 1 >> [Q,R]=qr(A') Q = 0.3780 -0.0590 0.1426 0.9129 0.7559 0.2951 0.4562 -0.3651 -0.3780 0.8854 0.1996 0.1826 0.3780 0.3542 -0.8554 0.0000 R = 2.6458 5.6695 3.0237 3.4017 0.0000 2.4202 10.6841 -2.1840 0.0000 0.0000 3.4216 -0.5703 0.0000 0.0000 0.0000 7.3030 ============================================================ |
3楼2013-12-13 14:13:08













回复此楼
