主题:矩阵求逆.i.也会出错?
tianhy2010
[专家分:60] 发布于 2010-10-11 11:24:00
.i. operation has generated error message from low-level routines
这是程序给出的错误信息。我的程序里确实涉及到了很多个矩阵求逆的问题,
t1=(.i.(energy-t0.x.t1-t1.x.t0)).x.(transpose(t0**2))
这样表达会出错吗?
回复列表 (共13个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2010-10-11 11:32:00
先看.i.里的表达式有无意义
.i.不能对接近奇异的矩阵求逆
ps:lz的代码风格不好,分行写吧,行数少<>效率高
板凳
cgl_lgs [专家分:21040] 发布于 2010-10-11 14:31:00
看運行時的提示,應該是矩陣奇異。。。
3 楼
tianhy2010 [专家分:60] 发布于 2010-10-11 14:49:00
矩阵奇异,是不是说矩阵为0了?为0了就不能求逆了?是吧?
4 楼
jstzhurj [专家分:4680] 发布于 2010-10-11 15:21:00
[quote]矩阵奇异,是不是说矩阵为0了?为0了就不能求逆了?是吧?[/quote]
当然啦!
5 楼
tianhy2010 [专家分:60] 发布于 2010-10-11 16:21:00
在调试程序过程中发现一个问题,在imsl里,.i.可以用来矩阵求逆。
但是我运行到下面这个语句:
t0=e1-h0
t0=.i.t0
时候让我:
please enter the path for OPERATION_I.F90
怪不得会出错呢。可能系统不识别.i.,还是因为我系统上装了ivf+imsl6.0?
我现在用vf6.6算的,不会受到ivf+imsl6.0的影响吧?因为cvf6.6有自身带的imsl
6 楼
tianhy2010 [专家分:60] 发布于 2010-10-11 16:26:00
难道要自己编程做逆运算?
论坛上有人这么说:
.ix.不能做广义逆的
7 楼
jstzhurj [专家分:4680] 发布于 2010-10-11 16:53:00
[quote]在调试程序过程中发现一个问题,在imsl里,.i.可以用来矩阵求逆。
但是我运行到下面这个语句:
t0=e1-h0
t0=.i.t0
时候让我:
please enter the path for OPERATION_I.F90
怪不得会出错呢。可能系统不识别.i.,还是因为我系统上装了ivf+imsl6.0?
我现在用vf6.6算的,不会受到ivf+imsl6.0的影响吧?因为cvf6.6有自身带的imsl[/quote]
重装一遍cvf6.6,不是难事吧?!
8 楼
cgl_lgs [专家分:21040] 发布于 2010-10-11 17:38:00
IMSL的.i*.系列肯定不支持廣義逆。。。
9 楼
tianhy2010 [专家分:60] 发布于 2010-10-11 19:19:00
[quote][quote]在调试程序过程中发现一个问题,在imsl里,.i.可以用来矩阵求逆。
但是我运行到下面这个语句:
t0=e1-h0
t0=.i.t0
时候让我:
please enter the path for OPERATION_I.F90
怪不得会出错呢。可能系统不识别.i.,还是因为我系统上装了ivf+imsl6.0?
我现在用vf6.6算的,不会受到ivf+imsl6.0的影响吧?因为cvf6.6有自身带的imsl[/quote]
重装一遍cvf6.6,不是难事吧?![/quote]
\重装一遍还是老错误。
做了一个小程序试验了下:
program exammm
use imsl
implicit none
real h(4,4),h0(4,4)
real v
integer i
v=2.0
h=0.0
do i=1,3 !看这里,3,不是4
if(mod(i,2)==0) then
h(i,i-1)=v
else
h(i,i+1)=v
end if
end do
h0=.i.h
write(*,*) h0
end
这个程序会出现同样的问题,说明循环终值有问题。 do i=1,4就通过了。检查程序吧
10 楼
jstzhurj [专家分:4680] 发布于 2010-10-11 20:55:00
4通过?
我来回复