高斯牛顿法,迭代无法终止(死循环)
在用高斯牛顿法计算数据时,当输入的数据是连续时(比如2、3、4、5、6)程序能跳出循环,但是当输入数据不连续时,会出现死循环情况。由于本人能力有限,无法找出其中的原因,希望那位大侠能够帮我指出。由于代码比较长,所以我就打包上传。本人使用广义逆修正。
在我这里,输入 2,3,4,5,6 也一样无法跳出循环。ei 越来越大,最后变成无穷大 这是我运行的结果
你用的什么编译器?我试过 ivf,cvf,gfortran,都无法跳出循环。 OK ,改了以下代码 就可以了
REAL*8::G(row,col),Gt(col,row),GtG(col,col)=0.0D0,GtGl(col,col)=0.0D0,ds(row)=0.0D0,dl(row)=0.0D0,d(row)=0.0D0,&
Gtd(col)=0.0D0,Gdm(row)=0.0D0,u(col,col)=0.0D0,v(col)=0.0D0,s(ka)=0.0D0,e(ka)=0.0D0,work(ka)=0.0D0,dd(row)=0.0D0
变量要初始化。 楚香饭 发表于 2014-10-17 13:09
你用的什么编译器?我试过 ivf,cvf,gfortran,都无法跳出循环。
谢谢,我用的是ivf 楚香饭 发表于 2014-10-17 13:29
OK ,改了以下代码 就可以了
REAL*8::G(row,col),Gt(col,row),GtG(col,col)=0. ...
谢谢你,但是初始化之后,输入数据还是不能:'( 有一个错误,可能不是主要原因,但至少是一个隐患.
主程序里的 v(col) 应该是二维数组.v(col,col) ??
看起来你的问题属于算法问题了,没太多时间细致研究。你可以确认一下,每次迭代,u,v,s,e,work的值是不是需要重置? 百事可乐 发表于 2014-10-17 22:56
有一个错误,可能不是主要原因,但至少是一个隐患.
主程序里的 v(col) 应该是二维数组.v(col,col) ??
这个是用徐士良算法集里面的SVD奇异值分解子程序出了问题。徐书这个子程序不稳定。。。
页:
[1]