0
我想弄清楚如何在Fortran中調用求解器來求解一些n維非線性方程。我遇到了具有一些非線性求解例程的SLATEC庫,我嘗試使用的庫是SNSQE。 (旁白:也許你知道一些更好/更容易使用的解算器,請告訴!)在Fortran中使用非線性求解器:SNSQE - SLATEC
我的示例代碼試圖解決一個簡單的二維問題。你可以手工解決它,但重點是找出解算器的工作原理。代碼在這裏:
program test
implicit none
! declarations
real :: theta0, x0, d(2), theta_ss(2)
integer, parameter :: nprint=0, n=2, iopt=2, lwa = 180
integer :: info
real :: tol, fvec(2), jac(2), wa(lwa)
! set parameters
theta_ss = 3.
tol = .0000001
! make sure my function works
d = FNC(theta_ss)
write(*,*) theta_ss
write(*,*) d
! call the solver and write output
call SNSQE(FNC, jac, iopt, n, theta_ss, fvec, tol, nprint, info, wa, lwa)
write(*,*) theta_ss, fvec, tol, info
contains
function FNC(x)
real, intent(in) :: x(2)
real :: FNC(2)
FNC(1) = x(1)**2 - 1
FNC(2) = x(2)**3 - 10
end function FNC
end program test
我用下面的編譯:
ifort -fast test_solver.f90 -o test -lslatec
我運行生成的可執行文件./test
並獲得:
3.000000 3.000000
8.000000 17.00000
forrtl: severe (174): SIGSEGV, segmentation fault occurred
所以我的功能FNC適用於自己的,但不在SNSQE內。我所有的輸入都是正確的類型,並且順序正確。我試過用不同的方式編寫FNC函數。我不確定它爲什麼不起作用。
正在運行OSX - Yosemite,英特爾Fortran編譯器,SLATEC是使用相同編譯器從源代碼進行編譯的。