【问题标题】:Evaluating hypergeometric function with a vector in Matlab在 Matlab 中用向量评估超几何函数
【发布时间】: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


【解决方案1】:

我对广义超几何函数并不完全熟悉,但在我看来,你有相反的函数参数,就什么是“参数”(在数学意义上)和什么是 '输入'。来自文档:

HYPERGEOM(N, D, Z) 是广义超几何函数 F(N, D, Z), 也称为 Barnes 扩展超几何函数,表示为 jFk 其中 j = 长度(N)和 k = 长度(D)。对于标量 a、b 和 c, HYPERGEOM([a,b],c,z)是高斯超几何函数2F1(a,b;c;z)。

从维基百科,我看到公式是:

           

所以,据我了解,这个函数是数组 Z 的向量化函数,用于参数向量 。 IE。为适当的参数向量 N 和 D 评估广义超几何函数,使得长度(N)=5 和长度(D)=2(即 ) 在向量上 ,你会调用hypergeom(N,D,Z),你应该得到一个M个元素的输出向量,Z的每个元素一个。

【讨论】:

    【解决方案2】:

    在这个特定的计算中,我正在评估所谓的 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 代码,这是我正在使用的超几何函数的版本。稍微修改他的代码,允许元素乘法,返回我想要的。 :)

    【讨论】:

      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多