首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mathematica中求隐函数根

在Mathematica中求隐函数根
EN

Stack Overflow用户
提问于 2011-09-09 10:59:42
回答 3查看 4.9K关注 0票数 0

在Mathematica中求隐函数根

我有一个隐式函数,例如:

f(x,y) = x^3 + x*y + y^2 - 36

我想求方程式f(x,y) = 0的根

绘制解决方案很简单:

ContourPlot[x^3 + x*y + y^2 - 36 == 0, {x, -2 Pi, 2 Pi}, {y, -3 Pi, 3 Pi}]

然而,我希望有图中的数据,而不仅仅是视觉图。那么如何找到该图的数据呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-09 17:50:29

我不确定我是否正确地解释了您的第二个问题,但假设您需要生成的ContourPlot中的(x,y)点列表,一种方法可能如下所示:

代码语言:javascript
复制
plot = ContourPlot[
  x^3 + x*y + y^2 - 36 == 0, {x, -2 Pi, 2 Pi}, {y, -3 Pi, 3 Pi}]

获取点列表的步骤

代码语言:javascript
复制
points = Cases[Normal@plot, x_Line :> First@x, Infinity];

使用ListPlot“看一看”

代码语言:javascript
复制
ListPlot[points, PlotRange -> {{-2 Pi, 2 Pi}, {-3 Pi, 3 Pi}}]

给予

编辑

纳赛尔正确地指出,这个问题以前已经解决过。Here是一个本质上相同的问题的链接,Szabolcs的this answer是相关的。

对于上面给出的答案,this method可能更直接:

代码语言:javascript
复制
points2 = Cases[plot, x_GraphicsComplex :> First@x, Infinity]

最后,我应该感谢“数学游戏:如何从图中提取点”,参见here,它给出了上面建议的两种方法(也是我现在经常使用的)。

编辑2

此方法是对上面方法1的改进,因为这些点是作为{x,y}值的列表(列表列表)获得的,没有任何无关的{ }。

代码语言:javascript
复制
Cases[Normal@plot, Line[{x__}] :> x, Infinity]

Paul Abbott在1998年数学杂志第7卷第2期第108-112页上发表的一篇文章《在区间中寻找根》提供了许多有用的信息,并且可以在here上找到

他指出以下几点也是可行的

代码语言:javascript
复制
Cases[Normal@plot, _Line, -1][[1, 1]]

和(!)

代码语言:javascript
复制
plot[[1, 1]]

我在评论中提到了FreshApple的question,在那里可以找到以下方法的一个(轻微变体):

代码语言:javascript
复制
InputForm[plot][[1, 1, 1]]

下面的计算结果为True

代码语言:javascript
复制
plot[[1, 1]] == Cases[Normal@plot, Line[{x__}] :> x, Infinity] == 
 InputForm[plot][[1, 1, 1]] == Cases[Normal@plot, _Line, -1][[1, 1]]

编辑3

只是或者好玩..。

代码语言:javascript
复制
ListPlot@ContourPlot[x^2 + y^2 == 1, {x, -1, 1}, {y, -1, 1}][[1, 1]]

给出

票数 3
EN

Stack Overflow用户

发布于 2011-09-09 11:07:07

我鼓励您探索documentation on equation solving,特别是SolveNSolve函数。

编辑

代码语言:javascript
复制
p = ContourPlot[x^3 + x*y + y^2 - 36 == 0, {x, -2 Pi, 2 Pi}, {y, -3 Pi, 3 Pi}]
p //InputForm

复制并粘贴所需的位。

或者,在我看来,对你的实际问题有一个更好的解决方案。

代码语言:javascript
复制
sol = Solve[x^3 + x*y + y^2 - 36 == 0,{x}][[1]] 

您可能需要一些选项来获得正确的解决方案。

代码语言:javascript
复制
Table[{x/. sol,y},{y, -3 Pi, 3 Pi, 0.02}]
票数 3
EN

Stack Overflow用户

发布于 2011-09-09 20:10:14

$.02对韦尔贝亚的回答的贡献:

记住检查x(y)和y(x)解,因为其中一个可能比另一个更干净。

在您的示例中:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7356699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档