R deSolve包DLL中ip参数处理异常及实际作用疑问
关于R包deSolve中
ip参数的作用疑问 在《R包deSolve:使用编译语言编写代码》中有一个C语言原型示例:
void derivs (int *neq, double *t, double *y, double *ydot,double *yout, int *ip)
官方文档对ip的说明:
ip指向一个长度至少为3的整数向量;第一个元素(ip[0])包含输出值的数量(应大于或等于nout),第二个元素包含yout的长度,第三个元素包含*ip的长度;后续是调用积分器时通过ipar参数传递的整数值。
实际使用中遇到的情况:
- 无法将
*ip直接传递给C或Fortran的derivs子例程,必须在调用ode()时传入命名参数nout才能让代码运行——这是因为加载和检查DLL的流程依赖该参数。 - 在Fortran的
derivs子例程中,传入的nout值会成为ip(1),且观察到ip的固定取值规律:ip(1)=nout,ip(2)=nout+2,ip(3)=4。 - vignette中的示例输出是13行7列的矩阵,但输出结果和
nout的取值完全无关。 - 检索deSolve的源代码,用
grep搜索ip的声明或相关设置,未找到任何结果。
请问ip在实际计算中是否有作用?
内容的提问来源于stack exchange,提问作者John Daschbach
相关产品推荐
相关产品推荐

