24小时热门版块排行榜    

查看: 2733  |  回复: 20

kimileegdut

捐助贵宾 (小有名气)

送红花一朵
引用回帖:
8楼: Originally posted by pippi6 at 2015-05-13 21:27:12
我试了一下,gaussr_inverse 应该工作。 逆矩阵和原矩阵的乘积与单位矩阵的最大差值为  2.442490654175344E-015。


subroutine  InverseMatrix
  implicit none
  integer, parameter :: nn=100,m=20
  inte ...

还有一个问题想请教您,就是我的主程序里面的数据都是单精度,但是子程序里面的计算涉及到双精度,我在调用子程序前需要把数据先变为双精度吗?然后计算出来的逆矩阵,在放回到主程序被应用的话,是不是要再变回单精度?这样会有问题吗?
11楼2015-05-14 11:45:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

【答案】应助回帖

当然应该用老外编写的经过几十年考验的Lapack软件包来处理矩阵计算问题
我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
12楼2015-05-14 13:46:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kimileegdut

捐助贵宾 (小有名气)

引用回帖:
12楼: Originally posted by baobiao007 at 2015-05-14 13:46:14
当然应该用老外编写的经过几十年考验的Lapack软件包来处理矩阵计算问题

导师喜欢fortran,没办法。。。
13楼2015-05-14 14:49:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

引用回帖:
13楼: Originally posted by kimileegdut at 2015-05-14 14:49:38
导师喜欢fortran,没办法。。。...

lapack就是fortran写的
我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
14楼2015-05-14 15:30:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

引用回帖:
10楼: Originally posted by kimileegdut at 2015-05-14 10:47:47
你好,我还有个问题想请教一下您,就是上面计算b=a*c的时候,为什么不直接用矩阵相乘语句b=matmul(a,c),而使用了循环?...

无所谓,应该也可以的
15楼2015-05-14 21:58:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

引用回帖:
9楼: Originally posted by kimileegdut at 2015-05-14 09:48:38
好的,很感谢你啊!可能是我调用子程序的时候形参和实参没有对应上!gaussr_inverse 的形参表各个变量是代表什么?...

! How to use
!  real*8 :: c(n_dim,n_dim),e(n_dim,n_dim)
!  integer :: n=4
!     n           size of the matrix to be inversed
!     n_dim       array size
!     e           unit matrix
!     c           matrix to be inversed
!     call gaussr_inverse(c,n,n_dim,e,n,n_dim)
16楼2015-05-14 21:59:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kimileegdut

捐助贵宾 (小有名气)

引用回帖:
15楼: Originally posted by pippi6 at 2015-05-14 21:58:42
无所谓,应该也可以的...

ok!还有一个问题想请教您,就是我的主程序里面的数据都是单精度,但是子程序里面的计算涉及到双精度,我在调用子程序前需要把数据先变为双精度吗?然后计算出来的逆矩阵,在放回到主程序被应用的话,是不是要再变回单精度?这样会有问题吗?
17楼2015-05-14 23:08:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

引用回帖:
17楼: Originally posted by kimileegdut at 2015-05-14 23:08:17
ok!还有一个问题想请教您,就是我的主程序里面的数据都是单精度,但是子程序里面的计算涉及到双精度,我在调用子程序前需要把数据先变为双精度吗?然后计算出来的逆矩阵,在放回到主程序被应用的话,是不是要再变回 ...

其实,像你自己所意识到的一样,就是形参要对应上,包括数据类型。如果子程序要求双精度,那么在主程序里调用时也需要提供双精度变量。双精度和单精度在主程序里可以互相赋值没问题,只是从双精度到单精度损失精度而已。如果你不在乎,就没有关系。
18楼2015-05-15 06:58:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kimileegdut

捐助贵宾 (小有名气)

引用回帖:
8楼: Originally posted by pippi6 at 2015-05-13 21:27:12
我试了一下,gaussr_inverse 应该工作。 逆矩阵和原矩阵的乘积与单位矩阵的最大差值为  2.442490654175344E-015。


subroutine  InverseMatrix
  implicit none
  integer, parameter :: nn=100,m=20
  inte ...

你好,我还有一个不理解的地方,就是在调用子程序计算逆矩阵前,为什么要先把原来的矩阵元素值赋给b?如果没有b=a,这一句,调用子程序时实参用a,计算出来的结果有误,这什么原因导致的?
19楼2015-05-15 10:54:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

引用回帖:
19楼: Originally posted by kimileegdut at 2015-05-15 10:54:50
你好,我还有一个不理解的地方,就是在调用子程序计算逆矩阵前,为什么要先把原来的矩阵元素值赋给b?如果没有b=a,这一句,调用子程序时实参用a,计算出来的结果有误,这什么原因导致的?...

因为原矩阵a会被破坏
20楼2015-05-15 11:44:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 kimileegdut 的主题更新
信息提示
请填处理意见