具有重复函数的R - 绘图表中的无差异曲线

时间:2015-03-15 12:13:38

标签: r

我上周刚刚学习了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函数,但我有两个值,我有点失去了如何将它们放在那里。

我会非常感激,如果有人给我看,如何尽可能最有效地绘制轮廓图。

1 个答案:

答案 0 :(得分:1)

您可以使用outer

n <- 11
foo <- outer(X=seq_len(n), Y=seq_len(n), function(x, y) pmin(3*x, 9*y))

outer将指定的函数应用于传递给参数XY的向量的所有元素组合。在这种情况下,我们将函数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)

enter image description here

要增加评估函数的点数,只需传递更精细的分辨率矢量:

foo2 <- outer(seq(1, 11, 0.01), seq(1, 11, 0.01), function(x, y) pmin(3*x, 9*y))
contour(foo2)

enter image description here

现在从1到11以0.01的增量进行评估。