gpt4 book ai didi

wolfram-mathematica - 数学 : branch points for real roots of polynomial

转载 作者:行者123 更新时间:2023-12-04 10:57:49 25 4
gpt4 key购买 nike

我正在对以下示例函数进行蛮力搜索“梯​​度极值”

fv[{x_, y_}] = ((y - (x/4)^2)^2 + 1/(4 (1 + (x - 1)^2)))/2;

这涉及找到以下零
gecond = With[{g = D[fv[{x, y}], {{x, y}}], h = D[fv[{x, y}], {{x, y}, 2}]},
g.RotationMatrix[Pi/2].h.g == 0]

其中 Reduce快乐地为我做:
geyvals = y /. Cases[List@ToRules@Reduce[gecond, {x, y}], {y -> _}];
geyvals是三次多项式的三个根,但这里放的表达式有点大。

现在我的问题:对于 x 的不同值,这些根的不同数量是实数,我想挑出 x的值解决方案分支以将沿谷底的梯度极值拼凑在一起( fv)。在目前的情况下,由于多项式只是三次,我可能可以手工完成——但我正在寻找一种让 Mathematica 为我做的简单方法?

编辑 :澄清一下:梯度极值的东西只是背景——也是一种设置困难问题的简单方法。我对这个问题的具体解决方案并不像在发现多项式根的分支点的一般切换方式那么感兴趣。在下面添加了一个工作方法的答案。

编辑 2 :由于实际问题似乎比根分支有趣得多:rcollyer 建议使用 ContourPlot直接上 gecond得到梯度极值。为了完成这一点,我们需要分离山谷和山脊,这是通过查看垂直于梯度的 Hessian 的特征值来完成的。以 RegionFunction 的形式检查“valleynes”我们只剩下山谷线:
valleycond = With[{
g = D[fv[{x, y}], {{x, y}}],
h = D[fv[{x, y}], {{x, y}, 2}]},
g.RotationMatrix[Pi/2].h.RotationMatrix[-Pi/2].g >= 0];
gbuf["gevalley"]=ContourPlot[gecond // Evaluate, {x, -2, 4}, {y, -.5, 1.2},
RegionFunction -> Function[{x, y}, Evaluate@valleycond],
PlotPoints -> 41];

这给出了谷底线。包括一些轮廓和鞍点:
fvSaddlept = {x, y} /. First@Solve[Thread[D[fv[{x, y}], {{x, y}}] == {0, 0}]]
gbuf["contours"] = ContourPlot[fv[{x, y}],
{x, -2, 4}, {y, -.7, 1.5}, PlotRange -> {0, 1/2},
Contours -> fv@fvSaddlept (Range[6]/3 - .01),
PlotPoints -> 41, AspectRatio -> Automatic, ContourShading -> None];
gbuf["saddle"] = Graphics[{Red, Point[fvSaddlept]}];
Show[gbuf /@ {"contours", "saddle", "gevalley"}]

我们最终得到了这样的情节:

Contour plot of fv with the valley line superposed

最佳答案

不确定这(迟来的)是否有帮助,但您似乎对判别点感兴趣,即多项式和导数(wrt y)都消失的地方。您可以为 {x,y} 求解此系统并丢弃如下复杂的解决方案。

fv[{x_, y_}] = ((y - (x/4)^2)^2 + 1/(4 (1 + (x - 1)^2)))/2;

gecond = With[{g = D[fv[{x, y}], {{x, y}}],
h = D[fv[{x, y}], {{x, y}, 2}]}, g.RotationMatrix[Pi/2].h.g]

In[14]:= Cases[{x, y} /.
NSolve[{gecond, D[gecond, y]} == 0, {x, y}], {_Real, _Real}]

Out[14]= {{-0.0158768, -15.2464}, {1.05635, -0.963629}, {1.,
0.0625}, {1., 0.0625}}

关于wolfram-mathematica - 数学 : branch points for real roots of polynomial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4435995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com