如何实现椭圆锥和椭圆抛物面的表面计算(在R中)?

时间:2014-03-28 17:19:20

标签: r math statistics geometry

如何计算R中椭圆抛物面的表面,只有两个主轴a和b,以及高度h?

背景:有一群类似于椭圆形抛物线的东西。 (想想hummocks,例如)。我在统计上感兴趣的是:当我将总体表面近似为矩形(a * b)而不是对其表面进行正确建模时,我引入的均值和SD误差有多大?我可以去找一个圆锥体,但我在这些数据中有一些非常长的椭圆。这让我想方设法如何计算elliptical paraboloidelliptic cone。到目前为止,这对我回答我的问题没有帮助。

我无法正确翻译Wolfram和维基百科,只是开始使用

paraboloid.surf <- function(a,b,h){2*a*sqrt(b^2+h^2)* E * sqrt((1-b^2/a^2)/(1+b^2/a^2))}

不知道如何计算E,或者甚至理解这是E乘以该项,还是函数E(k)k =该项。

有人可以帮助我并提供一些代码吗?我会对锥形作为抛物线解决方案感兴趣,但任何一个都比没有好。我希望这真的非常重要,而且我并非完全愚蠢。 =)

2 个答案:

答案 0 :(得分:2)

所以我假设你想要椭圆形抛物面的表面积。基本框架给出here,从中获取以下图像。

所以问题是如何在R中计算这个?最难的部分是双积分,可以使用adaptIntegrate(...)包中的cubature函数进行评估。

A <- function(a,b,h) {
  require(cubature)
  integrand <- function(x,a,b){
    u <- x[1]
    v <- x[2]
    E <- 1+((a*cos(v))^2 + (b*sin(v))^2)/(4*u)
    F <- (b^2 - a^2)*sin(2*v)/4
    G <- u*((a*sin(v))^2+(b*cos(v))^2)
    return(sqrt(E*G-F^2))
  }
  adaptIntegrate(integrand, 
                 lowerLimit=c(0,0), upperLimit=c(h,2*pi), a=a,b=b)$integral
}

我们可以通过注意

来确认这一点
  

a = b = h = 1

     

E = 1 + 1 / 4u

     

F = 0

     

G = u

     

A =2π∫du方位(u + 1/4)

可以封闭形式评估:

  

A =4π/ 3 [(5/4) 3/2 - (1/4) 3/2 ] = 5.330414

A(1,1,1)
# [1] 5.330413
(4*pi/3)*((5/4)^(3/2) - (1/4)^(3/2))
# [1] 5.330414

答案 1 :(得分:1)

https://en.wikipedia.org/wiki/Elliptic_paraboloid开始,椭圆抛物线的定义等式为z/c = x^2/a^2 + y^2/b^2。我们可以将其改造成一座高度较高的山丘&#39; h&#39; z=0的基数为椭圆。

对于椭圆抛物线

   z = h*(1 - ((x/a)^2+(y/b)^2)).

ab是椭圆的半长半轴和半短轴,通过z = 0切割圆锥而生成h是上述点的高度(0,0)。

对于椭圆锥

   z = h*(1 - sqrt((x/a)^2+(y/b)^2))`. 

ab是通过z=0切割圆锥而生成的椭圆的半长轴和半短轴。

要绘制两个您需要按平面z=0进行剪辑的内容,请使用max(0,h*(1 - ((x/a)^2+(y/b)^2))

椭圆的面积为pi a b,圆锥的体积为1/3 basearea * h,因此圆锥的体积为

    1/3 pi a b h.

正如其他地方所提到的,椭圆抛物面的体积有点棘手。 我们可以尝试通过在z方向切片来做到这一点。

    int_{z=0}^{h} area of ellipse at height z dz. 

如果高度为z的椭圆具有半成a(z)b(z),则该区域为

    A(z) = pi a(z) b(z). 

要通过平面a(z)b(z)找到抛物面的y=0x=0切片,这些会给出两个抛物线z = h *(1 - (x/a)^2)z = h *(1 - (y/b)^2) 。重新排列z/h = 1 - (x/a)^2(x/a)^2 = 1 - z/h x/a = sqrt(1-z/h) x=a*sqrt(1-z/h)这是我们的a(z)。类似b(z)=b*sqrt(1-z/h)。高度为z的椭圆面积为

 A(z) = pi a(z) b(z)
      = pi a sqrt(1-z/h) b sqrt(1-z/h) 
      = pi a b (1-z/h)

集成

 int_{z=0}^h pi a b (1-z/h)
    = pi a b [z - z^2/(2 h)]_0^h
    = pi a b (h - h^2/(2 h))
    = 1/2 pi a b h

非常简单。

为了比较,高度为h且长度为2a2b的长方体的体积为

    4 a b h.

表面积

https://en.wikipedia.org/wiki/Elliptic_integral#Complete_elliptic_integral_of_the_second_kind起,半长轴a和偏心e的椭圆的圆周

    4 a E(e)

其中E(e)是第二种完整的椭圆积分。偏心率e

    e = sqrt( 1 - b^2/a^2 ).

在锥形和椭圆形抛物面情况下,所有水平切片的偏心率都是恒定的。然后表面积的积分很好地简化。对于锥体 a(z) = a * ( h - z)。所以

    int_z 4 a(z) E(e) dz
       = 4 E(e) int_z a(z) dz
       = 4 E(e) int_{z=0}^h a * (h -z ) dz
       = 4 a E(e) int_{z=0}^h h - z dz
       = 4 a E(e) [h z - z^2/2]_{z=0}^h
       = 4 a E(e) h^2/2 
       = 2 a E(e) h^2

对于椭圆抛物面a(z)=a*sqrt(1-z/h),积分是

    int_z 4 a(z) E(e) dz
       = 4 E(e) int_z a(z) dz
       = 4 E(e) int_{z=0}^h a * sqrt(1-z/h) dz

更改变量w=1-z/h限制为1和0 dz/dw = -h所以

       = 4 E(e) int_{w=1}^0 a * sqrt(w) * -h dw
       = 4 a E(e) h int_{w=0}^1 sqrt(w) dw      // switching limits round
       = 4 a E(e) h [ 2 w^(3/2) /3]_{w=0}^1
       = 8/3 a E(e) h.

多元正态分布

另一种更标准的模型是2D高斯https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Density_function

    z = 1/(2 pi a b) exp( -( (x/a)^2 + (y/b)^2 )/2). 

除了基地之外,这看起来非常接近抛物面。