得到方程的分支点

时间:2011-03-17 04:54:00

标签: math wolfram-mathematica

如果我有一般功能,f(z,a)za都是真实的,而功能f会为所有z提供实际值除了在某个区间(z1,z2)中,它变得复杂。如何使用Mathematica确定z1z2(将使用a)(或者这可能)?有什么限制?

对于测试示例,请考虑函数f[z_,a_]=Sqrt[(z-a)(z-2a)]。对于实数za,除了区间(a,2a)之外,它将采用实数值,在此处它变为虚数。如何在Mathematica中找到此间隔?

一般来说,我想知道如何在一般情况下以数学方式找到它。对于只有两个这样的变量的函数,可能很容易做出黎曼曲面的等高线图并观察分支切割。但是,如果它是一个多变量函数呢?人们可以采取一般方法吗?

3 个答案:

答案 0 :(得分:3)

您所看到的是由“a”参数化的黎曼曲面。考虑将从参数化黎曼曲面的这个分支产生的代数(或解析)关系g(a,z)= 0。在这种情况下,它只是g ^ 2 - (z - a)*(z - 2 * a)== 0.更一般地说,它可能是使用Groebnerbasis获得的,如下所示(不保证在没有一定数量的用户的情况下这总能工作)干预)。

grelation = First[GroebnerBasis[g - Sqrt[(z - a)*(z - 2*a)], {x, a, g}]]

Out [472] = 2 a ^ 2 - g ^ 2 - 3 a z + z ^ 2

作为参数'a'的函数,分支点的必要条件是'g'的零集不在这些点的邻域中给出(单值)函数。这反过来意味着这种关系相对于g的偏导数消失了(这来自多变量微积分的隐函数定理)。因此,我们发现格里奥及其衍生物都消失了,并将'z'解释为'a'的函数。

Solve[Eliminate[{grelation == 0, D[grelation, g] == 0}, g], z]

Out [481] = {{z - > a},{z - > 2 a}}

Daniel Lichtblau Wolfram Research

答案 1 :(得分:2)

对于多项式系统(以及其他类别的系统),Reduce可以完成这项工作。

E.g。

In[1]:= Reduce[Element[{a, z}, Reals] 
           && !Element[Sqrt[(z - a) (z - 2 a)], Reals], z]
Out[1]= (a < 0 && 2a < z < a) || (a > 0 && a < z < 2a)

对于我检查的其他基本功能组合,这种方法也有效(通常为具有多个分支切割的函数提供非常复杂的解决方案)。

一般来说,为了找到分支切口(而不是你感兴趣的简单分支点类),我不知道一个好的方法。查找Mathematica使用的详细约定的最佳位置是functions.wolfram站点。

我记得有一段时间读过一篇好文章......我会试着找到它....


没错!我在分支切割分析中看到的最简单方法是使用unwinding number。有一篇论文“Reasoning about the elementary functions of complex analysis”关于这个杂志“人工智能和符号计算”。它和类似的论文可以在作者的一个主页上找到:http://www.apmaths.uwo.ca/~djeffrey/offprints.html

答案 2 :(得分:2)

对于一般功能,您不能让Mathematica计算它。 即使对于多项式,找到确切的答案也需要时间。 我相信Mathematica在使用Reduce时会使用某种量词消除, 这需要时间。

对你的功能没有任何限制(它们是多项式,连续,平滑吗?) 一个人可以轻松构建Mathematica无法进一步简化的功能:     f [x_,y_]:= Abs [Zeta [y + 0.5 + x * I]] * I

如果此函数对于任意x和任何-0.5&lt; y&lt; 0或0