0

我想绘制不等式 x3 <= sqrt(x1^2 + x2^2)。我的问题是,由于 sqrt 仅返回主平方根,因此仅绘制了图形的一半。我使用了下面的代码。

x1=x2=seq(-20,20,length=100);
x3=seq(-30,30,length=100);
df = expand.grid(x1=x1,x2=x2,x3=x3)
df$ind = with(df,x3 <= sqrt(x1^2 + x2^2) | x3 >= -sqrt(x1^2 + x2^2))
plot3d(df$x1,df$x2,df$x3,type='n')
with(df[df$ind, ], points3d(x, y, z, color = 'blue', size = 2))

但它没有像我预期的那样工作。它应该在 R^3 中绘制一个二阶锥。

4

1 回答 1

0

这个条件:

df$ind = with(df,x3 <= sqrt(x1^2 + x2^2) | x3 >= -sqrt(x1^2 + x2^2))

总是正确的,因为它等价于

X = x1^2 + x2^2
df$ind = with(df,x3 <= X | x3 >= -X)

但是 X 总是非负数,所以每个正数 x3 >= -X,每个负数都是 <=X。

应该是

df$ind = with(df,x3^2 <= x1^2 + x2^2)

这是圆锥的有效不等式(不需要 sqrt!)

或者,如果您想遵循最初的想法,则必须确保检查两个子条件的有效 x3 值(正/负):

df$ind = with(df,
              (x3>0  & x3 <=  sqrt(x1^2 + x2^2)) |
              (x3<=0 & x3 >= -sqrt(x1^2 + x2^2))
             )
于 2014-02-16T12:32:47.917 回答