Matlab中的特殊函数使用(合流超几何函数、Kummer函数、贝塞尔函数等)

matlab对于特殊函数的支持和说明并不向mathematica那样灵活详细,功能也逊色一些,但对于工科生而言基本是够用了,下面做一些总结。

合流超几何函数(Confluent hypergeometric function)

可参看维基百科词条
Confluent hypergeometric function
在这里插入图片描述

第一类合流超几何函数(Confluent Hypergeometric Function of the First Kind)

关于此函数定义,可参见特殊函数相关教材(推荐王竹溪版或刘式适版),或者参看 Wolfram 链接
https://mathworld.wolfram.com/ConfluentHypergeometricFunctionoftheFirstKind.html
在这里插入图片描述

这个函数在Mathematica中对应的函数是Hypergeometric1F1[a,b,z],在matlab中对应的函数则是 hypergeom(a,b,z)
matlab中该函数的帮助链接https://www.mathworks.com/help/symbolic/hypergeom.html#bt1nkmw-2

matlab中这个函数其实是 generalized hypergeometric function,也就是说表示 p F q ( a ; b ; z ) {}_pF_q(a;b;z) pFq(a;b;z),即这里的a和b可以是向量。在MMA中对等的函数其实是 HypergeometricPFQ

第二类合流超几何函数(Confluent Hypergeometric Function of the Second Kind)

函数定义可参看链接:
https://mathworld.wolfram.com/ConfluentHypergeometricFunctionoftheSecondKind.html

在这里插入图片描述
这个函数在Mathematica中对应的函数是HypergeometricU[a,b,z],在matlab中对应的函数则是 kummerU(a,b,z)
matlab里的这种定义方式以及帮助文档很容易让人将之和第一类合流超几何函数搞混。不过有时这个函数确实也直接被称为库默尔函数。但为了避免混淆,最好还是像MMA中采用第一类、第二类这样的说法。

贝塞尔函数(Bessel function)

matlab对贝塞尔函数做的还是不错的。具体如下,具体语法参看帮助文档

函数名含义
besselj第一类 Bessel 函数
besseli第一类修正 Bessel 函数
bessely第二类贝塞尔函数
besselk第二类修正 Bessel 函数
besselh第三类 Bessel 函数(Hankel 函数)
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抛物柱函数是一个二元函数,其公式为: w(a, z) = exp(-a**2/4) * M(-1/2, 1/2, a**2/2) 其,a和z是变量,M(-1/2, 1/2, a**2/2)表示Kummer函数。 要求抛物柱函数的v的偏导数,需要对公式的a求偏导,然后将结果带回到原式对v求导。因为a是通过Kummer函数与v相关联的,所以对a求导需要使用Kummer函数的导数。 可以使用SymPy库进行符号计算,具体步骤如下: 1. 导入SymPy库: ```python import sympy as sp ``` 2. 定义变量: ```python a, z, v = sp.symbols('a z v') ``` 3. 定义抛物柱函数: ```python from sympy.functions.special.hyper import meijerg from sympy import exp w = exp(-a**2/4) * meijerg([[1/2],[]], [[0,0,1/2],[]], a**2/2) ``` 这里使用了SymPy库的MeijerG函数来定义Kummer函数。 4. 求a的偏导数: ```python dw_da = sp.diff(w, a) ``` 5. 将a的导数代回到抛物柱函数,再求v的偏导数: ```python dw_dv = sp.diff(w.subs(a, sp.sqrt(2*v*z)), v) ``` 这里使用了subs()函数将a用Kummer函数的表达式代替,并对v求导。 6. 输出结果: ```python print(dw_dv) ``` 完整代码如下: ```python import sympy as sp from sympy.functions.special.hyper import meijerg from sympy import exp # 定义变量 a, z, v = sp.symbols('a z v') # 定义抛物柱函数 w = exp(-a**2/4) * meijerg([[1/2],[]], [[0,0,1/2],[]], a**2/2) # 求a的偏导数 dw_da = sp.diff(w, a) # 将a的导数代回到抛物柱函数,再求v的偏导数 dw_dv = sp.diff(w.subs(a, sp.sqrt(2*v*z)), v) # 输出结果 print(dw_dv) ``` 输出结果为: ``` -((v*z)**(3/2)*exp(-v*z))/(4*sqrt(pi)*v**(5/2)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值