利用RecurrenceTable生成数据结果正确,但是程序会报错
mathematica吧
全部回复
仅看楼主
level 2
Nw = 300;
(*w1生成*)
ndist1 = UniformDistribution[{-2, 5}];
w1 = Table[RandomReal[ndist1], {Nw}];
(*e生成*)
ndist2 = NormalDistribution[0, 0.3];
e = Table[RandomReal[ndist1], {Nw}];
ndist3 = NormalDistribution[];
(*w2生成*)
e2 = Table[RandomReal[ndist3], {Nw}];
w21 = 0.05 + e2[[1]];
w22 = 0.05 + 0.7*w21 + e2[[2]];
w23 = 0.05 + 0.7*w22 + 0.15*w21 + e2[[3]];
w2 = RecurrenceTable[{w2[n] == 0.05 + 0.7*w2[n - 1] + 0.15*w2[n - 2] - 0.1*w2[n - 3] + e2[[n]], w2[1] == w21, w2[2] == w22, w2[3] == w23}, w2, {n, 1, 300}];
(*w23生成*)
e3 = Table[RandomReal[ndist3], {Nw}];
w31 = 0.02 + e3[[1]];
w32 = 0.02 + 0.6*w31 + e3[[2]];
w33 = 0.02 + 0.6*w32 + 0.35*w31 + e3[[3]];
w34 = 0.02 + 0.6*w33 + 0.35*w32 - 0.1*w31 + e3[[4]];
w3 = RecurrenceTable[{w3[n] == 0.02 + 0.6 w3[n - 1] + 0.35 w3[n - 2] - 0.1 w3[n - 3] - 0.3 w3[n - 4] + e3[[n]], w3[1] == w31, w3[2] == w32, w3[3] == w33, w3[4] == w34}, w3, {n, 1, 300}];
(*La生成*)
La = Sin[3 w1] + 2 Cos[0.4 w1] + e;
这段代码总是会出现下面的报错:
但是结果时
正确的
。可是这些报错的内容占很大篇幅,每次都要去删,有大佬知道怎么解决这个问题么?
新手菜鸟,救救孩子
2020年11月16日 05点11分 1
吧务
level 10
先试试定义为e3[n_?NumericQ] := e3[[n]],然后把所有e3[[n]]换为e3[n],以避免在n未知时就提前计算e3[[n]]。
2020年11月16日 08点11分 2
还有适当限制范围。话说RecurrenceTable居然会计算301,302,303我是没想到……
2020年12月05日 04点12分
吧务
level 15
一个办法:
help[lst_, i_ /; 1 <= i <= 300] := lst[[i]]
RecurrenceTable[{w2[n] ==
0.05 + 0.7*w2[n - 1] + 0.15*w2[n - 2] - 0.1*w2[n - 3] + help[e2, n], w2[1] == w21,
w2[2] == w22, w2[3] == w23}, w2, {n, 1, 300}] // ListLinePlot
话说总感觉这问题用RecurrenceTable其实繁了,但是一时想不出改法……
2020年12月05日 04点12分 3
1