24小时热门版块排行榜    

Znn3bq.jpeg
汕头大学海洋科学接受调剂
查看: 3013  |  回复: 15
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

长路漫漫

新虫 (初入文坛)

[求助] Fortran 求解复数矩阵SVD时,用到cgesvd,结果与matlab不同,为什么?

RT,很小的一个测试矩阵,代码如下
      integer M,N,MN,Mmax, Nmax,p, nu, nv
         parameter  (M=6,N=4,MN=min(M,N))
          complex :: A(M,N),AA(M,N)
          character , parameter :: job = 'A'
          real                    S(MN)
        complex  :: U(M,M), VT(N,N), V(N,N)
        complex  :: work(1000)
        real  :: rwork(1000)
          integer    info,rw,cl,lwork,kk,i,j,k
         do rw=1,M
             do cl=1,N
                 A(rw,cl)=cmplx(rw,2*cl)
             enddo
          enddo
          lwork=MAX(1,2*MIN(M,N)+MAX(M,N))
       call CGESVD( JOB, JOB, M, N, A, M, S, U, M, VT, N,   &
      &                  WORK, LWORK, RWORK, INFO )
        V=transpose(conjg(VT))  
        aa=u*s*v'
得到的u,v只有前2 列与matlab相同,而后面几列的差距很大,S的结果两边差异非常小,基本一致。
而矩阵aa与原始的一样。有大神可告知原因么?

