在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}]
然而,我希望有图中的数据,而不仅仅是视觉图。那么如何找到该图的数据呢?
发布于 2011-09-09 17:50:29
我不确定我是否正确地解释了您的第二个问题,但假设您需要生成的ContourPlot中的(x,y)点列表,一种方法可能如下所示:
plot = ContourPlot[
x^3 + x*y + y^2 - 36 == 0, {x, -2 Pi, 2 Pi}, {y, -3 Pi, 3 Pi}]获取点列表的步骤
points = Cases[Normal@plot, x_Line :> First@x, Infinity];使用ListPlot“看一看”
ListPlot[points, PlotRange -> {{-2 Pi, 2 Pi}, {-3 Pi, 3 Pi}}]给予

编辑
纳赛尔正确地指出,这个问题以前已经解决过。Here是一个本质上相同的问题的链接,Szabolcs的this answer是相关的。
对于上面给出的答案,this method可能更直接:
points2 = Cases[plot, x_GraphicsComplex :> First@x, Infinity]最后,我应该感谢“数学游戏:如何从图中提取点”,参见here,它给出了上面建议的两种方法(也是我现在经常使用的)。
编辑2
此方法是对上面方法1的改进,因为这些点是作为{x,y}值的列表(列表列表)获得的,没有任何无关的{ }。
Cases[Normal@plot, Line[{x__}] :> x, Infinity]Paul Abbott在1998年数学杂志第7卷第2期第108-112页上发表的一篇文章《在区间中寻找根》提供了许多有用的信息,并且可以在here上找到
他指出以下几点也是可行的
Cases[Normal@plot, _Line, -1][[1, 1]]和(!)
plot[[1, 1]]我在评论中提到了FreshApple的question,在那里可以找到以下方法的一个(轻微变体):
InputForm[plot][[1, 1, 1]]下面的计算结果为True
plot[[1, 1]] == Cases[Normal@plot, Line[{x__}] :> x, Infinity] ==
InputForm[plot][[1, 1, 1]] == Cases[Normal@plot, _Line, -1][[1, 1]]编辑3
只是或者好玩..。
ListPlot@ContourPlot[x^2 + y^2 == 1, {x, -1, 1}, {y, -1, 1}][[1, 1]]给出

发布于 2011-09-09 11:07:07
我鼓励您探索documentation on equation solving,特别是Solve和NSolve函数。
编辑
p = ContourPlot[x^3 + x*y + y^2 - 36 == 0, {x, -2 Pi, 2 Pi}, {y, -3 Pi, 3 Pi}]
p //InputForm复制并粘贴所需的位。
或者,在我看来,对你的实际问题有一个更好的解决方案。
sol = Solve[x^3 + x*y + y^2 - 36 == 0,{x}][[1]] 您可能需要一些选项来获得正确的解决方案。
Table[{x/. sol,y},{y, -3 Pi, 3 Pi, 0.02}]发布于 2011-09-09 20:10:14
$.02对韦尔贝亚的回答的贡献:
记住检查x(y)和y(x)解,因为其中一个可能比另一个更干净。
在您的示例中:

https://stackoverflow.com/questions/7356699
复制相似问题