Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 通过添加每次迭代的previus值并对初始值进行子结构,将表中的零件替换n次_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 通过添加每次迭代的previus值并对初始值进行子结构,将表中的零件替换n次

Wolfram mathematica 通过添加每次迭代的previus值并对初始值进行子结构,将表中的零件替换n次,wolfram-mathematica,Wolfram Mathematica,我有下面的嵌套表 (myinputmatrix = Table[Nest[function, myinputmatrix[[i]][[j]], myinputmatrix[[i]][[j]][[2]][[2]] + myinputmatrix[[i]][[j]][[3]][[2]]], {i, Dimensions[myinputmatrix][[1]]}, {j, Dimensions[myinputmatrix][[2]]}]) // TableForm fq[k_?N

我有下面的嵌套表

 (myinputmatrix = Table[Nest[function, myinputmatrix[[i]][[j]], 
 myinputmatrix[[i]][[j]][[2]][[2]] + 
  myinputmatrix[[i]][[j]][[3]][[2]]], {i, 
 Dimensions[myinputmatrix][[1]]}, {j, 
 Dimensions[myinputmatrix][[2]]}]) // TableForm

fq[k_?NumericQ] := Count[RandomReal[{0, 1}, k], x_ /; x < .1]

 function[x_List] :=  ReplacePart[
 x, {{2, 1} -> x[[2]][[1]] - #1, 
我的问题是,我只想添加上面粗体部分中的#1,而不仅仅是新的#1,我希望它为n次(嵌套函数次)添加所有的#1

如果我尝试这个函数

 function[x_List] :=  ReplacePart[
 x, {{2, 1} -> x[[2]][[1]] - #1, {2, 2} ->   #1,
  {3, 1} -> x[[3]][[1]] - #2, {3, 2} ->  #2}] &[fq[x[[2]][[1]]],
 fq[x[[2]][[1]]]];

因此,我有fq[k]的最后一个值.我想用0替换我表中的那个部分,但不起作用,因为我在嵌套列表中使用了它,我还想从我的初始表中减去那个部分,但我不确定哪种方法是最好的,我的想法是否正确。有人能帮我吗?

如果我可以重申这个问题,希望c为我自己澄清这个问题。在
嵌套中的每次迭代中,您都不想添加当前(随机)的来自
fq
的输出,但它的当前值和所有过去值的累积。但由于随机输出在每次迭代时都取决于输入矩阵,因此需要在同一次迭代中计算矩阵的随机数和当前值。 如果不是这样,你可以使用
折叠

按照Sasha的建议重新启动
fq
编辑,并进行一些类型检查,以避免输入错误的问题:

fq[k_Integer?Positive]:=RandomVariate[BinomialDistribution[k,.1]]
您可能需要添加一些其他错误检查代码。根据您的要求,类似这样的代码也可以

fq[0]:= 0;
fq[k_Real?Positive]:=RandomVariate[BinomialDistribution[Round[k],.1]]
您需要
函数
将随机数作为参数。编辑1和2我已更改此函数的语法,以显式使用参数,而不是函数中原始问题的匿名函数。这应该避免一些语法错误。还请注意,我使用了“
NumericQ
”而不是将“
Real
”作为
rv1
rv2
参数的类型,因为它们可以在
Nest
迭代开始时为整数

function[x_List, rv1_?NumericQ, rv2_?NumericQ] :=  ReplacePart[
 x, {{2, 1} -> x[[2]][[1]] - rv1, {2, 2} ->   rv1,
 {3, 1} -> x[[3]][[1]] - rv2, {3, 2} ->  rv2}]
然后使用
With
将当前随机数作为局部常数传递给
Nest
函数,该函数用于包含矩阵和随机变量累积的列表。我使用了
myoutputmatrix
,因为我真的不喜欢一直重写现有表达式的想法。这只是我自己。不w、 另一件事是,您需要设置迭代次数
n
。我已经将其设置为5,但如果您愿意,可以将其设置为函数中的参数(见下文)

第一个
存在,因为最后你只需要矩阵,而不是随机变量的累积

outputmatrix[input_List, n_Integer?Positive] /; 
  Length[Dimensions[input]] == 4 := 
  Table[First[
   Nest[With[{rv = fq[#1[[1]][[2]][[1]]]}, {function[#1[[1]], rv, 
    rv + #1[[2]]], rv + #1[[2]]}] &, {input[[i]][[j]], 0}, n]],
    {i, Dimensions[input][[1]]}, {j, Dimensions[input][[2]]}]

outputmatrix[myinputmatrix, 10] // TableForm

编辑我现在已经检查过了,并且它运行了,但是请注意,输出中可能会出现负数,这不是您想要的,我不这么认为。

我只是想提醒您注意一个事实,
fq[k]
BinomialDistribution[k,1/10]生成一个随机变量
,这是一种非常低效的方式。因此,您可以将
fq
替换为
fq[k.]:=随机变量[BinomialDistribution[k,.1]]
@Sasha我做fq是为了生成随机数的次数您的
fq
实现通过某种程序模拟随机变量。我声称此随机变量具有与
二项分布相同的概率分布[k,0.1]
。事实上,您可以通过在v8中评估
DistributionItemSet[Table[fq[10],{10^4}],BinomialDistribution[10,0.1]
来说服自己。如果您最终将对该随机变量进行平均(即计算期望值),然后您可以将您的
fq
替换为任何其他具有相同属性的代码distribution@Sasha非常感谢,我会检查:)谢谢你的回复。正如您所说,可能存在一些语法错误,即使我尝试了也无法更正。你能试着修一下吗?。顺便说一句,如果我正确理解了你在课文中所说的话,我想这就是我需要的。诺娜,对不起。将我提供的三位代码中的每一位放入笔记本的单独单元格中,并按顺序计算它们。哪个单元格出现语法错误?错误消息是什么?它是橙色的细胞支架还是别的什么?我现在正在工作,手头没有Mathematica安装,因此没有这些信息很难解决问题。今晚我可以看一下,但是我们有一位客人来了。错误在最后一位,我的输入矩阵正在被评估。问题是括号,但通过纠正我认为是问题的地方,我会犯更多的错误。我给你发了一张照片,可能比我的英文好:PI无法上传图片,对不起。我在我的google doc帐户中有它,如果你不想让我了解你的电子邮件,就没有必要检查它。很抱歉。现在再试一次-我想我在With[{},…]部分发现了错误。通常情况下,我使用特殊的双括号来表示列表部分,所以当我错过了结束方括号时,我会选择。
(myoutputmatrix = Table[ First[Nest[With[{rv=fq[#1[[1]][[2]][[1]] ]}, 
{function[#1[[1]],rv, rv+#1[[2]] ],rv+#1[[2]] }]&, 
 { myinputmatrix[[i]][[j]], 0 }, 5]],
 {i,  Dimensions[myinputmatrix][[1]]}, {j, 
 Dimensions[myinputmatrix][[2]]}]) // TableForm
outputmatrix[input_List, n_Integer?Positive] /; 
  Length[Dimensions[input]] == 4 := 
  Table[First[
   Nest[With[{rv = fq[#1[[1]][[2]][[1]]]}, {function[#1[[1]], rv, 
    rv + #1[[2]]], rv + #1[[2]]}] &, {input[[i]][[j]], 0}, n]],
    {i, Dimensions[input][[1]]}, {j, Dimensions[input][[2]]}]

outputmatrix[myinputmatrix, 10] // TableForm