2015-06-12 7 views
4

Я хочу рассчитать объем (V) части сферы, которая является результатом пересечения сферы с тремя пальмами (x = 0, y = 0 и z = 1,5). Я использую R-язык, и это мой код. Я попробовал 2 разных метода с использованием декартовых и полярных координат. Оба они дают отрицательные ответы.Объем части срезанной сферы с использованием трех плоскостей с использованием R-языка (интегральный)

## Compute the Volume between 3 planes x=0, y=0 and z=1.5 and a sphere 
library("pracma", lib.loc="~/R/win-library/3.1") 
f <- function(x, y) (sqrt(4 -x^2 - y^2) - 1.5) # here the function(x,y) is subtracted with -1.5 which represents the plane z=1.5 
xmin <- 0 
xmax <- 2 
ymin <- 0 
ymax <- function(x) (sqrt(4 - x^2)) 
I <- integral2(f, xmin, xmax, ymin, ymax) 
I$Q # Integral over sector is not so exact 

# Exact Volume from AutoCAD V=0.3600 



## Volume of the sphere: use polar coordinates 
f0 <- function(x, y) (sqrt(4 - x^2 - y^2)-1.5) # for x^2 + y^2 <= 4 the f(x,y) means z changes between zmin=1 and zmax= sqrt(4-x^2-y^2) 
fp <- function(t, r) r * f0(r*cos(t), r*sin(t)) 
quad2d(fp, 0, pi/2, 0, 2, n = 101) # -0.523597 

Правильный ответ V = 0.3600. Может ли кто-нибудь дать мне подсказку, пожалуйста?

Приветствие

ответ

5

Вашей X-Y область интегрирования охватывает такую ​​область, где f(x,y)-1.5 является отрицательным, а также положительным. Пересечение вашей сферы с линией z=1.5 представляет собой окружность радиуса sqrt(7/4) (с использованием Пифагора), таким образом регулируя свои пределы надлежащим образом, вы получите:

library(pracma) 
f <- function(x, y) (sqrt(4 -x^2 - y^2) - 1.5) # here the function(x,y) is subtracted with -1.5 which represents the plane z=1.5 
xmin <- 0 
xmax <- sqrt(7/4) 
ymin <- 0 
ymax <- function(x) (sqrt(7/4 - x^2)) 
I <- integral2(f, xmin, xmax, ymin, ymax) 
I$Q # Integral over sector is not so exact 
# [1] 0.3599741 

Довольно близко к тому, что вы ожидали.

+0

Это было очень полезно. Но когда я хочу рассчитать объем между 3 плоскостями x = 1, y = 1, z = 1 и одной сферой с радиусом 2. Я изменил пределы (x от 1 до sqrt (3) и y от 1 до sqrt (3 -x^2)). Он дает неверный результат (V = 0.0330). Правильный - V = 0,0152. –

+0

Нет, это не так. По крайней мере, если я понимаю ваш домен интеграции. Правильное числовое значение будет 0,26113536 ...! Исправьте верхний предел y на 'sqrt (4-x^2)' - как и должно быть - и * integ22 вернет 0.251140. Вы можете попытаться повысить точность, установив параметр 'reltol', но я думаю, что вы получите лучшие результаты, используя полярные координаты. –

+0

Я использовал AutoCAD и точный объем куска между 3 плоскостями x = 1, y = 1 и z = 1, а сфера x^2 + y^2 + z^2 = 4 равна V = 0,0152. –

0

Я решил это для сферы с r = 2 и объемом пересечения сферической оболочки и трех плоскостей x = 1, y = 1 и z = 1.

## Compute the Volume between 3 planes x=1.0, y=1.0 and z=1.0 and a sphere 
library(pracma) 
f <- function(x, y) (sqrt(4 -x^2 - y^2) - 1) # here the function(x,y) is subtracted with -1.5 which represents the plane z=1.5 
xmin <- 1 
xmax <- sqrt(2) 
ymin <- 1 
ymax <- function(x) (sqrt(3 - x^2)) 
I <- integral2(f, xmin, xmax, ymin, ymax) 
I$Q # 
# [1] 0.01520549 
# Exact Volume from AutoCAD: 0.0152 

 Смежные вопросы

  • Нет связанных вопросов^_^