我上周刚刚学习了R,现在我正在玩它,但我找不到这个问题的答案
我有这样写的实用功能
U(X,Y)= MIN(3×,9Y)
目标是绘制此函数的等高线图。
我尝试了很多解决方案,直到现在我来到了这个
x<-seq(0,30,3)
y<-seq(0,90,9)
n<-1:11
table<-c(
pmin(x,y[1]),
pmin(x,y[2]),
pmin(x,y[3]),
pmin(x,y[4]),
pmin(x,y[5]),
pmin(x,y[6]),
pmin(x,y[7]),
pmin(x,y[8]),
pmin(x,y[9]),
pmin(x,y[10]),
pmin(x,y[11]))
mat<-matrix(table, ncol=11, nrow=11)
contour(x,y,mat)
显然,等高线图不是很精确。
我想现在,我可以使用什么,所以我不必像这样用手写表。
我想以某种方式使用sapply函数,但我有两个值,我有点失去了如何将它们放在那里。
我会非常感激,如果有人给我看,如何尽可能最有效地绘制轮廓图。
答案 0 :(得分:1)
您可以使用outer
:
n <- 11
foo <- outer(X=seq_len(n), Y=seq_len(n), function(x, y) pmin(3*x, 9*y))
outer
将指定的函数应用于传递给参数X
和Y
的向量的所有元素组合。在这种情况下,我们将函数pmin(3*x, 9*y)
应用于两个向量的所有元素对,每个元素都是数字1到n。
foo
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 3 3 3 3 3 3 3 3 3 3 3
## [2,] 6 6 6 6 6 6 6 6 6 6 6
## [3,] 9 9 9 9 9 9 9 9 9 9 9
## [4,] 9 12 12 12 12 12 12 12 12 12 12
## [5,] 9 15 15 15 15 15 15 15 15 15 15
## [6,] 9 18 18 18 18 18 18 18 18 18 18
## [7,] 9 18 21 21 21 21 21 21 21 21 21
## [8,] 9 18 24 24 24 24 24 24 24 24 24
## [9,] 9 18 27 27 27 27 27 27 27 27 27
## [10,] 9 18 27 30 30 30 30 30 30 30 30
## [11,] 9 18 27 33 33 33 33 33 33 33 33
contour(foo)
要增加评估函数的点数,只需传递更精细的分辨率矢量:
foo2 <- outer(seq(1, 11, 0.01), seq(1, 11, 0.01), function(x, y) pmin(3*x, 9*y))
contour(foo2)
现在从1到11以0.01的增量进行评估。