Fortran Coder

查看: 14732|回复: 7
打印 上一主题 下一主题

[数学库] MKL中getrf省略参数ipiv的问题

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2014-7-23 15:11:08 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
call getrf(a,ipiv,info)!矩阵分解成LU
!call getrf(a)!矩阵分解成LU
call getri(a,ipiv,info)!求逆阵
我这里两行代码计算结果是一样的。
  0.1764706     -5.8823526E-02  0.2941177
  0.2941176      0.2352941     -0.1764706
-0.2352941      0.4117647     -5.8823526E-02
你再检查一下看是不是别的问题吧

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2014-7-23 23:47:37 | 显示全部楼层
getrf 函数进行LU分解,使用了部分选主元。也就是会进行部分的行变换。变换结果会返回给 ipiv,在 getri 中使用。

如果你不返回,那么 getri 中的就是错误的。自然结果就不对了。(其实只是进行了行变换(交换)而已)

[Fortran] 纯文本查看 复制代码
ipiv=3
ipiv(1)=2 !// 加上这行就对了
call getrf(a)
call getri(a,ipiv=ipiv,info=info)


从上面的代码可以看出,ipiv不一定非要从getrf里返回。如果你事先知道,你自己生成也可以。所以与 getrf 无关。

评分

参与人数 1F 币 +5 贡献 +5 收起 理由
FLY + 5 + 5 很给力!

查看全部评分

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2014-7-24 00:42:12 | 显示全部楼层
是的,就是如此。如果你为了求逆,那么最好保留。如果只是做LU分解,则可以不必保留。

PS:对管理员和版主,你不必评分,会从你的分数中扣除。管理员和版主不缺分。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-14 03:20

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表