jz_cheng 发表于 2014-10-17 11:12:45

高斯牛顿法,迭代无法终止(死循环)

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

楚香饭 发表于 2014-10-17 12:37:00

在我这里,输入 2,3,4,5,6 也一样无法跳出循环。ei 越来越大,最后变成无穷大

jz_cheng 发表于 2014-10-17 12:46:10

这是我运行的结果

楚香饭 发表于 2014-10-17 13:09:05

你用的什么编译器?我试过 ivf,cvf,gfortran,都无法跳出循环。

楚香饭 发表于 2014-10-17 13:29:27

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

变量要初始化。

jz_cheng 发表于 2014-10-17 13:31:21

楚香饭 发表于 2014-10-17 13:09
你用的什么编译器?我试过 ivf,cvf,gfortran,都无法跳出循环。

谢谢,我用的是ivf

jz_cheng 发表于 2014-10-17 13:38:46

楚香饭 发表于 2014-10-17 13:29
OK ,改了以下代码 就可以了

REAL*8::G(row,col),Gt(col,row),GtG(col,col)=0. ...

谢谢你,但是初始化之后,输入数据还是不能:'(

百事可乐 发表于 2014-10-17 22:56:28

有一个错误,可能不是主要原因,但至少是一个隐患.

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

看起来你的问题属于算法问题了,没太多时间细致研究。你可以确认一下,每次迭代,u,v,s,e,work的值是不是需要重置?

王培杰 发表于 2014-10-18 20:33:08

百事可乐 发表于 2014-10-17 22:56
有一个错误,可能不是主要原因,但至少是一个隐患.

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


这个是用徐士良算法集里面的SVD奇异值分解子程序出了问题。徐书这个子程序不稳定。。。
页: [1]
查看完整版本: 高斯牛顿法,迭代无法终止(死循环)