Optimization 在Mathematica中将一系列平面作为实体绘制

Optimization 在Mathematica中将一系列平面作为实体绘制,optimization,graphics,wolfram-mathematica,fill,Optimization,Graphics,Wolfram Mathematica,Fill,我试图在mathematica中将一系列平面画成一个实体。我首先尝试使用RangePlot3D选项以及填充选项来绘制3D体积,但找不到工作结果 我试图创建的图形将显示z轴和半径与3D长方体原点之间的偏差。我现在使用的公式是: Plot3D[Evaluate[{Sqrt[(C[1])^2 + x^2 + y^2]} /. C[1] -> Range[6378100, 6379120]], {x, -1000000, 1000000}, {y, -1000000, 1000000}, Ax

我试图在mathematica中将一系列平面画成一个实体。我首先尝试使用RangePlot3D选项以及填充选项来绘制3D体积,但找不到工作结果

我试图创建的图形将显示z轴和半径与3D长方体原点之间的偏差。我现在使用的公式是:

Plot3D[Evaluate[{Sqrt[(C[1])^2 + x^2 + y^2]} /. 
C[1] -> Range[6378100, 6379120]], {x, -1000000, 
1000000}, {y, -1000000, 1000000}, AxesLabel -> Automatic]
(更易于管理的范围的输出如下所示)

式中,C是每个平面上的原始Z值,该方程的结果为Z+(r-Z) 对于x,y平面上的任意点

然而,这种方法效率极低。因为这将用于模拟原始z值大于6000000且高度高于1000的大型对象,mathematica无法绘制数千个平面的图形,并用响应方法表示它们

此外,由于C的范围仅包括整数值,因此这些平面之间存在不连续性

有没有一种方法可以使用不同的mathematica功能来重写它,从而生成一个3Dplot,该3Dplot在我的系统上既是一个合理的负载,也是一个平滑的对象

第二,我能做些什么来提高我的绩效?当计算上述输入>30分钟时,mathematica仅利用了大约30%的CPU和4GB的ram,图形卡上的负载也很轻。这仅仅是chrome目前在我的系统上使用量的两倍

我试图启用CUDALink,但无法正确启用。这会为这种类型的处理提供性能提升吗

作为参考,我的系统构建为: 16GB内存 英特尔i7 4770K以库存设置运行 英伟达GeForce 760GTX
256三星SSD

绘制一百万个平面并希望成为3d实体似乎不太可能成功

也许你可以改编成这样

Show[Plot3D[{Sqrt[6^2+x^2+y^2], Sqrt[20^2+x^2+y^2]}, {x, -10, 10}, {y, -10, 10},
   AxesLabel -> Automatic, PlotRange -> {{-15, 15}, {-15, 15}, All}], 
  Graphics3D[{
   Polygon[Join[
    Table[{x, -10, Sqrt[6^2 + x^2 + (-10)^2]}, {x, -10, 10, 1}], 
    Table[{x, -10, Sqrt[20^2 + x^2 + (-10)^2]}, {x, 10, -10, -1}]]], 
   Polygon[Join[
    Table[{-10, y, Sqrt[6^2 + (-10)^2 + y^2]}, {y, -10, 10, 1}], 
    Table[{-10, y, Sqrt[20^2 + (-10)^2 + y^2]}, {y, 10, -10, -1}]]], 
   Polygon[Join[
    Table[{x, 10, Sqrt[6^2 + x^2 + 10^2]}, {x, -10, 10, 1}], 
    Table[{x, 10, Sqrt[20^2 + x^2 + 10^2]}, {x, 10, -10, -1}]]], 
   Polygon[Join[
    Table[{10, y, Sqrt[6^2 + 10^2 + y^2]}, {y, -10, 10, 1}], 
    Table[{10, y, Sqrt[20^2 + 10^2 + y^2]}, {y, 10, -10, -1}]]]}]]

这样做是绘制顶部和底部曲面,然后构造四个多边形,每个多边形沿一侧连接顶部和底部曲面。但有一点要注意,如果你仔细观察,你会发现,因为它们是多边形,四个面的边是由短线段组成的,而不是抛物线,因此没有完美地连接两个抛物面,可能会有微小的间隙或重叠。这可能会也可能不会对您的申请产生任何影响

在一台机器上,这个图形只显示了几分之一秒,而这台机器只是你的几分之一秒

Mathematica不会自动将计算并行化到多个核上。 CUDA编程是比打开链接更大的挑战。 如果您可以简单地定义实体的每个面并将它们与Show组合,那么 我认为你会有更大的成功机会。

另一种方法:

 xyrange = 10
 cmin  = 6
 cmax = 20
 RegionPlot3D[
    Abs[x] < xyrange && Abs[y] < xyrange && 
     cmin^2  <  z^2 - ( x^2 + y^2) < cmax^2  ,
     {x, -1.2 xyrange,  1.2 xyrange}, {y, -1.2 xyrange, 1.2 xyrange},
     {z, cmin,  Sqrt[ cmax^2 + 2 xyrange^2]}, MaxRecursion -> 15, 
             PlotPoints -> 100]
xyrange=10
cmin=6
cmax=20
区域绘图3D[
Abs[x]15,
绘图点->100]

这远没有比尔的方法快,但如果你画一个更复杂的区域,它可能会有用。注意
RegionPlot
不适用于原始示例,因为体积与绘图范围相比太小