绘制R中的不等式

时间:2014-02-16 12:20:16

标签: r plot inequality

我想绘制不等式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中绘制二阶锥。

1 个答案:

答案 0 :(得分:0)

这个条件:

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

始终为true,因为它等同于

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

但是X总是非负的,所以每个正x3都是> = -X,每个负数都是&lt; = 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))
             )