获取方程的分支点

发布于 2024-10-22 03:18:09 字数 535 浏览 2 评论 0原文

如果我有一个通用函数,f(z,a)za 都是实数,并且函数 f< /code> 对所有 z 都采用实际值,但在某些区间 (z1,z2) 中除外,在该区间内它会变得复杂。如何使用 Mathematica 确定 z1z2(以 a 表示)(或者这是可能的)?有什么限制?

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

一般来说,我想知道在一般情况下如何从数学上找到它。对于像这样只有两个变量的函数,绘制黎曼曲面的等高线图并观察分支切割可能会很简单。但如果它是多元函数呢?有没有一种可以采取的通用方法?

If I have a general function,f(z,a), z and a are both real, and the function f takes on real values for all z except in some interval (z1,z2), where it becomes complex. How do I determine z1 and z2 (which will be in terms of a) using Mathematica (or is this possible)? What are the limitations?

For a test example, consider the function f[z_,a_]=Sqrt[(z-a)(z-2a)]. For real z and a, this takes on real values except in the interval (a,2a), where it becomes imaginary. How do I find this interval in Mathematica?

In general, I'd like to know how one would go about finding it mathematically for a general case. For a function with just two variables like this, it'd probably be straightforward to do a contour plot of the Riemann surface and observe the branch cuts. But what if it is a multivariate function? Is there a general approach that one can take?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

嘴硬脾气大 2024-10-29 03:18:09

您所拥有的似乎是由“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 az + z^2

作为参数“a”的函数,分支点的必要条件是“g”的零集不给出 a (单值)函数在这些点的邻域中。这又意味着该关系关于 g 的偏导数消失(这来自多元微积分的隐函数定理)。因此,我们找到了 grlation 及其导数都消失的位置,并求解了作为“a”的函数的“z”。

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

输出[481]= {{z -> a},{z→ 2 a}}

丹尼尔·利希特布劳
沃尔夫勒姆研究公司

What you have appears to be a Riemann surface parametrized by 'a'. Consider the algebraic (or analytic) relation g(a,z)=0 that would be spawned from this branch of a parametrized Riemann surface. In this case it is simply g^2 - (z - a)*(z - 2*a) == 0. More generally it might be obtained using Groebnerbasis, as below (no guarantee this will always work without some amount of user intervention).

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 necessary condition for the branch points, as functions of the parameter 'a', is that the zero set for 'g' not give a (single valued) function in a neighborhood of such points. This in turn means that the partial derivative of this relation with respect to g vanishes (this is from the implicit function theorem of multivariable calculus). So we find where grelation and its derivative both vanish, and solve for 'z' as a function of 'a'.

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

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

Daniel Lichtblau
Wolfram Research

美人骨 2024-10-29 03:18:09

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

例如,

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 站点。

我记得不久前读过一篇关于这方面的好论文......我会尽力找到它......


没错!我见过的最简单的分支切割分析方法是使用展开数。 《Artificial》杂志上有一篇论文“推理复杂分析的基本功能”智能与符号计算”。它和类似的论文可以在作者之一的主页上找到:http://www. apmaths.uwo.ca/~djeffrey/offprints.html

For polynomial systems (and some class of others), Reduce can do the job.

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)

This type of approach also works (often giving very complicated solutions for functions with many branch cuts) for other combinations of elementary functions I checked.

To find the branch cuts (as opposed to the simple class of branch points you're interested in) in general, I don't know of a good approach. The best place to find the detailed conventions that Mathematica uses is at the functions.wolfram site.

I do remember reading a good paper on this a while back... I'll try to find it....


That's right! The easiest approach I've seen for branch cut analysis uses the unwinding number. There's a paper "Reasoning about the elementary functions of complex analysis" about this the the journal "Artificial Intelligence and Symbolic Computation". It and similar papers can be found at one of the authors homepage: http://www.apmaths.uwo.ca/~djeffrey/offprints.html.

花开柳相依 2024-10-29 03:18:09

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

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

如果此函数对于任意 x 和任意 -0.5 < y < 0或0<y<0.5,
那么你就会找到黎曼zeta猜想的反例,
我确信 Mathematica 无法给出正确的答案。

For general functions you cannot make Mathematica calculate it.
Even for polynomials, finding an exact answer takes time.
I believe Mathematica uses some sort of quantifier elimination when it uses Reduce,
which takes time.

Without any restrictions on your functions (are they polynomials, continuous, smooth?)
one can easily construct functions which Mathematica cannot simplify further:
f[x_,y_] := Abs[Zeta[y+0.5+x*I]]*I

If this function is real for arbitrary x and any -0.5 < y < 0 or 0<y<0.5,
then you will have found a counterexample to the Riemann zeta conjecture,
and I'm sure Mathematica cannot give a correct answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文