[ Last edited by 长路漫漫 on 2013-6-26 at 11:09 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

长路漫漫

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by somomo91 at 2013-06-26 21:03:55
具体的讨论,见LAPACK官方论坛:
http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=1689

当然还有其他地方,都说过类似的问题的

谢谢,非常有帮助,只是,我的矩阵很小,而且对精度要求也没有那么高,给你看看一个4×3的复数矩阵得到的两种结果
矩阵A
M=4;
N=3;
for ii=1:M
for jj=1:N
a(ii,jj)=ii+i*2*jj;
end
end
matlab:

u =

  Columns 1 through 4

  -0.2028 - 0.2666i   0.5235 + 0.3708i   0.4803 + 0.0812i   0.3898 - 0.1821i
  -0.2559 - 0.2442i   0.3188 + 0.2616i  -0.4234 - 0.1552i  -0.3399 + 0.2662i
  -0.3091 - 0.2217i   0.1142 + 0.1524i  -0.3466 + 0.1235i   0.0841 - 0.0690i
  -0.3622 - 0.1993i  -0.0905 + 0.0432i   0.3628 - 0.0013i  -0.5831 + 0.1887i
  -0.4153 - 0.1768i  -0.2952 - 0.0660i  -0.3939 - 0.1528i   0.3245 - 0.3249i
  -0.4684 - 0.1544i  -0.4998 - 0.1753i   0.3208 + 0.1047i   0.1246 + 0.1211i

  Columns 5 through 6

   0.0100 - 0.1874i  -0.0737 + 0.1148i
   0.0538 - 0.3784i   0.2691 - 0.3108i
  -0.1977 + 0.7171i   0.2468 + 0.2400i
   0.0048 + 0.2312i  -0.5080 - 0.0163i
   0.3183 - 0.1634i  -0.4324 - 0.0181i
  -0.1892 - 0.2192i   0.4982 - 0.0096i

s =

   32.8054         0         0         0
         0    2.7938         0         0
         0         0    0.0000         0
         0         0         0    0.0000
         0         0         0         0
         0         0         0         0


v =

  -0.3202                      -0.7730             0.2225             0.5005         
  -0.3972 + 0.1228i  -0.3530 - 0.0509i  -0.1119 - 0.3241i  -0.7494 + 0.1441i
  -0.4742 + 0.2455i   0.0671 - 0.1017i  -0.4436 + 0.6482i  -0.0026 - 0.2882i
  -0.5512 + 0.3683i   0.4871 - 0.1526i   0.3331 - 0.3241i   0.2515 + 0.1441i

zegsvd结果:

u=
(-0.202824375016695,-0.266642178187997) (-0.255949364969120,-0.244187270428356)
(-0.309074354921545,-0.221732362668715) (-0.362199344873970,-0.199277454909075)
(-0.415324334826394,-0.176822547149434) (-0.468449324778819,-0.154367639389794)

(0.523495728897005,0.370844937064488) (0.318833666239141,0.261621268331258)
(0.114171603581277,0.152397599598028)
(-9.049045907658722E-002,4.317393086479759E-002)
(-0.295152521734451,-6.604973786843274E-002)
(-0.499814584392315,-0.175273406601663)

(-0.340495458990843,0.541393498514851) (0.337828171542821,-0.540655966822066)
(0.160806639553680,-0.275424645436289)
(4.866929136520519E-002,7.466583397862278E-002)
(-0.228593892608515,0.132598643065634)
(2.178524913765310E-002,6.742263669924775E-002)

(-0.213595095465232,1.770559300328978E-002)
(-8.118515338632207E-002,-0.101568035512989)
(0.142978695055282,-2.696899503189933E-002)
(0.159236069089761,0.159954322471254)
(0.645307867526083,7.874251718869874E-002)
(-0.652742382819571,-0.127865402118354)

(0.101959655905054,7.515513816888129E-002)
(0.385377896491782,-6.292538458577177E-002)
(-0.389645765970497,-8.452303330092807E-002)
(-0.660124183763325,0.118679170354774) (0.437875799945744,-0.107863393308084)
(0.124556597391242,6.147750267112817E-002)

(-5.714988270508767E-002,4.358750066103587E-002)
(0.164737090936639,-0.319067431094656) (-0.215932231409642,0.700403583527349)
(9.841764078738405E-002,-0.548295272551258)
(7.776246243304019E-002,5.371201559391532E-002)
(-6.783508004233359E-002,6.965960386361419E-002)



s=
32.8054068874654     
   2.79379293216862     
  9.854419884063358E-016
  6.434838164926571E-016


v=
(-0.320194781107884,0.000000000000000E+000)
(-0.397196078916262,0.122773730945919) (-0.474197376724640,0.245547461891838)
(-0.551198674533019,0.368321192837758)

(-0.772965265811650,0.000000000000000E+000)
(-0.352952325959982,-5.085805228873791E-002)
(6.706061389168552E-002,-0.101716104577475)
(0.487073553743353,-0.152574156866213)

(-0.282895611404907,0.000000000000000E+000)
(0.402086157056524,-0.348691818157092)
(4.451452010167405E-002,0.697383636314183)
(-0.163705065753291,-0.348691818157091)

(-0.469009672659151,0.000000000000000E+000)
(0.610331955712300,0.210322709402046) (0.186365106552852,-0.420645418804091)
(-0.327687389606002,0.210322709402045)

很明显可发现s基本一致,而u和s从第三列开始就区别非常大,跟你
具体的讨论,见LAPACK官方论坛:
http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=1689
讨论的内容还挺不一样的,我之前实验过DGESVD这个,处理实数矩阵时,对于一般精度的矩阵,U,S,V结果基本差不多,误差非常小了,而这个CGESVD和ZESVD处理复数矩阵,误差非常大,就LAPACK官方论坛上,也没有搜索到与CGESVD和ZESVD处理复数矩阵的类似帖子
为这个问题纠结了很久,麻烦大神进一步解答哈,谢谢~~
4楼2013-06-27 11:20:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 16 个回答

somomo91

专家顾问 (职业作家)

【答案】应助回帖

★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2013-06-27 00:31:32
长路漫漫: 金币+3, ★★★很有帮助 2013-06-27 10:22:44
这个问题几乎是公认的
MATLAB 虽然调用 CGESVD,但是它对输入参数进行了预处理,
并且因为编译器的不同,数据精度处理也不大相同,
因此导致两个结果不大相同,
2楼2013-06-26 21:02:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)

【答案】应助回帖


