Fortran Coder

标题: 高斯牛顿法,迭代无法终止(死循环) [打印本页]

作者: jz_cheng    时间: 2014-10-17 11:12
标题: 高斯牛顿法,迭代无法终止(死循环)
在用高斯牛顿法计算数据时,当输入的数据是连续时(比如2、3、4、5、6)程序能跳出循环,但是当输入数据不连续时,会出现死循环情况。由于本人能力有限,无法找出其中的原因,希望那位大侠能够帮我指出。由于代码比较长,所以我就打包上传。
本人使用广义逆修正。

高斯牛顿代码.zip

3.6 KB, 下载次数: 20


作者: 楚香饭    时间: 2014-10-17 12:37
在我这里,输入 2,3,4,5,6 也一样无法跳出循环。ei 越来越大,最后变成无穷大
作者: jz_cheng    时间: 2014-10-17 12:46
这是我运行的结果

捕获.JPG (14.76 KB, 下载次数: 257)

捕获.JPG

作者: 楚香饭    时间: 2014-10-17 13:09
你用的什么编译器?我试过 ivf,cvf,gfortran,都无法跳出循环。
作者: 楚香饭    时间: 2014-10-17 13:29
OK ,改了以下代码 就可以了

[Fortran] 纯文本查看 复制代码
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


变量要初始化。
作者: jz_cheng    时间: 2014-10-17 13:31
楚香饭 发表于 2014-10-17 13:09
你用的什么编译器?我试过 ivf,cvf,gfortran,都无法跳出循环。

谢谢,我用的是ivf
作者: jz_cheng    时间: 2014-10-17 13:38
楚香饭 发表于 2014-10-17 13:29
OK ,改了以下代码 就可以了

[mw_shl_code=fortran,true]REAL*8::G(row,col),Gt(col,row),GtG(col,col)=0. ...

谢谢你,但是初始化之后,输入数据还是不能
作者: 百事可乐    时间: 2014-10-17 22:56
有一个错误,可能不是主要原因,但至少是一个隐患.

主程序里的 v(col) 应该是二维数组.v(col,col) ??

看起来你的问题属于算法问题了,没太多时间细致研究。你可以确认一下,每次迭代,u,v,s,e,work的值是不是需要重置?
作者: 王培杰    时间: 2014-10-18 20:33
百事可乐 发表于 2014-10-17 22:56
有一个错误,可能不是主要原因,但至少是一个隐患.

主程序里的 v(col) 应该是二维数组.v(col,col) ??

这个是用徐士良算法集里面的SVD奇异值分解子程序出了问题。徐书这个子程序不稳定。。。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2