1 | |
---|
2 | Set Dates.(NameBlock arg) |
---|
3 | { |
---|
4 | @Serie _.serie_ = [[ arg::_.serie ]], |
---|
5 | @Date _.ini_ = [[ getOptArg(arg, "_.ini", First($_.serie_)) ]]; |
---|
6 | @Date _.end_ = [[ getOptArg(arg, "_.end", Last($_.serie_)) ]]; |
---|
7 | Real zeroIsData = getOptArg(arg, "_.zeroIsData", 1); |
---|
8 | |
---|
9 | Set dates1 = Dates(Dating($_.serie_), $_.ini_, $_.end_); |
---|
10 | Set dates = SetConcat(EvalSet(dates1, Set(Date d) |
---|
11 | { |
---|
12 | Case( |
---|
13 | IsUnknown(SerDat($_.serie_, d)), Copy(Empty), |
---|
14 | SerDat($_.serie_, d)==0 & !zeroIsData, Copy(Empty), |
---|
15 | 1, [[ d ]] |
---|
16 | ) |
---|
17 | })) |
---|
18 | }; |
---|
19 | Anything PutDescription(" |
---|
20 | Saca el set de fechas de una serie _.serie donde esta definida"+NL+ |
---|
21 | "NameBlock arg = [["+NL+ |
---|
22 | " Serie _.serie = serie,//Obligatorio"+NL+ |
---|
23 | " Date _.ini = desde, //Opcional"+NL+ |
---|
24 | " Date _.ini = hasta //Opcional"+NL+ |
---|
25 | " Real _.zeroIsData = zeroIsData//Opcional"+NL+ |
---|
26 | "]]"+NL+ |
---|
27 | "Por defecto:"+NL+ |
---|
28 | " Date _.ini = First(_.serie),"+NL+ |
---|
29 | " Date _.ini = Last(_.serie) ,"+NL+ |
---|
30 | " Real _.zeroIsData = 1."+NL+NL+ |
---|
31 | "Real _.zeroIsData = 1 -> considerar los 0 de la serie como dato. "+NL+ |
---|
32 | "Real _.zeroIsData = 0 -> no considerar los 0 de la serie como dato. ", |
---|
33 | Dates. |
---|
34 | ); |
---|
35 | |
---|
36 | |
---|
37 | Set InterpolaSer.(NameBlock arg) |
---|
38 | { |
---|
39 | @Serie _.serie_ = [[ arg::_.serie ]]; |
---|
40 | Text _.tms_ = getOptArg(arg, "_.tms", DatingName($_.serie_)); |
---|
41 | Text method_ = getOptArg(arg, "_.method", "linear" ); |
---|
42 | Real zeroIsData = getOptArg(arg, "_.zeroIsData", 1); |
---|
43 | Text name_ = Name($_.serie_); |
---|
44 | Text name = ToTolName(If(name_=="", "Ser", name_)+Name(Dating($_.serie_))); |
---|
45 | // @TimeSet tmsOri = [[ Dating(ser) ]]; |
---|
46 | @Date ini = [[ First($_.serie_) ]]; |
---|
47 | @Date fin = [[ Last($_.serie_) ]]; |
---|
48 | Set dates_ = Dates.(arg); |
---|
49 | @Matrix x = SetOfMatrix( SetRow(EvalSet(dates_, DateToIndex)) ); |
---|
50 | @Matrix y = SetOfMatrix(SetRow(EvalSet(dates_, Real(Date d){SerDat($_.serie_, d)}))); |
---|
51 | Set indexTms = EvalSet(Dates(Eval("TimeSet "+_.tms_), $ini, $fin), DateToIndex); |
---|
52 | @Matrix xTms = SetOfMatrix( SetRow(indexTms) ); |
---|
53 | Code c = gsl_interp(method_, $x, $y); |
---|
54 | @Matrix yTms = SetOfMatrix( SetRow(EvalSet(indexTms, Real(Real t) { c(0,t) })) ); |
---|
55 | Set setSerInterpolate = MatSerSet($yTms, Eval("TimeSet "+_.tms_), $ini) |
---|
56 | }; |
---|
57 | Anything PutDescription(" |
---|
58 | Interpola la serie _.serie en las fechas donde no esta definida"+NL+ |
---|
59 | "NameBlock arg = [["+NL+ |
---|
60 | " Serie _.serie = serie, //Obligatorio"+NL+ |
---|
61 | " Text _.tms = tms, //Opcional"+NL+ |
---|
62 | " Text _.method = met //Opcional"+NL+ |
---|
63 | " Real _.zeroIsData = zeroIsData //Opcional"+NL+ |
---|
64 | "]]"+NL+ |
---|
65 | "Por defecto:"+NL+ |
---|
66 | " Text _.tms = DatingName(_.serie),"+NL+ |
---|
67 | " Text _.method = linear ,"+NL+ |
---|
68 | " Real _.zeroIsData = 1"+NL+NL+ |
---|
69 | "Real _.zeroIsData = 1 -> considerar los 0 de la serie como dato. "+NL+ |
---|
70 | "Real _.zeroIsData = 0 -> no considerar los 0 de la serie como dato. "+NL+ |
---|
71 | "Los metodos que se admite son los mismos de la funcón gsl_interp: "+NL+ |
---|
72 | " linear, polynomial, cspline, cspline_periodic, akima, akima_periodic", |
---|
73 | InterpolaSer. |
---|
74 | ); |
---|
75 | |
---|
76 | |
---|
77 | Serie InterpolaSer(NameBlock arg) |
---|
78 | { |
---|
79 | Serie InterpolaSer.(arg)[1] |
---|
80 | }; |
---|
81 | |
---|
82 | /* |
---|
83 | Date ini1 = y2000; |
---|
84 | Date fin1 = y2010; |
---|
85 | |
---|
86 | Date ini2 = y2005; |
---|
87 | Date fin2 = y2020; |
---|
88 | |
---|
89 | Serie ori_ori = SubSer(Gaussian(10, 0.5, Mensual), ini1, fin1); |
---|
90 | |
---|
91 | Serie ori = Copy(ori_ori); |
---|
92 | |
---|
93 | Set datS = Dates(Mensual, ini1, fin1); |
---|
94 | |
---|
95 | Set Omit = Unique(For(1, 12, Real(Real n) |
---|
96 | { |
---|
97 | Real rand = Rand(2, Card(datS)); |
---|
98 | Real randInteger = Floor(rand); |
---|
99 | PutSerDat(ori, datS[ randInteger ], ?) |
---|
100 | |
---|
101 | })); |
---|
102 | |
---|
103 | |
---|
104 | Serie prev = SubSer(Gaussian(20, 0.5, Trimestral), ini2, fin2); |
---|
105 | |
---|
106 | Serie foreMes = F:DatCh(B:prev, Mensual, FirstS); |
---|
107 | |
---|
108 | Serie concat = Concat( |
---|
109 | ori, |
---|
110 | foreMes, |
---|
111 | Last(ori) |
---|
112 | ); |
---|
113 | |
---|
114 | |
---|
115 | Serie concat_Interpola = InterpolaSer(NameBlock [[ Serie _.serie = concat, Real _.zeroIsData = 0 ]]) |
---|
116 | */ |
---|
117 | |
---|
118 | |
---|
119 | |
---|
120 | |
---|
121 | |
---|