如果我有一般功能,f(z,a)
,z
和a
都是真实的,而功能f
会为所有z
提供实际值除了在某个区间(z1,z2)
中,它变得复杂。如何使用Mathematica确定z1
和z2
(将使用a
)(或者这可能)?有什么限制?
对于测试示例,请考虑函数f[z_,a_]=Sqrt[(z-a)(z-2a)]
。对于实数z
和a
,除了区间(a,2a)
之外,它将采用实数值,在此处它变为虚数。如何在Mathematica中找到此间隔?
一般来说,我想知道如何在一般情况下以数学方式找到它。对于只有两个这样的变量的函数,可能很容易做出黎曼曲面的等高线图并观察分支切割。但是,如果它是一个多变量函数呢?人们可以采取一般方法吗?
答案 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