绘图时如何获得某些东西的西格玛?
How to have sigma of something while plotting?
我在 R 中使用 mosaic
包的 plotFun
函数。我正在尝试绘制 3D 图。以下是我的代码片段:
plotFun(2*l*(w/log(beta*kspill*lambda^2+(1+(w/x-w)/10)*(lambda^2*5+lambda^1*5+1))+(w/x-w)/log((1+((w/x-w)/10)^1)*(lambda^2*5+lambda^1*5+1))) ~ x & lambda ,
x.lim=range(0.8,1), lambda.lim=range(1,3),
l=60,w=40,kspill=10,f=1,beta=0.5,surface=TRUE)
这工作正常。现在假设我想修复 lambda
并引入一个新变量 t
这样如果 t=2
我们得到 lambda^2*5+lambda^1*5+1
就像上面的例子一样。如果 t=3
我们得到 lambda^3*5+lambda^2*5+lambda^1*5+1
等等。所以现在我有一个固定的 lambda t.lim=range(1,3)
:
plotFun(2*l*(w/log(beta*kspill*lambda^2+(1+(w/x-w)/10)*("depends on t"))+(w/x-w)/log((1+((w/x-w)/10)^1)*("depends on t"))) ~ x & lambda ,
x.lim=range(0.8,1), t.lim=range(0.5,1),
l=60,w=40,kspill=10,f=1,beta=0.5,lambda=1,surface=TRUE)
上面"depends on t"部分写什么。我想我们不能在那里放一个 for
循环来计算 5* {summation i=0 to i=t}lambdai。如何去做?
您可以用
定义您的"depends on t"
depends_on_t <- makeFun(5 * sum(lambda^(1:round(t))) + 1 ~ t + lambda, lambda = 1)
但是您还有一些问题需要解决:
1) 您的 plotFun()
命令正在使用 x
和 lambda
创建绘图,但我猜您的意思是 x
和 t
。
2) t
只能是一个整数,如果你打算在你建议的类型的总和中使用它的话。但是您正在创建一个假设轴为连续变量的图。我插入 round(t)
作为在计算总和之前从实数值移动到整数值的一种方法。这使得该函数适用于 non-integer 个值,但它可能不是您真正想要的。
最后,补充几点建议:
3) x & lambda
应替换为 x + lambda
。 &
这里的使用可以追溯到 mosaic
包的早期,虽然它仍然受到支持(我想,我们不再真正测试它了),但我们更喜欢 x + lambda
.
4) 我建议将函数的定义与 plotFun()
命令分开。您可以使用 mosaic::makeFun()
如上所述,或通常的 function()
来定义您的函数以及您希望其参数使用的任何默认值。然后您可以对该函数进行健全性检查,或者在多个图中使用它,而不是在每个图中包含所有函数的定义。
5) 使用空格和 returns 会使您的代码更具可读性。 (将您的示例简化为一个最小的示例来演示您所询问的问题。)
6) 我想你可能想要
depends_on_t <- makeFun(5 * sum(lambda^(0:round(t))) ~ t + lambda, lambda = 1)
而不是你描述的公式,但没有更多的上下文,我真的不知道。
我在 R 中使用 mosaic
包的 plotFun
函数。我正在尝试绘制 3D 图。以下是我的代码片段:
plotFun(2*l*(w/log(beta*kspill*lambda^2+(1+(w/x-w)/10)*(lambda^2*5+lambda^1*5+1))+(w/x-w)/log((1+((w/x-w)/10)^1)*(lambda^2*5+lambda^1*5+1))) ~ x & lambda ,
x.lim=range(0.8,1), lambda.lim=range(1,3),
l=60,w=40,kspill=10,f=1,beta=0.5,surface=TRUE)
这工作正常。现在假设我想修复 lambda
并引入一个新变量 t
这样如果 t=2
我们得到 lambda^2*5+lambda^1*5+1
就像上面的例子一样。如果 t=3
我们得到 lambda^3*5+lambda^2*5+lambda^1*5+1
等等。所以现在我有一个固定的 lambda t.lim=range(1,3)
:
plotFun(2*l*(w/log(beta*kspill*lambda^2+(1+(w/x-w)/10)*("depends on t"))+(w/x-w)/log((1+((w/x-w)/10)^1)*("depends on t"))) ~ x & lambda ,
x.lim=range(0.8,1), t.lim=range(0.5,1),
l=60,w=40,kspill=10,f=1,beta=0.5,lambda=1,surface=TRUE)
上面"depends on t"部分写什么。我想我们不能在那里放一个 for
循环来计算 5* {summation i=0 to i=t}lambdai。如何去做?
您可以用
定义您的"depends on t"
depends_on_t <- makeFun(5 * sum(lambda^(1:round(t))) + 1 ~ t + lambda, lambda = 1)
但是您还有一些问题需要解决:
1) 您的 plotFun()
命令正在使用 x
和 lambda
创建绘图,但我猜您的意思是 x
和 t
。
2) t
只能是一个整数,如果你打算在你建议的类型的总和中使用它的话。但是您正在创建一个假设轴为连续变量的图。我插入 round(t)
作为在计算总和之前从实数值移动到整数值的一种方法。这使得该函数适用于 non-integer 个值,但它可能不是您真正想要的。
最后,补充几点建议:
3) x & lambda
应替换为 x + lambda
。 &
这里的使用可以追溯到 mosaic
包的早期,虽然它仍然受到支持(我想,我们不再真正测试它了),但我们更喜欢 x + lambda
.
4) 我建议将函数的定义与 plotFun()
命令分开。您可以使用 mosaic::makeFun()
如上所述,或通常的 function()
来定义您的函数以及您希望其参数使用的任何默认值。然后您可以对该函数进行健全性检查,或者在多个图中使用它,而不是在每个图中包含所有函数的定义。
5) 使用空格和 returns 会使您的代码更具可读性。 (将您的示例简化为一个最小的示例来演示您所询问的问题。)
6) 我想你可能想要
depends_on_t <- makeFun(5 * sum(lambda^(0:round(t))) ~ t + lambda, lambda = 1)
而不是你描述的公式,但没有更多的上下文,我真的不知道。