jjdg: 金币+1, 感谢参与 2013-06-27 00:31:39
具体的讨论,见LAPACK官方论坛:
http://icl.cs.utk.edu/lapack-for ... ?f=2&t=1689

当然还有其他地方,都说过类似的问题的
3楼2013-06-26 21:03:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

长路漫漫

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by 长路漫漫 at 2013-06-27 11:20:53
谢谢,非常有帮助,只是,我的矩阵很小,而且对精度要求也没有那么高,给你看看一个4×3的复数矩阵得到的两种结果
矩阵A
M=4;
N=3;
for ii=1:M
for jj=1:N
a(ii,jj)=ii+i*2*jj;
end
end
matlab:

u = ...

这里有些写错了,现在进行修正
做的矩阵式6×4的,
M=6;
N=4;
for ii=1:M
for jj=1:N
a(ii,jj)=ii+i*2*jj;
end
end

出了点bug~
5楼2013-06-27 15:34:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求调剂学校 +11 不会吃肉 2026-04-13 12/600 2026-04-14 19:38 by Art1977
[考研] 各位老师好,求调剂,本科211,一志愿天津大学生物与医药学硕,差两名录取。 +11 路六六jjj 2026-04-13 11/550 2026-04-14 16:01 by zs92450
[考研] 071000生物学调剂求助 +18 zzzzwww 2026-04-09 21/1050 2026-04-14 15:39 by zs92450
[考研] 085600材料与化工349分求调剂 +16 李木子啊哈哈 2026-04-12 17/850 2026-04-14 09:11 by fenglj492
[考研] 一志愿双非085400电子信息344 求调剂,对材料和化学方向也感兴趣 +12 无情的小羊 2026-04-09 13/650 2026-04-13 14:17 by 张zhihao
[考研] 一志愿085802 323分求调剂 +13 drizzle_9 2026-04-12 14/700 2026-04-13 10:26 by Faiz5552
[考研] 一志愿郑州大学 22408 305分求调剂 +5 安小满zzz 2026-04-08 5/250 2026-04-12 00:41 by 蓝云思雨
[考研] 267求调剂 +8 再忙也要吃饭啊 2026-04-09 8/400 2026-04-11 21:42 by cfdbai
[考研] 电子信息279求调剂,有书读就行 +8 wwwooden 2026-04-08 11/550 2026-04-11 20:22 by cq2548
[考研] 求调剂 +6 电气300求调剂不 2026-04-08 6/300 2026-04-11 20:14 by 逆水乘风
[考研] 085501机械专硕 302分 不挑专业求调剂 +7 汪某. 2026-04-09 7/350 2026-04-11 14:37 by luhong1990
[考研] 283求调剂 +22 那个噜子 2026-04-09 22/1100 2026-04-11 10:41 by 逆水乘风
[考研] 农学0904 312求调剂 +6 Say Never 2026-04-10 6/300 2026-04-11 10:33 by wwj2530616
[考研] 314求调剂 +18 xhhdjdjsjks 2026-04-09 19/950 2026-04-10 18:53 by HPUCZ
[考研] 一志愿京区985,085401,与本科专业一致,电子信息工程, +4 阳光开朗的男孩 2026-04-10 4/200 2026-04-10 18:27 by shenrf
[考研] 344求调剂 +7 丶风雪夜归人丶 2026-04-09 7/350 2026-04-10 12:05 by pengliang8036
[考研] 本科西工大 0856 324求调剂 +10 wysyjs25 2026-04-09 11/550 2026-04-10 08:37 by 5268321
[考研] 085601初试330分找调剂 +10 流心奶黄包l 2026-04-09 10/500 2026-04-10 08:14 by Sammy2
[考研] 0860004 求调剂 309分 +6 Yin DY 2026-04-09 6/300 2026-04-09 10:19 by 啊李999
[考研] 287求调剂 +6 Fnhc 2026-04-07 6/300 2026-04-08 10:05 by xingguangj
信息提示
请填处理意见