在两个变量的网格上评估多变量函数

时间:2016-08-23 15:13:26

标签: function grid evaluate

我应该删除这个问题,因为我在stackoverflow上的其他地方找到了答案。

使用'Vectorize'解决了这个问题。

outer(x,y,Vectorize(model))

如果这有助于其他任何人,我会留下一点。我遇到的问题如下所述。

我是R的偶尔用户,主要用于科学编程。我想评估x,y值网格上的函数。类似这个简单例子的东西:

> x=seq(1,5,1)
> y=seq(1,5,1) 
> model = function(a,b){a+b}


> (outer(x,y,model))
[,1] [,2] [,3] [,4] [,5]
[1,]    2    3    4    5    6
[2,]    3    4    5    6    7
[3,]    4    5    6    7    8
[4,]    5    6    7    8    9
[5,]    6    7    8    9   10

我的实际功能的输入和输出如下所示(圆形管道中“交叉”流体的体积流量):

    > SimpleCrossModelCircPipe(eta_0 = 176.45, lambda = 2.4526, m=0.83122, mesh=1000,
pipe_length=1.925, press_drop=20.3609, pipe_diameter=0.0413)
[1] 0.005635064

我想评估值网格上的函数,例如press_drop和pipe_diameter。因此,定义这两个变量的函数。

> model = function(a,b){SimpleCrossModelCircPipe(eta_0 = 176.45, lambda = 2.4526, 
m=0.83122, mesh=1000,pipe_length=1.925, press_drop=a, pipe_diameter=b)}

对于一对值,这确实有效:

> model(1,2)
[1] 107249.8

但是,如果我使用'outer',则会出错。

> (outer(x,y,model))

seq.default中的错误(tau_wall,0,length.out = mesh + 1):   'from'必须长度为1

如果我为局部变量tau_wall放置一个print语句,则使用outer生成所有25个值,然后移动到生成错误的行,因为tau_wall的长度应为1,而不是25。

(outer(x,y,model))
 [1]  352.5289  705.0579 1057.5868 1410.1158 1762.6447  705.0579 1410.1158 2115.1736
 [9] 2820.2315 3525.2894 1057.5868 2115.1736 3172.7605 4230.3473 5287.9341 1410.1158
[17] 2820.2315 4230.3473 5640.4630 7050.5788 1762.6447 3525.2894 5287.9341 7050.5788
[25] 8813.2235

是否有一个简单的解决方法可以使这项工作?

最佳,

史蒂夫

0 个答案:

没有答案