用imsl求非线性方程组时运行出错,显示结果如下
*** TERMINAL ERROR 2 from DNEQNJ.The required storage cannot be allocated. *** The workspace requirement is based on N = 1077936128.Press any key to continue . . .请问大佬们这个是什么意思,解决方法是什么,谢谢!!
可能是静态数组开的太大,内存不足。建议根据实际情况数组下标范围改小点儿,或者换大内存电脑 吉大渣渣-固体 发表于 2018-5-17 21:35
可能是静态数组开的太大,内存不足。建议根据实际情况数组下标范围改小点儿,或者换大内存电脑 ...
谢谢回复!
数组不大,可能是我的代码有问题。下面是代码:
program kakusann
Include 'link_fnl_shared.h'
USE NEQNJ_INT
USE UMACH_INT
implicit none
integer,parameter::n=2
integer::k,nout
real::x(n),xguess(n)
real::F(n),fnorm
real::lsjac(n,n)
F(1)=3*x(1)**3+2*x(1)
F(2)=4*x(2)**3+2*x(2)
lsjac(1,1)=9*x(1)**2+2
lsjac(1,2)=0.0
lsjac(2,1)=12*x(2)**2+2
lsjac(2,2)=0.0
xguess(1)=3.0
xguess(2)=3.0
callumach(2,nout)
call dNEQNJ (f,lsjac,x,xguess)
!WRITE (NOUT,99999) (X(K),K=1,N), FNORM
!99999 FORMAT ('The solution to the system is', /, 'X = (', 3F5.1, &
!')', /, 'with FNORM =', F5.4, //)
end program Yowai 发表于 2018-5-17 21:49
谢谢回复!
数组不大,可能是我的代码有问题。下面是代码:
对不起,本人已弃用IMSL;请查贵版本IMSL手册pdf中DNEQNF函数的说明。祝顺利 吉大渣渣-固体 发表于 2018-5-17 22:12
对不起,本人已弃用IMSL;请查贵版本IMSL手册pdf中DNEQNF函数的说明。祝顺利
几乎是完全和手册例子一样,但就是老出现这个错误。 大佬们求助,实在看不出来这个问题在哪。代码如下:
program kakusann
Include 'link_fnl_shared.h'
USE NEQNF_INT
USE UMACH_INT
implicit none
integer,parameter::n=2
real::F(n)
integer::k,nout
real::x(n),xguess(n)
real::fnorm
F(1)=55*x(1)**3+2*x(1)
F(2)=4*x(2)**3+2*x(2)
data xguess/3.0,3.0/
call umach(2,nout)
CALLNEQNF (F, X, xguess=xguess, fnorm=fnorm)
!WRITE (NOUT,99999) (X(K),K=1,N), FNORM
!99999 FORMAT ('The solution to the system is', /, 'X = (', 3F5.1, &
!')', /, 'with FNORM =', F5.4, //)
end program
输出结果:
*** TERMINAL ERROR 2 from DNEQNJ.The required storage cannot be allocated.
*** The workspace requirement is based on N = 1077936128.
Press any key to continue . . . 第一个参数 f 应该是一个函数,而不是数组。
program kakusann
Include 'link_f90_static.h'
USE NEQNF_INT
USE UMACH_INT
implicit none
integer,parameter::n=2
integer::nout
real::x(n),xguess(n),fnorm
external fcn
xguess=3.0
call umach(2,nout)
CALL NEQNF (Fcn, X, xguess=xguess, fnorm=fnorm)
WRITE (NOUT,*) x , FNORM
end program kakusann
SUBROUTINE FCN (X, F, N)
INTEGER N
REAL X(N), F(N)
F(1)=55*x(1)**3+2*x(1)
F(2)=4*x(2)**3+2*x(2)
END SUBROUTINE FCN
我也碰到同样的问题。
我在用 compaq visual fortran 6.6 Error: This is an actual argument keyword name, and not a dummy argument name.
call neqnf(fcn, x, XGUESS=xguess, FNORM=fnorm)