【发布时间】:2017-06-19 14:48:34
【问题描述】:
我在 Matlab 中通过调用 hypergeom(a,b,z) 来使用广义超几何函数。
此函数产生 a = 1 和 a = 2、b = 2 和 z = 5:
>>hypergeom(1,2,5)
29.4826318205153
>>hypergeom(2,2,5)
148.413159102577
现在,我想在一个值的向量上评估超几何。所以如果我输入 hypergeom(1:2,2,5) 我会期望输出:
[29.4826318205153, 148.413159102577]
但是,当我在 Matlab 中输入时,我得到:
>>hypergeom(1:2,2,5)
-0.25
因此,对于 a 的输入值向量,返回单个值。如何在 Matlab 中正确调用 hypergeom,以使输出向量的长度与 a 的输入向量的长度相同?
编辑: 在这个特定的计算中,我正在评估所谓的 Confluent 超几何函数(Kummer 微分方程的解,参见:https://en.wikipedia.org/wiki/Confluent_hypergeometric_function)。这就是 1F1 功能。这意味着长度(N)= 1,长度(D)= 1。
标准的内置函数 hypergeom 是广义的超几何函数,它不允许以我想要的方式计算 hypergeom(1:2,2,5)。
Patrick Mousaw 上传了他的融合超几何函数 (https://nl.mathworks.com/matlabcentral/fileexchange/29766-confluent-hypergeometric-function) 的 Matlab 代码,这是我正在使用的超几何函数的版本。对他的代码稍作修改,允许元素乘法,返回正是我想要的。 :)
【问题讨论】:
-
hypergeom仅对第三个参数进行矢量化。要使用第一个参数的多个值,您必须使用循环
标签: matlab function vector vectorization evaluate