我正在尝试使用IMSL 库中的 PPVAL 函数来评估分段多项式,类似于 MATLAB 的ppval 函数。
可悲的是,我无法很好地理解有关如何正确使用该功能的文档。我试图评估一个简单的多项式。多项式p(x) = 1
并没p(x) = x
问题。我不明白的是当我尝试获得更高次的多项式时。
下面的程序试图评估多项式p(x)=x^4
:
program main
include 'LINK_FNL_SHARED.h'
USE PPVAL_INT
implicit none
double precision :: x(11), y(11)
double precision :: BREAK(2),PPCOEF(5,1)
integer :: ii
break = [0.0d0,10.0d0] ! breakpoints in increasing order
PPCOEF(:,1) = [0.0d0,0.0d0,0.0d0,0.0d0,1.0d0] ! polynomial coefficients
x = dble([0,1,2,3,4,5,6,7,8,9,10])
do ii=1,11
y(ii) = PPVAL(x(ii),break,PPCOEF)
end do
print *, 'x = ', x
print *, 'y = ', y
pause
end program main
但该函数返回多项式p(x) = x^4/4!
。对于 2,3 和 5 度,返回值始终为p(x) = x^2/2!
, p(x)=x^3/3!
, p(x)=x^5/5!
。为什么这个因素会出现在ppval
函数中?为什么我不能只提供多项式系数并对其进行评估?
是否有另一个更简单的函数来评估 Fortran 中的多项式,例如 MATLAB polyval?