GSL中的常微分方程

常微分方程

    本章描述求解常微分方程初值问题的函数。本库提供了各种低级方法,如Runge-Kutta和Burirsch-Stoer例程,以及用于自适应步长控制的高级组件。用户可以组合这些组件来实现所需的解决方案,并完全访问任何中间步骤。驱动程序对象可以用作高级包装器,以便于使用低级函数。

    这些函数声明在头文件gsl_odeiv2.h中。这是版本1.15中的一个新接口,所有函数都使用前缀gsl_odeiv2。推荐使用gsl_odeiv.h中定义的以前的gsl_odeiv开头的实现。为了向后兼容,旧的接口保留了原来的名称。

29.1 定义ODE系统

    程序求解一般n维一阶系统,

 其中,i=1,...,n。阶跃函数依赖于导数fi的向量和雅可比矩阵,

 使用gsl_odeiv2_system数据类型定义方程组。

gsl_odeiv2_system

这种数据类型定义了一个具有任意参数的通用ODE系统。

    int (* function) (double t, const double y[], double dydt[], void * params)

本函数将向量元素fi(t, y, params)存储在dydt数组中,用于参数(t, y)和参数params。

如果计算成功完成,本函数返回GSL_SUCCESS。任何其他返回值表示错误。特殊的返回值GSL_EBADFUNC会导致gsl_odeiv2程序立即停止并返回。如果函数被修改(例如params的内容),用户必须在继续之前调用一个适当的重置函数(gsl_odeiv2_driver_reset(), gsl_odeiv2_evolve_reset()或gsl_odeiv2_step_reset())。使用与标准GSL错误代码不同的返回值来区分您的函数的错误来源。

int (* jacobian) (double t, const double y[], double * dfdy, double dfdt[],

void * params)

    本函数存储导数元素的向量

     在数组dfdt中,雅可比矩阵Jij存储在dfdy中。视为一个行序矩阵J(i, j) = dfdy[i * dimension + j],其中dimension是系统的维数。

    并不是gsl_odeiv2的所有步进算法都使用雅可比矩阵,因此可能没有必要提供这个函数(可以用这些算法的空指针替换雅可比矩阵元素的结构体)。

    如果计算成功完成,本函数应该返回GSL_SUCCESS。任何其他返回值表示错误。特殊的返回值GSL_EBADFUNC会导致gsl_odeiv2程序立即停止并返回。如果雅比矩阵被修改(例如params的内容),用户必须在继续之前调用一个适当的重置函数(gsl_odeiv2_driver_reset()、gsl_odeiv2_evolve_reset()或gsl_odeiv2_step_reset())。使用与标准GSL错误代码不同的返回值来区分您的函数的错误来源。

size_t dimension

    这是方程组的维数。

void * params

    这是一个指向系统任意参数的指针。

29.2 步进函数

    最低级组件是步进函数,它将一个固定步长h的解从时间t推进到t + h,并估计产生的局部误差。

gsl_odeiv2_step

    这包含了步进函数的内部参数。

gsl_odeiv2_step * gsl_odeiv2_step_alloc(const gsl_odeiv2_step_type * T,

size_t dim)

    本函数返回一个指针,指向一个新分配的T型步进函数的实例,用于dim维系统。请注意,如果您使用需要访问驱动程序对象的步进方法,建议使用驱动程序分配方法,该方法也会自动分配步进器。

int gsl_odeiv2_step_reset(gsl_odeiv2_step * s)

本函数重置步进函数s。当s的下一次使用不是前一个步骤的延续时,就应该使用它。

void gsl_odeiv2_step_free(gsl_odeiv2_step * s)

    本函数释放了所有与步进函数s相关的内存。

GSL 开源 科学计算库 学习笔记(分享部分译稿) GSL是GNU Scientific Libary的简写,是一组专门为数值科学计算而设计的程序库。该程序库用C语言写就,C程序员提供了API。不过 可以对其使用swig工具进行封装,以便能被更高级的语言使用,比如C#,java等。读者可以在网上找到很多swig的例子。 GSL原码是以GPL协议发布的,获取与使用都非常地方便,这也是我们之所以选取GSL学习的根本原因。 GSL库涵盖了数值计算领域的方方面面,主要包括下面的计算领域,还有一些新的程序代码会不断纳入到GSL。 Complex Numbers 复数; Roots of Polynomials 多项式求根; Special Functions 特殊函数; Vectors and Matrices 向量与距阵; Permutations 排列; Combinations 组合; Sorting 排序; BLAS Support 基础线性代数程序集(向量间运算,向量距阵运算,距阵间运算); Linear Algebra CBLAS Library 线性代数库; Fast Fourier Transforms 快速傅利叶变换; Eigensystems 特征值; Random Numbers 随机数; Quadrature 积分; Random Distributions 随机分布; Quasi-Random Sequences 近似随机分布序列; Histograms 直方图; Statistics 统计; Monte Carlo Integration Monte Carlo积分; N-Tuples N元组; Differential Equations 微分方程; Simulated Annealing 模拟退火算法; Numerical Differentiation 数值差分; Interpolation 拟合与插值; Series Acceleration; Chebyshev Approximations Chebyshev逼近; Root-Finding 求根; Discrete Hankel Transforms 离散Hankel转换; Least-Squares Fitting 最小二乘算法拟合; Minimization 最小值; IEEE Floating-Point IEEE浮点运输; Physical Constants 物理常量; Basis Splines 基本样条曲线; Wavelets 小波变换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值