Мне нужна помощь в переписывании моего кода. У меня есть код, который я написал в R
для контурного графика, который я хочу. Код работает, однако, он очень неэффективен в том смысле, что ему приходится строить тысячи точек, чтобы получить именно то, что я хочу (серая область), и поэтому я хотел бы посмотреть, есть ли более простой способ сделать то, что мой код делает.
Я в основном хочу построить функцию
f = x1 + x2
при условии соблюдения следующих функций ограничения
c1 = 3/2 - x1 - 2x2 - 1/2 * sin (2 * pi (x1 ^ 2 - 2x2)) <0 </p>
c2 = x1 ^ 2 + x2 ^ 2-3 / 2 <0 </p>
И поэтому, когда c1 и c2 оба больше нуля, я хотел бы выделить эти области серым цветом и показать только функцию f, где c1 и c2 меньше 0. А области x1 и x2 находятся между 0 и 1.
Вот мой текущий код R:
x1 = seq(0,1,.001)
x2 = seq(0,1,.001)
f = function(x1,x2){
ans = x1 + x2
return(ans) }
h = function(x1,x2){
ans1 = 1.5-x1-2*x2-.5*sin(2*pi*(x1^2-2*x2))
ans2 = x1^2+x2^2-1.5
ans1 = sapply(ans1,function(x){max(x,0)})
ans2 = sapply(ans2,function(x){max(x,0)})
ans = ans1 + ans2
return(ans) }
z = outer(x1,x2,f)
w = outer(x1,x2,h)
image(x1,x2,z,xlab=expression(x[1]),ylab=expression(x[2]))
contour(x1,x2,z,add=TRUE)
X = cbind(expand.grid(x1,x2),c(w))
points(X[X[,3]!=0,1],X[X[,3]!=0,2],pch=19,col="lightgrey")